gazebo_ros2_control

[gzserver-1] [ERROR] [1727951819.671190014] [jackal.gazebo_ros2_control]: controller manager doesn't have an update_rate parameter

No solution.

OpenAL

[gzserver-1] [Err] [OpenAL.cc:84] Unable to open audio device[default]

Related to support for audio inside a Docker container. It will not be resolved.

Command failed: docker compose

If you have any issue with docker incompatibility (e.g. Error: Command failed: docker compose ...), make sure that docker compose or docker-compose is set correctly in the settings.

dev container in vscode

In docker-compose.yaml, uncomment the factory_simulation_nvidia section:

  factory_simulation_nvidia:
    <<: *research-base
    container_name: factory_simulation_nvidia
    runtime: nvidia
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: "all"
              capabilities: [compute,utility,graphics,display]

and update .devcontainer/devcontainer.json:

{
    "name": "ROS2 RESEARCH CONTAINER",
    "dockerComposeFile": "../docker-compose.yaml",
    "service": "factory_simulation_nvidia
...

Missing nvidia docker runtime

Solution: https://stackoverflow.com/questions/59008295/add-nvidia-runtime-to-docker-runtimes

Docker nvidia-container-cli: requirement error

If you get this error when building the docker container:

nvidia-container-cli: requirement error: unsatisfied condition: cuda>=12.6, please update your driver to a newer version, or use an earlier cuda container: unknown

A solution to try is first: re-install nvidia-container-toolkit. Or, if that does not work, update your nvidia-drivers.

GLIBC_2 issue

Sometimes the wrong nvidia-container-toolkit results in this issue below:

$/usr/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0)
$/usr/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /usr/lib/x86_64-linux-gnu/libGLX.so.0)

If so, try downgrading nvidia-container- toolkit. You can use these commands:

$sudo apt-get remove --purge nvidia-container-toolkit nvidia-container-toolkit-base libnvidia-container*
$sudo apt-get update
$sudo apt-get install nvidia-container-toolkit=1.17.4-1 nvidia-container-toolkit-base=1.17.4-1 libnvidia-container1=1.17.4-1 libnvidia-container-tools=1.17.4-1

docker issues

Make sure docker is installed correctly by following these two instructions:

Advanced options:

To record camera images for available cameras we use a simple Python code ./camera_utility/camera_subscriber.py that continuously records camera images in camera_utility/camera_data/:

./control.sh cam_dump

Advanced features

Running ROS2 commands:

To avoid conflict between ros nodes in the same network, after each build a new random ROS2 domain is created. This means that you need to adjust this random domain before running any ros2 commands. For convenience you can use

./control.sh cmd YOUR_ROS2_COMMANDS

Here is an example of extracting tf2 hierarchy

./control.sh cmd ros2 run tf2_tools view_frames

These features and commands are under development and not fully supported yet and therefore are subject to change.

Cartographer: With both Gazebo and rviz running you can start creating a map of a robot's surroundings.

To start: ./control.sh cartographer

The jackal can then be controlled with the computer keyboard by running:

./control.sh teleop_jackal

To record one screenshot after use:

./control.sh screenshot 164

The result will be stored in ./camera_utility/camera_data/.

To record ROS messages in ROS bag files to replay the scenario later:

./control.sh ros_record

To replay the last rosbag recording:

./control.sh ros_replay

To test the unit tests before pushing new code:

./control.sh test

Jackal

If you want to control the Jackal, you add the following lines into the control.sh:

elif [[ "$*" == *"jackal_teleop"* ]]
then
    ros2 launch dyno_jackal_bringup keyboard_steering.launch.py

And then run:

./control.sh jackal_teleop

These ones did not work, so we put them here in issues

elif [[ "$*" == *"move_object"* ]]
then
    ros2 run object_mover move_object
elif [[ "$*" == *"scenario"* ]]
then
    ros2 launch scenario_execution_ros scenario_launch.py scenario:=simulation/scenario_manager/scenarios/test.osc