02 / SYSTEM2025–26

Coco Robot — ROS 2 Simulation Platform

ROS 2 differential-drive + manipulator simulation platform

Built on Humble and Gazebo Classic. Then Classic died, and the port became the project.

TEAM PROJECT
  • Grew out of a Hut Labs internship — a pick-and-place ramp robot built by seven interns across two teams. My part was the manipulator; teammates built the ramp and base and led the ROS 2 / Gazebo integration.
  • Mentor: Dr. Rajesh Kannan Megalingam.

ROS 2 / Gazebo / IEEE ICRM 2025 · STATUS: SIMULATED

The Coco robot — four-wheel differential drive base with a manipulator arm — inside a walled Gazebo world with a ramp
GAZEBO CLASSIC ERA — THE 'BEFORE' HALF OF THE MIGRATION STORY

THE PROBLEM

Before you trust a robot with hardware, you want its failures to be free. The platform had to prove out a full mobile manipulator — 4-wheel differential drive, 3-DOF arm, gripper — entirely in simulation, with the same control interfaces the real robot would use.

Halfway through its life, Gazebo Classic reached end-of-life. The platform's second act was surviving its own stack being deprecated underneath it.

THE SYSTEM

The robot is described in a URDF authored from CAD-derived meshes — not a downloaded model. ros2_control runs end to end: teleop publishes /cmd_vel, diff_drive_controller turns it into wheel velocities, Gazebo integrates the physics; the arm chain branches off through its own controller. The graph below is the actual message path.

Origin stack: ROS 2 Humble + Gazebo Classic — the version the IEEE paper validated. After Classic's EOL (January 2025), the whole platform was ported to ROS 2 Jazzy + Gazebo Harmonic on the ros_gz_bridge / ros_gz_sim integration pattern. The port is a feature, not a footnote: same robot, new middleware contract.

Coco robot ROS 2 node graph: teleop_twist_keyboard publishes cmd_vel to diff_drive_controller, which drives the wheel joints inside Gazebo physics; an arm controller chain branches off to the arm joints. /teleop_twist_keyboard/cmd_veldiff_drive_controllerarm_controller(3-DOF + gripper)GAZEBO PHYSICSwheel joints ×4arm joints ×3
THE ACTUAL MESSAGE PATH — ONE /cmd_vel MESSAGE SHOWN IN TRANSIT

WHAT I BUILT

  • The 3-DOF arm and gripper: URDF from CAD-derived meshes + joint control
  • ros2_control and keyboard teleop for the manipulator
  • The Humble/Classic → Jazzy/Harmonic port on ros_gz_bridge, after Gazebo Classic's EOL
  • The simulation platform the IEEE ICRM 2025 paper is built on

MY SCOPE

  • The manipulator — 3-DOF arm and gripper, its URDF from CAD-derived meshes, and joint control
  • ros2_control and keyboard teleop for the arm
  • The Humble/Classic → Jazzy/Harmonic port after Gazebo Classic's EOL (adapted the ros_gz_bridge stack)
  • The simulation work behind the IEEE ICRM 2025 paper

WHAT BROKE

After the OS and ROS upgrade, DDS discovery went quiet — `ros2 topic list` returned nothing at all. The robot was fine; my mental model of the sim–ROS bridge wasn't. The fix was structural, not a flag: adopting the ros_gz_bridge / ros2 launch ros_gz_sim integration pattern that Harmonic actually expects.

Three smaller faults surfaced on the way: passive rear wheels behaving badly, the arm oscillating at spawn, and mixed wheel joint axes from the CAD import. All three were tracked down and fixed — the platform runs clean in simulation.

FIGURES

Gazebo Classic running the Coco robot beside two terminals: a teleop keyboard node streaming speed and turn values, and a colcon build finishing clean
TELEOP + COLCON, CLASSIC ERA — MANIPULATOR TELEOP NODE LIVE

RESULT

  • Peer-reviewed: the platform is the subject of an IEEE ICRM 2025 paper (Xplore & Scopus)
  • Differential-drive navigation and 3-DOF manipulation validated fully in simulation
  • Survived a middleware generation change: runs on ROS 2 Jazzy + Gazebo Harmonic post-port

CONNECTED WORK