> ## Documentation Index
> Fetch the complete documentation index at: https://docs.innate.bot/llms.txt
> Use this file to discover all available pages before exploring further.

# Topics

export const RosTopicsInterface = () => {
  const topicSections = [{
    id: "mobility",
    title: "Mobility",
    rows: [{
      topic: "/cmd_vel",
      dir: "SUB",
      msgType: "geometry_msgs/Twist",
      desc: "Velocity commands for robot base motion."
    }, {
      topic: "/odom",
      dir: "PUB",
      msgType: "nav_msgs/Odometry",
      desc: "Odometry estimate (position, orientation, and velocity)."
    }]
  }, {
    id: "system",
    title: "System",
    rows: [{
      topic: "/battery_state",
      dir: "PUB",
      msgType: "sensor_msgs/BatteryState",
      desc: "Battery level, voltage, and charging status."
    }, {
      topic: "/scan",
      dir: "PUB",
      msgType: "sensor_msgs/LaserScan",
      desc: "LiDAR scan data from the RPLidar stack."
    }]
  }, {
    id: "cameras",
    title: "Cameras",
    rows: [{
      topic: "/mars/main_camera/left/image_raw",
      dir: "PUB",
      msgType: "sensor_msgs/Image",
      desc: "Main front-facing RGB stream (left stereo camera)."
    }, {
      topic: "/mars/main_camera/depth/image_rect_raw",
      dir: "PUB",
      msgType: "sensor_msgs/Image",
      desc: "Depth image computed by the stereo pipeline."
    }, {
      topic: "/mars/arm/image_raw",
      dir: "PUB",
      msgType: "sensor_msgs/Image",
      desc: "Gripper-mounted RGB camera feed for manipulation."
    }]
  }, {
    id: "arm",
    title: "Arm",
    rows: [{
      topic: "/mars/arm/state",
      dir: "PUB",
      msgType: "sensor_msgs/JointState",
      desc: "Current arm joint states from robot actuators."
    }, {
      topic: "/mars/arm/commands",
      dir: "SUB",
      msgType: "std_msgs/Float64MultiArray",
      desc: "Direct arm joint command input topic."
    }, {
      topic: "/leader/state",
      dir: "PUB",
      msgType: "sensor_msgs/JointState",
      desc: "Leader arm joint states when teleoperation is enabled."
    }, {
      topic: "/joint_states",
      dir: "PUB",
      msgType: "sensor_msgs/JointState",
      desc: "Combined joint state stream for robot visualization and tools."
    }]
  }, {
    id: "brain",
    title: "Brain",
    rows: [{
      topic: "/brain/chat_out",
      dir: "PUB",
      msgType: "std_msgs/String",
      desc: "Chat responses from the Innate agent (spoken and shown in the app)."
    }, {
      topic: "/brain/available_skills",
      dir: "PUB",
      msgType: "std_msgs/String",
      desc: "JSON list of skills currently loaded by the skills server."
    }, {
      topic: "/brain/skill_status_update",
      dir: "PUB",
      msgType: "std_msgs/String",
      desc: "Live status of the skill currently being executed."
    }]
  }];
  return <AccordionGroup>
      {topicSections.map(section => <Accordion key={section.id} title={section.title} defaultOpen={section.id === "mobility" || section.id === "system"}>
          <div className="ros-topic-table-wrap">
            <table className="ros-topic-table">
              <thead>
                <tr>
                  <th>Topic Name</th>
                  <th>Dir</th>
                  <th>Message Type</th>
                  <th>Description</th>
                </tr>
              </thead>
              <tbody>
                {section.rows.map(row => <tr key={row.topic}>
                    <td>
                      <span className="ros-topic-code ros-topic-path">{row.topic}</span>
                    </td>
                    <td>
                      <span className={`ros-topic-tag ${row.dir === "PUB" ? "ros-topic-tag-pub" : "ros-topic-tag-sub"}`}>
                        {row.dir}
                      </span>
                    </td>
                    <td>
                      <span className="ros-topic-code ros-topic-msg">{row.msgType}</span>
                    </td>
                    <td>{row.desc}</td>
                  </tr>)}
              </tbody>
            </table>
          </div>
        </Accordion>)}
    </AccordionGroup>;
};

Use ROS2 topics for streaming robot state and continuous commands.

## Topic Interface

<RosTopicsInterface />

## How to read PUB/SUB

The **Dir** column is from the robot runtime perspective. `PUB` means MARS publishes that topic and you subscribe to it. `SUB` means MARS subscribes to that topic and you can publish commands to it.

## Quick commands

```bash theme={null}
ros2 topic list
ros2 topic list -t
ros2 topic echo /battery_state
ros2 topic hz /scan
ros2 topic info /cmd_vel
```

<CardGroup cols={2}>
  <Card title="Services" href="/software/ros2/services">
    Request/response interfaces for map, system, and runtime control.
  </Card>

  <Card title="Actions" href="/software/ros2/actions">
    Long-running goal APIs with feedback and cancellation.
  </Card>
</CardGroup>
