Skip to content

Remove ros_nav bridge blueprint from G1 — use RosTransport + topic remappings #1267

@spomichter

Description

@spomichter

Issue

The G1 navigation implementation correctly removed to_ros and implemented RosTransport, but the G1 blueprints still use a ros_nav bridge blueprint that's doing too much.

The current ROSNav module:

  • Bridges topics between ROS and LCM (redundant — can use ROSTransport directly)
  • Implements NavigationInterface to control the ROS nav planner (needed)

DimOS now has topic remappings and transport definitions in blueprints, so the bridging pattern is unnecessary.

Verification ✅

Claim verified — the topic bridging in ros_nav() IS redundant.

What Alex's Refactor Did (commit 4613876d0)

Cleaned up ROSNav to use ROSTransport instead of manually spinning ROS2 nodes. But it's still acting as a bridge:

  1. Receives data from ROS via ROSTransport-backed In ports
  2. Re-publishes to LCM via Out ports
  3. Implements NavigationInterface to send commands to ROS nav planner

Modern Approach (Go2 pattern)

Direct transport assignment in blueprints:

ros = nav.transports(
    {
        ("lidar", PointCloud2): ROSTransport("lidar", PointCloud2),
        ("global_map", PointCloud2): ROSTransport("global_map", PointCloud2),
        ("odom", PoseStamped): ROSTransport("odom", PoseStamped),
    }
)

Other modules subscribe/publish directly via topic remappings — no bridge needed.

What Should Stay

The ROS nav Docker stack provides its own planner and local control. So we still need:

  • A lightweight module implementing NavigationInterface to send commands to the ROS planner
  • Publishing to /goal_pose, /cancel_goal, etc.
  • Receiving /goal_reached status

But not the topic re-publishing (pointcloud, path, cmd_vel, etc.).

Tasks

  • Remove topic bridging from ROSNav module
  • Add ROSTransport configs in G1 blueprint .transports() for:
    • /registered_scan → lidar pointcloud
    • /terrain_map_ext → global map
    • /cmd_vel → velocity commands
    • /path → active path
    • /tf → transforms
  • Keep lightweight ROSNav (or rename) that only:
    • Implements NavigationInterface methods
    • Publishes /goal_pose, /cancel_goal, /stop (joy control)
    • Subscribes to /goal_reached
  • Keep navigation_skill() for agent skills
  • Update G1 blueprints to use direct ROSTransport + minimal nav interface module

Context

Ref: Alex's G1 nav work (commit 4613876d06731cbaf0bf18818cd0143a890e1303)

The ROS nav stack (Docker) provides planning and local control — ROSNav just needs to be the command interface, not a full topic bridge.

Related Issues:

Assignee: ruthwik

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions