Skip to main content

Remote graph access

Inspect and control a remote ROS graph over LiveKit with LiveKit Portal for ROS.

Overview

The LiveKit Portal for ROS lets you drive a remote ROS graph with the same ros2 commands you already use locally. It works by proxying CLI operations between two ROS Portal nodes in the same LiveKit room.

Each LiveKit Portal for ROS node exposes a set of local /ros_portal/* services. When you call one, you pass the participant_id of the remote node you want to reach. That node runs the requested operation against its own ROS graph and returns the result over LiveKit, including the native ROS CLI text in the response. To your tooling, reaching a remote graph looks like an ordinary local service call.

Access is scoped by the robot. A remote node only publishes to topics and forwards to services that its LiveKit-to-ROS rules permit, so a node in the field controls exactly what a remote operator can reach.

The LiveKit Portal for ROS forwards the following CLI operations:

  • ros2 topic list: list all topics on the ROS graph.
  • ros2 service list: list all services on the ROS graph.
  • ros2 interface show: inspect the interface of a topic.
  • ros2 topic pub: publish a message to a topic.
  • ros2 service call: call a service.

Inspect the remote ROS graph

List all topics on the ROS graph of robot-01 with message types:

ros2 service call /ros_portal/ros2_topic_list \
ros_portal_msgs/srv/Ros2TopicList \
"{participant_id: 'robot-01', show_types: true}"

List all services on the ROS graph of robot-01 with message types:

ros2 service call /ros_portal/ros2_service_list \
ros_portal_msgs/srv/Ros2ServiceList \
"{participant_id: 'robot-01', show_types: true}"

Inspect the geometry_msgs/msg/Twist interface on the ROS graph of robot-01:

ros2 service call /ros_portal/ros2_interface_show \
ros_portal_msgs/srv/Ros2InterfaceShow \
"{participant_id: 'robot-01', type: 'geometry_msgs/msg/Twist'}"

Topic and service listings also support counting and including hidden names. Interface inspection can include all comments or remove them.

Publish to the remote graph

Publish a /cmd_vel message on the ROS graph of robot-01:

ros2 service call /ros_portal/ros2_topic_pub \
ros_portal_msgs/srv/Ros2TopicPub \
"{participant_id: 'robot-01',
topic: '/cmd_vel',
msg_type: 'geometry_msgs/msg/Twist',
payload: '{linear: {x: 0.5}}'}"

Service call the remote graph

Call the /set_bool service on the ROS graph of robot-01:

ros2 service call /ros_portal/ros2_service_call \
ros_portal_msgs/srv/Ros2ServiceCall \
"{participant_id: 'robot-01',
service: '/set_bool',
msg_type: 'std_srvs/srv/SetBool',
payload: '{data: true}'}"

Publishing is limited to topics allowed by the remote LiveKit Portal for ROS node's LiveKit-to-ROS rules. Calls use a 10-second timeout by default; set timeout_sec to override it. Every response contains success, err_msg, and the native ROS CLI text in output.

Additional resources

The following resource provides more information about remote ROS graph access.

LiveKit Portal for ROS CLI calls guide

The full reference for the ros2 CLI calls the LiveKit Portal for ROS forwards, with every request field and response.