ROS 2
The ROS 2 bridge allows you to put a live OmniLoop control plane on a running robot. This is where OmniLoop’s halt, live-mutate, and no-restart capabilities matter most — bringing up or debugging real hardware, not just tuning a simulation.
The bridge handles data in two directions:
- Telemetry (Robot -> Dashboard): Subscribes to topics; each message is automatically flattened into scalar readouts.
- Control (Dashboard -> Robot): Exposes parameters as sliders or toggles; edits in the dashboard are pushed as ROS 2 parameter updates.
Start the bridge with your desired telemetry topics and parameters:
import rclpyfrom omniloop.integrations.ros2 import OmniLoopRosBridge
rclpy.init()bridge = OmniLoopRosBridge( node_name="omniloop_bridge", telemetry_topics=[ ("/imu/base_vel", "std_msgs/msg/Float64") ], params=[ dict(name="max_speed", type="float", kind="slider", min=0.0, max=2.0, step=0.05, default=1.0, target_node="/controller") ],)bridge.spin() # Blocks; publishes telemetry and applies dashboard editsFeatures
Section titled “Features”- Message Flattening: OmniLoop automatically unwraps standard messages (like
std_msgs .data) and walks nested fields to create clean, readable scalars in the dashboard. - Parameter Push: When you move a slider in the dashboard, the bridge uses an
AsyncParameterClientto dynamically update the parameter on the target node.