Simulate robot navigation inside Docker

Summary

Run Nav2 quickstart inside Docker

Why

Specs

Steps

  1. Get docker image. Test that it’s working with this example
    docker pull osrf/ros:galactic-desktop
    
  2. Connect docker to linux display
    export DISPLAY=:0.0
    xhost +local:docker
    
  3. Run docker
    docker run -it --net=host --device /dev/dri/ -e DISPLAY=$DISPLAY -v $HOME/.Xauthority:/root/.Xauthority:ro osrf/ros:galactic-desktop
    
  4. Install nav2
    apt update
    apt install ros-galactic-navigation2 -y
    apt install ros-galactic-nav2-bringup -y
    apt install ros-galactic-turtlebot3* -y
    
  5. Load ROS environment variables
    source /opt/ros/galactic/setup.bash
    export TURTLEBOT3_MODEL=waffle
    export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/galactic/share/turtlebot3_gazebo/models
    
  6. Run navigation example
    ros2 launch nav2_bringup tb3_simulation_launch.py headless:=False
    
  7. [Optional] Add workspace tools
    apt install vim -y
    apt install tmux -y
    
  8. Save progress to workspace
    # in a separate terminal
    docker ps
    docker commit 3204cbea0e30 osrf/ros:galactic-desktop-nav2
    

Fixes for common errors

[ERROR] [rviz2-5]: process has died [pid 75, exit code -11, cmd '/opt/ros/galactic/lib/rviz2/rviz2 -d /opt/ros/galactic/share/nav2_bringup/rviz/nav2_default_view.rviz --ros-args']

References

[1] Trying out ROS2 galactic Hawksbill using Docker