Skip to content

Add collision to the car in Visual lander worlds - #813

Draft
anshuman83-40 wants to merge 2 commits into
JdeRobot:humble-develfrom
anshuman83-40:fix/797-visual-lander-car-collision
Draft

anshuman83-40 wants to merge 2 commits into
JdeRobot:humble-develfrom
anshuman83-40:fix/797-visual-lander-car-collision

Conversation

@anshuman83-40

@anshuman83-40 anshuman83-40 commented Sep 30, 2026 •

Copy link
Copy Markdown

Fixes #797

Problem

The car in visual_lander.world and visual_lander_circuit.world is an <actor>. Gazebo Harmonic's physics system ignores all links that belong to actors (gz-sim8 Physics.cc: // ignore links from actors for now), so adding a collision to the actor would not help: the drone falls through the car.

Changes

  • New system plugin waypoint_follower_harmonic (CustomRobots/waypoint_follower_harmonic), built from CustomRobots/CMakeLists.txt the same way as follow_person_harmonic. It takes the same <waypoint><time/><pose/></waypoint> list as an actor trajectory, supports <loop>, and moves the model using model velocity commands (not teleporting), so a drone that has landed on the car is carried along. If the model is more than teleport_distance (default 1 m) off its path, e.g. after a reset, it is moved straight back.
  • Both Visual Lander worlds: the car actor is replaced by a car model that uses the same car_color_beacon mesh and the same waypoints, so the route and timing are unchanged. It has two collision boxes sized from the mesh: the body (kept 0.3 m above the ground so it does not drag) and the roof, whose top is about 2.04 m above the ground, where the drone lands.

The car_color_beacon model itself is not modified.

  • Launchers: visual_lander.launch.py and visual_lander_circuit.launch.py append custom_robots' lib folder to GZ_SIM_SYSTEM_PLUGIN_PATH (resolved with get_package_prefix), as other launchers do for their plugins.

Headless test

Ran on Ubuntu 22.04 + ROS 2 Humble + Gazebo Harmonic: colcon build of custom_robots, plugin path taken from the launch files, then each world run headless with a 1.5 kg box (drone stand-in) dropped on the car roof. Run: https://github.com/anshuman83-40/RoboticsInfrastructure/actions/runs/36816877508

World Result
visual_lander.world (this PR) Box rests on the roof (z ≈ 2.14 m); car moved 14.10 m, box moved 14.13 m with it
visual_lander_circuit.world (this PR) Box rests on the roof (z ≈ 2.14 m); car moved 16.78 m, box moved 16.76 m with it
visual_lander.world (current humble-devel, actor) Box falls through the car to the ground (z ≈ 0.15 m)

The plugin builds without compiler warnings, and the server logs show no plugin errors.

Status

Draft until the before/after videos recorded in Robotics Academy are added.

anshuman83-40 and others added 2 commits October 1, 2026 02:15
Gazebo Harmonic ignores links inside <actor>, so the car had no collision
and the drone fell through it. Replace the actor with a regular model that
has collision boxes for the body and the roof, and move it along the same
waypoints with a new waypoint_follower_harmonic system plugin. The plugin
drives the model with velocity commands so a landed drone is carried along.

Fixes JdeRobot#797

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hers

gz does not look for system plugins in custom_robots' lib folder by
default, so the car never moved. Append it to GZ_SIM_SYSTEM_PLUGIN_PATH
before starting the server, like the other launchers do for their plugins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add collision to actor in Visual lander

1 participant