Repository navigation
Name each X500 instance once and put its topics and frames under it - #16
Merged
Merged
Conversation
10 tasks done
caguero
force-pushed
the
instance_name_and_frames
branch
from
September 16, 2026 10:28
ff287f5 to
dfd4306
Compare
Signed-off-by: Carlos Agüero <caguero@honurobotics.com> Assisted-by: Claude Fable 5.1 <noreply@anthropic.com>
caguero
force-pushed
the
instance_name_and_frames
branch
from
September 16, 2026 10:29
dfd4306 to
06c7bfd
Compare
ahcorde
approved these changes
Sep 16, 2026
ahcorde
left a comment
Contributor
There was a problem hiding this comment.
Non blocking comments:
- extra_bridge_topics are shared between instances — appended verbatim (generate_bridge_config.py:134), so two instances of one config collide there. The sibling docs call this out; the new "Several vehicles" section doesn't.
- actuators.md:29 still presents /x500/command/motor_speed as a fixed string. sensors.md got a "rename the instance and the topic follows" paragraph; actuators didn't, though the motor bus follows the instance name. (Same gap in bluerobotics, so fix both or neither.)
- sim.launch.xml silently overrides a custom config's topic_namespace — it always passes --name $(var name) with default x500, so config_file:=custom.yaml with topic_namespace: foo yields x500. The doc line "By default the name is the config's topic_namespace, x500" holds only for the shipped config. Same in bluerobotics, so presumably intentional (launch arg is authoritative) — the sentence could just say so.
…mes the instance Signed-off-by: Carlos Agüero <caguero@honurobotics.com> Assisted-by: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Carlos Agüero <caguero@honurobotics.com> Assisted-by: Claude Fable 5.1 <noreply@anthropic.com>
ahcorde
approved these changes
Sep 16, 2026
Signed-off-by: Carlos Agüero <caguero@honurobotics.com> Assisted-by: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Carlos Agüero <caguero@honurobotics.com> Assisted-by: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Carlos Agüero <caguero@honurobotics.com> Assisted-by: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This patch brings the X500 up to the line the Blue Robotics vehicles reached in HonuRobotics/bluerobotics_models#59 and HonuRobotics/bluerobotics_models#62: Sections 2 to 5 (
Names and poses in Gazebo,Topics on both sides,ROS graph,TF frames) of the multi vehicle support plan (HonuRobotics/gz-maritime#28, HonuRobotics/gz-maritime#23).One name per instance drives everything.
configure_vehicle.pygets a--nameoption that writes a derived config and regenerates every artifact from it, refusing a name that cannot be a ROS name. The model is named after its topic namespace. Per part topic overrides go under the namespace unless they start with a slash, so two instances from one config never share a topic. Joint states are bridged as/<name>/joint_statesand the sensors publish frame ids under the name, which is what TF has oncerobot_state_publisherprefixes the frames. The launch takes the full pose (x,y,z,roll,pitch,yaw), spawns under the name, and runs the state publisher with that prefix.Tests cover the name in every artifact, per instance cache directories, two instances sharing no topic, refused names, the override rule and prefixed frames on TF. Docs: a launch argument table and a "Several vehicles" section.
How to test
colcon build --merge-install --packages-select x500_description x500_gazebo colcon test --merge-install --packages-select x500_gazeboThe X500's own launch with a name and a pose:
Two quads in one world through gz-maritime lyrical, on the X500 ground world so they have somewhere to land:
ros2 launch kai_bringup simulation.launch.xml world:=$(ros2 pkg prefix --share x500_gazebo)/worlds/x500_ground.sdfthen, one terminal each:
Expected: every topic of each quad under its name on both sides, including
/uav_a/joint_statesand the motor bus/uav_a/command/motor_speedon the Gazebo side, a bridge and a state publisher per quad in its namespace, IMU messages in frameuav_a/base_link, and one/clockpublisher.Confirm it in RViz
Set the Fixed Frame to
uav_a/base_linkand add a RobotModel display with Description Topic/uav_a/robot_descriptionand TF Prefixuav_a. The quad draws with its frames prefixed. The rotors only turn when something publishes on the motor bus, so expect a still model. The TF display warns aboutuav_bframes because nothing links the two quads to a common frame; that is expected.