Developer Guide

  • 2022.3
  • 10/25/2022
  • Public Content

Troubleshooting for Robot Tutorials

Unable to Play ROS 1 Bags

To play a ROS 1 bag in our ROS 2 environment, do the following.
  1. Prepare the environment, and start full-sdk:
    cd <edge_insights_for_amr_path>Edge_Insights_for_Autonomous_Mobile_Robots_*/AMR_containers/ source ./01_docker_sdk_env/docker_compose/common/docker_compose.source export CONTAINER_BASE_PATH=`pwd` export ROS_DOMAIN_ID=35 docker-compose -f 01_docker_sdk_env/docker_compose/01_amr/amr-sdk.all.yml run --name full-flavour-sdk full-sdk bash
  2. In a different terminal, attach to this Docker* image:
    docker exec -it full-flavour-sdk bash unset ROS_DISTRO source /opt/ros/noetic/setup.bash source /opt/ros/foxy/setup.bash
  3. Download and set the ROS_DOMAIN_ID to know where you want to publish the data:
    export ROS_DOMAIN_ID=35 wget <ROS 1 BAG> ros2 bag play -s rosbag_v2 <ROS 1 BAG>

Permission Denied Error

For a permission denied error when running a script:
$ ./ eiforamr-full-flavour-sdk:<TAG> eiforamr bash: ./ Permission denied
Give executable permission to the script:
chmod 755

DISPLAY Environment Variable Error

For errors related to the
environment variable when trying to open the Docker* container or a GUI application, enter the command:
If this variable is empty, it causes issues when opening applications that need a GUI.
The most common solution is to give it the
export DISPLAY= "0:0"
If the connection with the system is via VNC,
should be already set.
If it is not, find out the value of
set by vncserver and then set the correct value:
For example:
ps ax |grep vncserver /usr/bin/Xtigervnc :42 -desktop .... /usr/bin/perl /usr/bin/vncserver -localhost no -geometry 1920x1000 -depth 24 :42 export DISPLAY= ":42"

Use ROS_DOMAIN_ID to Avoid Interference in ROS Messages

A typical method to demonstrate a use case requires you to start a container (or group of containers) and exchange ROS messages between various ROS nodes. However, interference from other ROS nodes can disrupt the whole process. For example, you might receive ROS messages from unknown nodes that are not intended for the demo use case. These other nodes could be on the same host machine or on other host machines within the local network. In this scenario, it can be difficult to debug and resolve the interference.
You can avoid this by declaring
as a fixed numeric value per use case, under the following conditions:
  • The
    should be same for all containers launched for a particular use case.
  • The
    should be an integer between 0 and 101.
  • After launching the container, you can declare it with:
    export ROS_DOMAIN_ID=<value>
For more information, go to: ROS_DOMAIN_ID
To add the
, you can choose any of the below options.
  1. Add it in the
    file for all containers:
    # In file 01_docker_sdk_env/docker_compose/common/common.yml # ROS_DOMAIN_ID can be added that applies to all use cases services: common: environment: ROS_DOMAIN_ID: <choose ID>
  2. Add it in the
    file for all containers:
    # In file 01_docker_sdk_env/docker_compose/01_amr/.env # add below line and provide ROS_DOMAIN_ID ROS_DOMAIN_ID=<choose ID>
  3. Add it in the specific yml file for a specific use case for specific targets:
    # In the below example, ROS_DOMAIN_ID is added in ros-base target # For any use case where this target is used, the ROS_DOMAIN_ID is set to the given value. services: ros-base: image: ${REPO_URL}amr-ubuntu2004-ros2-foxy-ros-base:${DOCKER_TAG:-latest} container_name: ${CONTAINER_NAME_PREFIX:-amr-sdk-}ros-base environment: ROS_DOMAIN_ID: <choose ID> env_file: - ./.env extends:
  4. Add it in the specific yml file in the
    section and apply only after launching the containers:
    # In file 01_docker_sdk_env/docker_compose/05_tutorials/fleet_mngmnt_with_low_battery.up.tutorial.yml # In the below example, ROS_DOMAIN_ID is set to 58 # You may change it to any new value as per use case requirement. services: battery_bridge: image: ${REPO_URL}amr-ubuntu2004-ros2-foxy-battery_bridge:${DOCKER_TAG:-latest} container_name: ${CONTAINER_NAME_PREFIX:-amr-sdk-}battery_bridge extends: file: ../01_amr/amr-sdk.all.yml service: ros-base volumes: - /dev/battery_bridge:/dev/battery_bridge:rw build: target: battery_bridge network_mode: host restart: "no" command: - | source source battery-bridge/src/prebuilt_battery_bridge/local_setup.bash export ROS_DOMAIN_ID=58 sleep 5 ros2 run battery_pkg battery_bridge
  5. Add it while running a container using the
    # by adding env parameter, ROS_DOMAIN_ID can be exported inside container: ./ <image name> <user> --extra_params "-e ROS_DOMAIN_ID=<choose ID>"
    You can use any number between 0 and 101 (inclusive), to set
    , as long as it is not used by a different ROS system.
Be aware that you can also use these options to modify other environment variables.

System HOME Directory Issues

If your test system uses
mounted in remote volumes, for example, in a network file system (NFS), you may encounter the error below when you try to run a Docker* image using the
docker: Error response from daemon: error while creating mount source path '/nfs/site/home/<user>': mkdir /nfs/site/home/<user>: file exists.
To avoid this, before you run a Docker* image, create a new directory in
(or any locally mounted volume), and set
to the new path:
mkdir /tmp/tmp_home export HOME=/tmp/tmp_home ./ eiforamr-full-flavour-sdk:<release_tag> eiforamr

Product and Performance Information


Performance varies by use, configuration and other factors. Learn more at