This repository contains the necessary elements (code and artifacts) to build and run a ROS Noetic container suitable to execute GUI applications in Nvidia and non-Nvidia docker environments. It includes the possibility to run simulations for the TurtleBot 3 robot and the AR.Drone.
The container is equipped with a few development and network-debug tools such as vim, tmux, git, ping-utils, ... in order to program the robot and to diagnose any issue.
!!! Note: Do not clone this repository into a path containing a space !!!
- A UNIX-like operating system, preferably Linux. (Ubuntu 20.04 is recommended.)
- The
glxinfo
command. (It's included with themesa-utils
package on Ubuntu. So, install this on the Linux host before building this repository. On an Ubuntu host, executesudo apt install mesa-utils
to installglxinfo
.) - An operational docker daemon.
- A terminal with a Nerd Font is highly recommended. (Nerd Font Download page)
- Standard Bash and basic ROS knowledge.
- A Nvidia graphics card capable of running hardware accelerated graphics. Although, any recent AMD or Intel GPU will also work flawlessly.
The end result will be an Ubuntu 20.04 Docker container capable of running ROS Noetic (GUI) systems. A few virtual worlds are also included. The following screenshots depict this perfectly.
The terminal after starting the container.
Running GUI applications, including OpenGL should be possible.
One of the included virtual worlds, summerforall, equipped with an AR.Drone or a Turtlebot3.
If Nvidia docker returns the following error:
Docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
Look at the following site to solve it:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#install-guide
A bash script is provided to build the container, it can be executed by entering the following command:
$ ./001_build_images.sh
To start the container execute the script below:
$ ./003_start_pxl_noetic_full_desktop.sh
This script will check the available GPU and start the container accordingly.
There's also an 004
script which adds webcam support to the container.
$ ./004_start_pxl_noetic_full_desktop_with_webcam.sh
To use multiple bash shells in the container, It's advised to either work with
tmux
or execute the script with prefix 005
from the host:
$ ./005_attach_bash_to_noetic_full_desktop.sh
Pro-tip: Learn to use tmux
. It's awesome!
There are three types of Turtlebot3 to choose from, an environment variable sets
the desired one. Use the export
bash command to set this variable. The
following table depicts the possible values.
Type | export command |
---|---|
Burger | export TURTLEBOT3_MODEL=burger |
Waffle | export TURTLEBOT3_MODEL=waffle |
Waffle Pi | export TURTLEBOT3_MODEL=waffle_pi |
For example:
<in the container> $ export TURTLEBOT3_MODEL=burger
After setting the required variable for the robot type, a simulated world can be
started. The turtlebot3_gazebo
package incorporates several worlds, exempli
gratia an empty world and even a racetrack.
To start a turtlebot3 in an empty world, execute the next command:
<in the container> $ roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
A different world will start if the second parameter is changed to a different
value (file). The container is equipped with auto-completion. Use the <TAB>
key to automatically list all the existing worlds.
The racetrack, which will always start the burger type, is launched by submitting the following command to bash:
<in the container> $ roslaunch turtlebot3_gazebo turtlebot3_autorace_2020.launch
To control the robot via the keyboard a teleop node needs to be started in a separated Bash shell, after executing the export command to set the correct robot type.
For example to control the burger in the auto racetrack:
<in the container> $ export TURTLEBOT3_MODEL=burger
<in the container> $ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch