Skip to main content
MARS is fully open source. Every line of code running on the robot is yours to read, modify, and redeploy. This guide is for developers who want to go beyond the Agent/Skill layer and work directly with the lower-level systems.

The edit → build → restart loop

This is your core workflow. Every change follows the same cycle:
1

Edit code

Modify any file in ~/innate-os/. ROS2 packages live in ~/innate-os/ros2_ws/src/.
2

Build

Build and restart in one command:
Or build just the package you changed:
3

Verify

Attach to the tmux session and check your node is running:
For a full clean build:

Reading the tmux windows

Every ROS node runs inside a tmux session called ros_nodes. Each window has two panes running related nodes side by side.
Navigate with:
  • Ctrl+B then 0-6 — switch windows
  • Ctrl+B then / — switch panes
  • Ctrl+B then D — detach (nodes keep running)
Here’s what each window runs: If a node crashes, its pane shows the error. Fix the code and build the package.

What you can modify

Agents and skills (no build needed)

Files in ~/agents/ and ~/skills/ are pure Python. Edit, save, restart — no compilation.

ROS2 packages (build required)

Everything in ~/innate-os/ros2_ws/src/ is a ROS2 package. After editing, build:
Key packages to know:

Launch files

Launch files configure how nodes start. They live inside each package’s launch/ directory. Edit them to change parameters, remap topics, or add new nodes.

Observability

You need to see what the robot sees. Two options.

RViz (Linux)

If you’re on a Linux machine on the same network, RViz plugs directly into the ROS2 topics and gives you the full visualization stack: TF frames, point clouds, camera feeds, navigation costmaps, arm trajectories. Make sure Zenoh DDS discovery is configured so your machine can see the robot’s topics.

Foxglove (all platforms)

Not on Linux? Use Foxglove. It connects over WebSocket to a Foxglove Bridge running on MARS and lets you visualize all the same data from any browser. See the dedicated Foxglove Setup guide.

Diagnostics

Run hardware diagnostics to check system health:
Check the system status dashboard:
This prints version, mode, ROS status, and DDS state at a glance.

Boot sequence

Understanding what happens at power-on helps with debugging:
  1. systemd starts zenoh-router.service (DDS discovery layer)
  2. systemd starts ros-app.service which runs launch_ros_in_tmux.sh
  3. The script creates a tmux session with 7 windows (14 ROS nodes)
  4. After 20 seconds, the startup chime plays
All services are managed by systemd. View their status:

Tips

  • Build only what changed. innate build mars_arm is faster than innate build.
  • Check logs in tmux. Each pane scrolls. Ctrl+B then [ enters scroll mode, q exits.
  • Use ros2 topic echo to inspect live data: ros2 topic echo /cmd_vel.
  • Use ros2 node list to verify nodes are alive after a restart.

Reference

Innate CLI

Every command, one page.

Foxglove Setup

Browser-based ROS visualization.

ROS2 Topics

All published topics on MARS.

ROS2 Debugging

Debugging workflows.