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:
innate build
Or build just the package you changed:
innate build maurice_arm
3

Verify

Attach to the tmux session and check your node is running:
innate view
For a full clean build:
innate clean
innate 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.
innate view
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:
WindowNameLeft paneRight pane
0app-bringupApp controllerHardware bringup (UART, battery)
1arm-recorderArm drivers + kinematicsManipulation recorder
2brain-navBrain client (cloud connection)Navigation stack
3behaviors-inputsBehavior server (skills execution)Input manager
4cam-leaderCamera pipelineUDP leader receiver (teleoperation)
5ik-loggerInverse kinematics solverTelemetry logger
6training-uninavidOn-device training nodeUninaVID vision model
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.
innate service restart

ROS2 packages (build required)

Everything in ~/innate-os/ros2_ws/src/ is a ROS2 package. After editing, build:
innate build <package_name>
Key packages to know:
PackageWhat it controls
brain_clientCloud agent connection, agent orchestration
maurice_bringupHardware init (UART, battery, LEDs)
maurice_armArm drivers, kinematics, MoveIt2
maurice_navNav2, SLAM, path planning
maurice_camCamera pipeline (OAK-D, WebRTC)
maurice_controlApp control, UDP teleoperation
manipulationBehavior server, policy execution

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:
innate diag
Check the system status dashboard:
innate
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:
systemctl status ros-app.service
systemctl status zenoh-router.service

Tips

  • Build only what changed. innate build maurice_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.