MARS Quick Start

Learn how to control MARS with your phone and the controller arm, make it navigate and talk, and trigger autonomous behaviors & skills made by others

This page describes the experience of receiving your MARS robot for the first time and running it.

If you want a more technical introduction to our SDK and the underlying ROS2 system, please go to:

SOFTWARE

A quick overview

Powering up and connecting to MARS

MARS turns on automatically when plugging the battery in. Put it on the floor, plug the battery, and open the Innate Controller App (works on iPhone and Android).

The app is available here for android and here for ios.

Experience the phone control

Once connected, you can verify that MARS is properly running by controling the robot straight through the app.

  1. Go to manual control

  2. Make the robot move with the joystick and the head with the slider.

  3. Plug the controller arm in and toggle the arm control to verify that the robot mimics your movement.

Talk to MARS for the first time

MARS can run BASIC, our embodied agent that allows the robot to act in real-time and decide what to do based on what it sees and hears.

Put MARS on a table, in front of you, go to "Agentic" on the app, and ask it what it sees. You should start seeing its thoughts and answers appear in the chat.

Make MARS navigate

When running BASIC, MARS can navigate. On the agentic screen, ask him things such as "move forward 1m", or "go to the fridge" if the fridge is in sight.

You can also try more complex requests such as "explore until you see a human".

Use an autonomous arm AI skill

Innate robots can use "skills" to perform actions in the physical world or the digital world.

You can observe which ones are installed by going in the app to Skills (in the tab bar, middle icon) and looking at the list of physical and digital skills installed.

To run one, go back to the home screen, select manual control, and open the skills menu to pick one to use. Then press the button and observe.

VIDEO

Use an existing behavior

BASIC allows to run programs we call "behaviors" that determine the robot's purpose and abilities. On the app, you can see which ones are already installed.

Try out the "Roast me" one, the "Find my shoes", or the "Pick up the trash" straight from the app.

Before running a behavior, you can observe what it was programmed to do.

VIDEO

Create your first map

Innate robots running BASIC have spatial memory, but they currently require a map for it to be fully functional, so that the robot can remember where it saw things.

To create a map, in the app, go in Settings -> Mapping and press the button. Once the robot is mapping, move around and observe the map being created.

Once you're satisfied of how it looks like, you can save the map which will automatically activate in your robot.

VIDEO

Now that MARS has spatial memory, you can drive it around and it will memorize what it sees. Try to drive it around your kitchen then, in agentic mode, ask "go to the fridge" and observe it going there.

VIDEO

Congrats, you can control your robot!

Now you know how to run basic controls of the robot from the app.

Next up: Create your first behavior and train your first manipulation model, to run them autonomously!

MARS Quick Development

You have completed the quick start!

Congrats!

You can now create basic behaviors that allow the robot to interact with the world. There is a lot more to try.

You can create additional skills like "wave" and "navigate" to use the arm for learned actions or have the arm access the internet to use Google, send emails, call other agents...

Go to the following pages to learn more:

PAGE FOR TEACHING THE ARM A SKILL

PAGE TO WRITE SKILLS WITH CODE

PAGE TO TEACH AN ARM SKILL WITH INVERSE KINEMATICS

PAGE FOR SHARING A BEHAVIOR

ADVANCED: USE AND MODIFY THE CORE ROS2 OS

ADVANCED: IMPLEMENTING A DIFFERENT MANIPULATION MODEL

Innate robots introduce a new paradigm in programming robots through code, demonstrations and language.

Our robots run through skills and behaviors.

Skills are atomic capabilities built for MARS. These can be digital written in code, like sending emails, or physical like pick up socks, navigate to room.

Skills can be written as pure code using the sdk, trained models for manipulation (VLAs) and navigation or both.

Behaviors are like an app for your robot.

A BASIC behavior is a composition of atomic skills with a system prompt. A robot running on a behavior performs complex long horizon task wrapping together its skills with reasoning, memory and decision making capabilities.

Example: Security Robot

This is a quick walk through of how Mars can be programmed to patrol a house and send alerts over email

1. Installation

Install the Innate SDL on your workstation, or download the Innate app from your app store

pip install innate-sdk 

You can start coding right after by defining files in ~/skills and ~/behaviors

2. Train Skill to Open Doors

This is best done through the app, collect a new dataset of demonstrations, choose your parameters and train on our servers

3. Email Skill

Through code add a Skill that gives the robot the ability to send emails to different users. Define a guideline for how to use the skill and provide a method to execute

"""
Example: Minimal SendEmail skill
----------------------------------
This snippet demonstrates how to build a simple Skill class
that sends an email using SMTP. It is designed for documentation
purposes: clean, minimal, and easy to follow.
"""

import os, smtplib
from email.mime.text import MIMEText
from brain_client.primitives.types import Skill, SkillResult


class SendEmail(Skill):
    # Every skill should define a name property
    @property
    def name(self):
        return "send_email"

    # Provide short usage guidelines
    def guidelines(self):
        return "Send an emergency email. Provide subject, message, and recipients."

    def __init__(self):
        # Configure SMTP server and credentials via environment variables
        self.smtp_server = "smtp.gmail.com"
        self.smtp_port = 587
        self.smtp_user = os.getenv("SMTP_USER", "")
        self.smtp_pass = os.getenv("SMTP_PASS", "")

    # The core method: what happens when the skill is executed
    def execute(self, subject: str, message: str, recipients):
        # Allow either a single recipient string or a list
        if isinstance(recipients, str):
            recipients = [recipients]

        # Build the email
        msg = MIMEText(message)
        msg["From"] = self.smtp_user
        msg["To"] = ", ".join(recipients)
        msg["Subject"] = subject

        # Connect to the SMTP server and send the message
        with smtplib.SMTP(self.smtp_server, self.smtp_port) as server:
            server.starttls()
            server.login(self.smtp_user, self.smtp_pass)
            server.sendmail(self.smtp_user, recipients, msg.as_string())

        # Return a simple success result
        return f"Email sent to {', '.join(recipients)}", SkillResult.SUCCESS

4. Create a Behavior

This is what describes the purpose of the robot during its execution. Define through prompting what the robot should do in different situations, add its relevant skills.

class SecurityGuard(Behavior):
    def name(self) -> str:
        return "security_guard_behavior"

    def get_skills(self) -> List[str]:
        return ["navigate", "open_door", "send_email"]

    def get_prompt(self) -> str:
        return """You are a security guard robot. Patrol the house, 
        stay alert and professional, watch for intruders, open doors
         when needed, and send an email immediately if you find one."""

5. Run The Behavior

New Behaviors are automatically registered. You can run them from the app.

6. Share

Behaviors and Skills are shareable working across robots.

You can simply share the files in a github repository like our examples repository.

Mars is designed for builders who want to push the boundaries of what's possible. Whether you're building a 3D printing assistant or something entirely new, we can't wait to see what you'll create.

Last updated

Was this helpful?