Ros2 Humble on Voxl2
-
I have several Sentinel drones with ros2 foxy installed via voxl-ros2-foxy and I need to switch to running ros2 humble on the quads. From what I've seen there's no way to get around having to run it via docker, but I have a few questions:
-
Are there instructions on installing docker on target? The modalai guide (https://docs.modalai.com/docker-on-voxl/) references to just use the docker instructions to install via apt, but the docker install instructions linked to require an ubuntu o.s. newer than 20.04 so I wasn't sure if it would work.
-
In switching to ros2 humble onboard the voxl2 do I need to update the dds client module and rebuild voxl-px4 and rebuild the voxl-microdds-agent as well? I'm assuming that if they're built to work with ros2 foxy they're going to be dependent on older versions of fast-dds than what humble would be using and might not be compatible
-
Are there any example docker run commands that are recommended for running containers onboard voxl2 with proper permissions for using the networking interfaces and mounting whatever volumes ros2 would need to run and work with px4?
Basically if you guys are running ros2 humble out of docker on voxl2 what did your set-up look like and did you run into any compatibility issues?
Thanks!
-
-
@jmltt said in Ros2 Humble on Voxl2:
Are there instructions on installing docker on target? The modalai guide (https://docs.modalai.com/docker-on-voxl/) references to just use the docker instructions to install via apt, but the docker install instructions linked to require an ubuntu o.s. newer than 20.04 so I wasn't sure if it would work.
@jmltt please find answers for your questions below:
-
Are there instructions on installing docker on target? The modalai guide (https://docs.modalai.com/docker-on-voxl/) references to just use the docker instructions to install via apt, but the docker install instructions linked to require an ubuntu o.s. newer than 20.04 so I wasn't sure if it would work. --> I always just use this file to install docker on target on the voxl2 (works for any ubuntu device as well btw): https://github.com/docker/docker-install/blob/master/install.sh
-
In switching to ros2 humble onboard the voxl2 do I need to update the dds client module and rebuild voxl-px4 and rebuild the voxl-microdds-agent as well? I'm assuming that if they're built to work with ros2 foxy they're going to be dependent on older versions of fast-dds than what humble would be using and might not be compatible -> No you do not need to reinstall the fast dds with a different instance. Keep in mind the DDS is ros2 agnostic and runs as the middleware BUT I will test this out this morning.
-
For examples the best I can do is show you what I do when running something like ros2 docker containers:
E.G:
-v /usr/include/modal_pipe_common.h:/usr/include/modal_pipe_common.h \ -v /usr/include/modal_pipe_client.h:/usr/include/modal_pipe_client.h \ -v /usr/include/c_library_v2:/usr/include/c_library_v2 \ -v /run/mpa:/run/mpa \ -v /usr/bin/voxl-list-pipes:/usr/bin/voxl-list-pipes \ -v /usr/include/voxl_cutils.h:/usr/include/voxl_cutils.h \ -v /usr/include/cJSON.h:/usr/include/cJSON.h \ -v /usr/include/modal_pipe_deprecated.h:/usr/include/modal_pipe_deprecated.h \ -v /usr/include/modal_pipe_interfaces.h:/usr/include/modal_pipe_interfaces.h \ -v /usr/include/modal_pipe_common.h:/usr/include/modal_pipe_common.h \ -v /usr/include/modal_pipe_client.h:/usr/include/modal_pipe_client.h \ -v /usr/include/modal_start_stop.h:/usr/include/modal_start_stop.h \ -v /usr/lib64/libvoxl_cutils.so:/usr/lib/libvoxl_cutils.so \ -v /usr/lib64/libmodal_json.so:/usr/lib/libmodal_json.so \ -v /usr/lib64/libmodal_pipe.so:/usr/lib/libmodal_pipe.so \ -v /usr/lib/libgbm.so:/usr/lib/aarch64-linux-gnu/libgbm.so \ -v /tmp:/tmp \ -v /etc/modalai:/etc/modalai \ -v /dev:/host/dev" docker run --rm -it \ --privileged \ --net=host \ --ipc=host \ ${VOLUMES} \ -e ROS_DOMAIN_ID=$ROS_DOMAIN_ID \ --entrypoint "/bin/bash" \ DOCKER_IMAGE_NAME_AND_TAG -c /bin/bash -
-
Confirmed - can run the dds with humble running in the docker container:
voxl2 (M0054):~$ apt-get install voxl-microdds-agent Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: voxl-microdds-agent 0 upgraded, 1 newly installed, 0 to remove and 40 not upgraded. Need to get 0 B/4874 kB of archives. After this operation, 0 B of additional disk space will be used. Get:1 file:/data/voxl-suite-offline-packages ./ voxl-microdds-agent 3.0.0-0 [4874 kB] debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package voxl-microdds-agent. (Reading database ... 104493 files and directories currently installed.) Preparing to unpack .../voxl-microdds-agent_3.0.0-0_arm64.deb ... Unpacking voxl-microdds-agent (3.0.0-0) ... Setting up voxl-microdds-agent (3.0.0-0) ... voxl2 (M0054):~$ systemctl start voxl-microdds-agent voxl2 (M0054):~$ systemctl status voxl-microdds-agent ● voxl-microdds-agent.service - voxl-microdds-agent Loaded: loaded (/usr/bin/MicroXRCEAgent; disabled; vendor preset: enabled) Active: active (running) since Tue 2025-11-25 15:13:37 UTC; 14s ago Main PID: 3370 (MicroXRCEAgent) Tasks: 28 (limit: 4915) CGroup: /system.slice/voxl-microdds-agent.service └─3370 /usr/bin/MicroXRCEAgent udp4 -p 8888 Nov 25 15:13:38 m0054 MicroXRCEAgent[3370]: [1764083618.308177] info | ProxyClient.cpp | create_datawriter | datawriter created | client_key: 0x00000001, datawriter_id: 0x0DF(5), publisher_id: 0x0DF(3) Nov 25 15:13:38 m0054 MicroXRCEAgent[3370]: [1764083618.308829] info | ProxyClient.cpp | create_topic | topic created | client_key: 0x00000001, topic_id: 0x0E6(2), participant_id: 0x001(1) Nov 25 15:13:38 m0054 MicroXRCEAgent[3370]: [1764083618.308994] info | ProxyClient.cpp | create_publisher | publisher created | client_key: 0x00000001, publisher_id: 0x0E6(3), participant_id: 0x001(1) Nov 25 15:13:38 m0054 MicroXRCEAgent[3370]: [1764083618.309525] info | ProxyClient.cpp | create_datawriter | datawriter created | client_key: 0x00000001, datawriter_id: 0x0E6(5), publisher_id: 0x0E6(3) Nov 25 15:13:38 m0054 MicroXRCEAgent[3370]: [1764083618.310013] info | ProxyClient.cpp | create_topic | topic created | client_key: 0x00000001, topic_id: 0x0EB(2), participant_id: 0x001(1) Nov 25 15:13:38 m0054 MicroXRCEAgent[3370]: [1764083618.310133] info | ProxyClient.cpp | create_publisher | publisher created | client_key: 0x00000001, publisher_id: 0x0EB(3), participant_id: 0x001(1) Nov 25 15:13:38 m0054 MicroXRCEAgent[3370]: [1764083618.310468] info | ProxyClient.cpp | create_datawriter | datawriter created | client_key: 0x00000001, datawriter_id: 0x0EB(5), publisher_id: 0x0EB(3) Nov 25 15:13:38 m0054 MicroXRCEAgent[3370]: [1764083618.310981] info | ProxyClient.cpp | create_topic | topic created | client_key: 0x00000001, topic_id: 0x0F0(2), participant_id: 0x001(1) Nov 25 15:13:38 m0054 MicroXRCEAgent[3370]: [1764083618.311145] info | ProxyClient.cpp | create_publisher | publisher created | client_key: 0x00000001, publisher_id: 0x0F0(3), participant_id: 0x001(1) Nov 25 15:13:38 m0054 MicroXRCEAgent[3370]: [1764083618.311488] info | ProxyClient.cpp | create_datawriter | datawriter created | client_key: 0x00000001, datawriter_id: 0x0F0(5), publisher_id: 0x0F0(3) voxl2 (M0054):~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ros2-image ed11b766 1040efe3dc33 2 weeks ago 2.33GB voxl2 (M0054):~$ docker run -it --rm --net=host --ipc=host ros2-image /bin/bash root@m0054:/# cd root@m0054:~# ls root@m0054:~# source /opt/ros/humble/setup.bash root@m0054:~# ros2 topic list /fmu/in/obstacle_distance /fmu/in/offboard_control_mode /fmu/in/onboard_computer_status /fmu/in/sensor_optical_flow /fmu/in/telemetry_status /fmu/in/trajectory_setpoint /fmu/in/vehicle_attitude_setpoint /fmu/in/vehicle_command /fmu/in/vehicle_mocap_odometry /fmu/in/vehicle_rates_setpoint /fmu/in/vehicle_trajectory_bezier /fmu/in/vehicle_trajectory_waypoint /fmu/in/vehicle_visual_odometry /fmu/out/battery_status /fmu/out/failsafe_flags /fmu/out/position_setpoint_triplet /fmu/out/sensor_combined /fmu/out/timesync_status /fmu/out/vehicle_attitude /fmu/out/vehicle_control_mode /fmu/out/vehicle_local_position /fmu/out/vehicle_odometry /fmu/out/vehicle_status /parameter_events /rosout