git clone <repo-url> ~/ASTRO_setup
cd ~/ASTRO_setup/astro_dockerStandard build (uses cache if available):
./docker_ros_build.shClean build — use this if you hit GPG key errors, stale layers, or after major Dockerfile changes:
docker build --no-cache --pull -t astro_image .
--pullfetches the latestros:humble-perceptionbase image.--no-cacheforces every layer to rebuild from scratch.
Starts the hardware stack in the background. The container auto-restarts on crash or Jetson reboot.
./run_docker_ros.shCheck it started correctly:
docker logs -f astro_hwAttach to the running container (same live environment, same ROS topics):
./docker_ros_debug.shStart a fresh standalone container instead (useful when the main container isn't running):
./docker_ros_debug.sh --newStop only Astro containers (astro_hw and astro_debug):
./kill_containers.shStop every container on the system:
./kill_containers.sh --allInstructions for connecting your PC to a robot over WiFi using ROS 2 Humble with rmw_zenoh middleware.
Each PC connects directly to its assigned robot in client mode. Each pair is completely isolated using a unique ROS_DOMAIN_ID.
| Pair | ROS_DOMAIN_ID | Robot IP |
|---|---|---|
| 1 | 1 | 192.168.0.11 |
| 2 | 2 | 192.168.0.12 |
| 3 | 3 | 192.168.0.13 |
| 4 | 4 | 192.168.0.14 |
| 5 | 5 | 192.168.0.15 |
sudo apt update
sudo apt install ros-humble-rmw-zenoh-cpp ros-humble-image-transport-pluginsVerify:
source /opt/ros/humble/setup.bash
ros2 pkg list | grep rmw_zenohReplace <N> with your pair number and <ROBOT_IP> with the matching IP from the table above.
source /opt/ros/humble/setup.bash
export RMW_IMPLEMENTATION=rmw_zenoh_cpp
export ROS_DOMAIN_ID=<N>
export ZENOH_CONFIG_OVERRIDE='mode="client";connect/endpoints=["tcp/<ROBOT_IP>:7447"]'Example for PC-3 (Robot 3):
source /opt/ros/humble/setup.bash
export RMW_IMPLEMENTATION=rmw_zenoh_cpp
export ROS_DOMAIN_ID=3
export ZENOH_CONFIG_OVERRIDE='mode="client";connect/endpoints=["tcp/192.168.0.13:7447"]'To avoid typing the exports every time you open a new terminal, add them to your ~/.bashrc. Replace <N> and <ROBOT_IP> with your actual values.
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "export RMW_IMPLEMENTATION=rmw_zenoh_cpp" >> ~/.bashrc
echo "export ROS_DOMAIN_ID=<N>" >> ~/.bashrc
echo "export ZENOH_CONFIG_OVERRIDE='mode=\"client\";connect/endpoints=[\"tcp/<ROBOT_IP>:7447\"]'" >> ~/.bashrcExample for PC-3 (Robot 3):
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "export RMW_IMPLEMENTATION=rmw_zenoh_cpp" >> ~/.bashrc
echo "export ROS_DOMAIN_ID=3" >> ~/.bashrc
echo "export ZENOH_CONFIG_OVERRIDE='mode=\"client\";connect/endpoints=[\"tcp/192.168.0.13:7447\"]'" >> ~/.bashrcThen reload:
source ~/.bashrcNote: If you need to switch robots, edit
~/.bashrcand change theROS_DOMAIN_IDand IP, then runsource ~/.bashrcandros2 daemon stop.
ros2 daemon stop
ros2 topic listImportant: Always run
ros2 daemon stopafter setting the Zenoh environment variables. The ROS 2 daemon caches graph info and will not see the robot's topics if it started before you setZENOH_CONFIG_OVERRIDE. Alternatively useros2 topic list --no-daemon.
ros2 run rqt_image_view rqt_image_viewSelect the /compressed variant of your camera topic from the dropdown.
- Ping the robot:
ping <ROBOT_IP>— if this fails, it's a WiFi/network issue. - Check port is reachable:
nc -zv <ROBOT_IP> 7447— should say "succeeded". - Kill the ROS 2 daemon:
ros2 daemon stopthen tryros2 topic listagain. - Check RMW: Every terminal must have
export RMW_IMPLEMENTATION=rmw_zenoh_cpp. Verify withecho $RMW_IMPLEMENTATION. - Check domain ID: Run
echo $ROS_DOMAIN_ID— must match your robot pair number.
- RMW version mismatch: Run
dpkg -l | grep rmw-zenohon your PC and compare with the robot — versions must match.
This is not a real error. Suppress with:
ros2 run rviz2 rviz2 --ros-args --log-level WARN