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

# Robotics

> Build robotics workflows that combine ROS 2, Edge Impulse vision models, simulation, and physical robot deployment.

![Robot hardware used in the Edge Impulse robotics tutorials](https://mintcdn.com/edgeimpulse/b5-ul7shu7FpiXoC/.assets/images/robotics/robots.jpg?fit=max\&auto=format\&n=b5-ul7shu7FpiXoC\&q=85\&s=c18f77f4ff7de699288f4b9ee0548694)

Robotics tutorial hardware

These tutorials show how to build robotics systems with ROS 2 and Edge Impulse. It starts with model deployment and moves on to mobile robots, camera-based inspection, and robotic arm pick-and-place.

Each tutorial follows the same pattern. You train a model in Edge Impulse, run inference locally on the robot or a host computer, and publish the result to ROS 2 so robot-specific nodes can act on it. Inference runs from either a Linux `.eim` deployment or a runner command.

```mermaid theme={"system"}
flowchart LR
    DATA["Robot or camera data"] --> EI["Edge Impulse model"]
    EI --> ROS["ROS 2 topics"]
    ROS --> LOGIC["Robot behavior nodes"]
    LOGIC --> ACTION["Motion, inspection, sorting, or alerts"]
```

## What the tutorials cover

* Exporting Edge Impulse models for local Linux inference
* Publishing object detection results as ROS 2 messages
* Connecting perception output to robot behavior nodes
* Testing motion and perception separately before you combine them
* Moving from simulation and bench tests to physical robots

## Tutorials

> **[Run Edge Impulse object detection with ROS 2](https://docs.edgeimpulse.com/tutorials/topics/robotics/edgeimpulse-ros2-integration.md)**
>
> Run a Linux `.eim` object detection model on a ROS 2 image topic and publish detection messages.

> **[Run Edge Impulse vision on a JetBot with Rubik Pi](https://docs.edgeimpulse.com/tutorials/topics/robotics/wheeled-robot-ros2-integration.md)**
>
> Combine JetBot motor control on a Qualcomm Rubik Pi with Edge Impulse object detection.

> **[Build a mobile inspection system with Edge Impulse and ROS 2](https://docs.edgeimpulse.com/tutorials/topics/robotics/wheeled-inspection-system.md)**
>
> Design an inspection rover with detection, anomaly scoring, gimbal control, logging, and safety layers.

> **[Run Edge Impulse pick and place with UNO Q Braccio](https://docs.edgeimpulse.com/tutorials/topics/robotics/robotic-arm-ros2-integration.md)**
>
> Sort colored blocks with a Braccio arm, using Edge Impulse object detection, ROS 2, and an Arduino UNO Q.

Start with the object detection tutorial. It covers the `.eim` deployment, image topic subscription, output topics, and runtime parameters that the JetBot and inspection tutorials use.

The UNO Q Braccio tutorial uses its own Edge Impulse runner pipeline instead of the `edgeimpulse_ros` package. Follow that tutorial for the arm's launch commands and topics.

## Simulation and message types

You can develop and test the perception-to-motion pipeline for a robotic arm in Gazebo, then move to a physical arm by switching the camera and joint command topics.

The tutorials use the same ROS 2 message types throughout:

| Purpose | Message types |
| - | - |
| Camera input | `sensor_msgs/Image` |
| Detection and classification output | `vision_msgs/Detection2DArray`, `vision_msgs/Classification` |
| Model health | `diagnostic_msgs/DiagnosticArray` |
| Actuation | `std_msgs`, `sensor_msgs/JointState`, `trajectory_msgs` |

## Prerequisites

* A Linux development environment
* Familiarity with ROS 2 nodes, topics, launch files, and workspaces
* An Edge Impulse project with an object detection or anomaly detection model
* The robot, or a simulation environment, for the tutorial you follow
* The sensors and actuators that tutorial needs, such as a USB camera, motor controller, gimbal, or gripper

## Safety

These examples move physical hardware. Test perception, networking, and motion separately before you connect them. Keep the emergency power switch within reach, use low speeds, and don't leave the robot running unattended until you've tested its behavior in the final environment.

## Resources

* [ROS 2 documentation](https://docs.ros.org/)
* [Edge Impulse Linux SDK for Python](https://github.com/edgeimpulse/linux-sdk-python)
* [edgeimpulse-ros ROS 2 package](https://github.com/edgeimpulse/edgeimpulse-ros)
* [Nav2](https://nav2.org/)
* [MoveIt 2](https://moveit.picknik.ai/)
