Skip to content

Northstar-Robotics/ZeroSimROSUnity

 
 

Repository files navigation

ZeroSim

ZeroSim is a robotics simulation engine built on the easy to use Unity 3D development platform and the power of the Robotics Operating System (ROS). ZeroSim is designed for ease of use and rapid development of all sorts of robotics and simulation -- from warehouses and industrial settings, to farming and outdoors -- from robotic arms to ground and drone based mobile robots.

ZeroSim is a project developed over several years by FS Studios for the rapid development of all sorts of robotic simulation projects for various clients, from robotic arms to mobile robots.

We are releasing ZeroSim as open source to support the community of roboticist and software engineers that have supported us over the decades. We are in active development and welcome all feature requests, bug reports, and pull requests.

MoveIt Example Mobile Robot Example

Overview

ZeroSim provides a multitude of tools for building robots and environments in Unity to interface with ROS. We strive to provide the same functionality and ROS interfaces of Gazebo. Including:

  • Dynamics simulation using the latest PhysX 4.x integrated in Unity.

    • Hinge, ball, linear and fixed joints.
  • Advanced 3D Rendering, including the latest realtime ray tracing technology.

  • Sensors:

  • Ready to use ROS standard controllers and plugins:

  • Full ROS messaging communications layers API.

    • Many premade standard ROS messages
    • Subscribe and publish
    • Action Servers
    • Fast and efficient message encoding using ROS Bridge and BSON over TCP.
    • Parameter server
  • Ready to run prebuilt ROS Docker images available publically on DockerHub: https://hub.docker.com/r/zerodog/zerosim_ros_vnc

  • Machine Learning tools:

    • Image Segmentation for training semantic segmentation algorithms.
  • URDF Import & Export

  • ROS2 support via ROS Bridge Suite (https://github.com/RobotWebTools/rosbridge_suite)

  • COMING SOON:

    • Configure and run Docker images within Unity Editor.
    • Secure communications via WebSockets.
    • Drone controller.

API Documentation

API Documentation

Getting Started

Video Tutorials

Tutorial #1: Install ZeroSim in Unity

Tutorial #2: Create a New ZeroSim Unity Scene

Tutorial #3: Connect to ROS

Tutorial #4: Build a Robot From Scratch

Tutorial #5: Import URDF Robot Universal Robots UR10 Arm

https://youtu.be/VJyvjJUfjv8

Recommended System

  • Ubuntu 18.04 or 20.04 (may work on MacOS or Windows but currently untested)
  • Unity 2020.x or greater
  • ROS Melodic (ZeroSim provides a pre-built Docker container for ROS functionality https://hub.docker.com/r/zerodog/zerosim_ros_vnc)
    • Note: ROS Melodic is our primary supported development environment, but ZeroSim has reportedly been able to run on Noetic and ROS2.

Setting up a new Unity Project

  1. In Unity Hub create a new Unity project using Unity 2020.x or later. New Unity Project
  2. Add ZeroSim via Unity Packages:
    1. Unity Menu Window -> Package Manager
    2. Select the + dropdown:
      Dropdown
    3. Select Add Package From Git URL... and enter git@github.com:fsstudio-team/ZeroSimROSUnity.git. Note this can take upto a few minutes to update but you should see the following:
      ZeroSim Package Installed
    4. Import the ZeroSim Samples by selecting the Samples Import button in the Package Manager:
      Import ZeroSim Samples
  3. IMPORTANT the default Unity physics settings do not work well with a lot of simulations. It is very much recommended (required for probably most all simulations) to set the physics settings by opening the Unity menu Edit -> Project Settings... -> Physics and set the Default Solver Iterations to 30 and the Default Solver Velocity Iterations to 60. Unity Physics Settings
  4. IMPORTANT the default Unity fixed timestep setting does not work well with a lot of simulions. It is very much recommended to set the Fixed Timestep setting by Edit -> Project Settings... -> Time to 0.005 Timestep Settings
  5. If running Unity on Linux you want to avoid using OpenGL and use Vulkan, otherwise image based sensors may run slowly or not at all. To change to using Vulkan:
    1. In the Unity Menu: Edit -> Project Settings...:
    2. Uncheck Auto Graphics API for Linux and then under Graphics APIs for Linux set Vulkan ahead of OpenGL:
      Vulkan Settings

Getting ZeroSim ROS Docker Container

  1. Available at https://hub.docker.com/r/zerodog/zerosim_ros_vnc or docker pull zerodog/zerosim_ros_vnc:latest

Running TurtleBot Test Scene

NOTE: Order of operations is important. Especially starting the Docker before the Unity simulation.

  1. Make sure that the ZeroSim samples are installed as outlined above.
  2. Make sure that the ZeroSim Docker container above is installed.
  3. Open the Turtlebot3_Waffle_test.scene Open Turtlebot Scene
  4. Launch the ZeroSim Docker via:
docker run -it --rm \
--publish=9090:9090 \
--publish=11311:11311 \
--publish=8083:8083 \
--publish=80:80 \
--publish=5678:5678 \
--name my_zerosim_vnc_docker \
zerodog/zerosim_ros_vnc:latest \
roslaunch zero_sim_ros basic_unity_editor.launch

  1. Run the ROS teleop in a seperate terminal by running:
docker exec -it my_zerosim_vnc_docker \
bash -c "source devel/setup.bash ; rosrun turtlebot3_teleop turtlebot3_teleop_key"
  1. In the Unity editor press the "Play" button.
  2. The Turtlebot can now be controlled via the w a s d keys in the ROS teleop console window:

Using RViz for Turtlebot

This will show visualizing the 2D LIDAR and ROS TF in RViz. This uses a VNC viewer to the ZeroSim ROS Docker container.

  1. Startup the Turtlebot Test Scene as detailed above.
  2. Open a noVNC connection by:
    1. In a browser open http://localhost:8083/vnc.html
    2. Press the "Connect" button. noVNC Login
  3. In the VNC window press the LEFT mouse button and select "Terminal". noVNC Terminal
  4. In the new terminal run rviz -d ./src/zero_sim_ros/rviz/turtlebot_viewer.rviz. RViz will start up with a 3D view with the LIDAR scanner visibile. RViz Turtlebot Viewer

Running Universal Robot UR10 Arm Test Scene with MoveIt!

NOTE: Order of operations is important. Especially starting the Docker before the Unity simulation.

  1. Make sure that the ZeroSim samples are installed as outlined above.
  2. Make sure that the ZeroSim Docker container above is installed.
  3. Open the UniversalRobot_UR10_test.scene Open UR10 Scene
  4. Launch the ZeroSim Docker via:
docker run -it --rm \
--publish=9090:9090 \
--publish=11311:11311 \
--publish=8083:8083 \
--publish=80:80 \
--publish=5678:5678 \
--name my_zerosim_vnc_docker \
zerodog/zerosim_ros_vnc:latest \
roslaunch zero_sim_ros ur10_moveit.launch
  1. Start the UR10 test Scene by pressing the Play button.
  2. Open a noVNC connection by:
    1. In a browser open http://localhost:8083/vnc.html
    2. Press the "Connect" button. noVNC Login
  3. In the noVNC window RViz will be setup with MoveIt UR10 RViz MoveIt
  4. You can now to standard MoveIt! operations in RViz to control the UR10 arm UR10 MoveIt

Running Image Segmentation Test

  1. Make sure that the ZeroSim samples are installed as outlined above.
  2. Make sure that the ZeroSim Docker container above is installed.
  3. Open the ImageSegmentation_test.scene Open Segmentation Test Scene
  4. Launch the ZeroSim Docker via:
docker run -it --rm \
--publish=9090:9090 \
--publish=11311:11311 \
--publish=8083:8083 \
--publish=80:80 \
--publish=5678:5678 \
--name my_zerosim_vnc_docker \
zerodog/zerosim_ros_vnc:latest \
roslaunch zero_sim_ros basic_unity_editor.launch
  1. Start the Image Segmentation Test Scene by pressing the Play button.
  2. Open a noVNC connection by:
    1. In a browser open http://localhost:8083/vnc.html
    2. Press the "Connect" button. noVNC Login
  3. In the VNC window press the LEFT mouse button and select "Terminal". noVNC Terminal
  4. In the new terminal run rqt_image_view /image/segmentation_image.
  5. Open up a second terminal and run rqt_image_view /image/image_raw RQT Image View Segmentation

Export URDF

  1. Make sure that the ZeroSim samples are installed as outlined above.
  2. Open scene the URDF_test.scene in the ZeroSim samples.
  3. Select SimpleRobotArm in the scene hierarchy.
    Select Simple Robot Arm
  4. Select Export URDF in the root properties view. Export URDF
  5. Select the directory to export to.
  6. An excellent online URDF viewer is available: https://gkjohnson.github.io/urdf-loaders/javascript/example/index.html Just drag and drop the files exported above.

Import URDF

  1. Right click and select ZeroSim --> Import URDF...

About

Robotic simulation in Unity with ROS integration.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 99.1%
  • ShaderLab 0.9%