ROS 2 Concepts for OLO

SDK v2 is a typed control plane over a live ROS 2 system. You do not need to write an rclpy or rclcpp node for every script, but the ROS graph and its conventions still determine what the SDK can observe and control.

Nodes, topics, services, and actions

Nodes are processes in the ROS graph. Topics are typed publish/subscribe streams such as /scan, /odom, or /joint_states. SDK v2 Core can inspect topics, publish typed messages, subscribe, read the latest message, and work with node parameters.

Domains and discovery

ROS_DOMAIN_ID isolates DDS discovery. Nodes in different domains do not normally discover one another. The Appliance uses OLO_APL_ROS_DOMAIN_ID to join the intended domain. One Appliance sees only the ROS graph available in that domain and network environment.

Namespaces organize multiple robots inside a domain. For example, robot_1 and robot_2 can each expose a relative joint_states topic without colliding. SDK v2 discovers robot namespaces and uses a robot handle to resolve relative names:

with Client() as client:
    robot_1 = client.robot("robot_1")
    robot_2 = client.robot("robot_2")

A leading slash makes a topic absolute; a bare name is relative to the handle’s namespace. If exactly one robot is discoverable, client.robot() resolves it. Ambiguous multi-robot graphs require an explicit namespace. The complete rules are in Robot Namespaces.

Frames and transforms

ROS TF describes coordinate frames and transforms between them. The Spatial service provides the complete transform tree, exact lookups, and namespace-scoped robot frames. On a robot handle, bare frame names such as base_link are scoped to the robot while global frames such as world, map, and odom remain global.

MoveIt and Nav2

Kinematics operations depend on MoveIt, the robot model, controllers, and a valid transform tree. Navigation operations depend on Nav2, localization, maps or costmaps as required by the deployment, and the relevant controllers. The SDK can report that a capability is unavailable, but it does not install or configure these ROS stacks.

Simulation time

Simulations commonly publish /clock and set use_sim_time on participating nodes. The Appliance has one runtime useSimTime setting used when it brings up Nav2, MoveIt, and exploration components. Mixing wall-clock and simulation-time nodes can cause stale transforms, timeouts, or goals that never progress.