开发平台选择
对于开发者来说,主要有两个选择:

a) iRobot Create 系列 (强烈推荐给开发者)
这是基于 Roomba 底盘的开发平台,去除了吸尘等消费功能,开放了所有传感器和执行器的接口。
- Create 2: 基于 600 系列的 Roomba,非常成熟稳定,社区资源丰富,是入门首选。
- Create 3: 最新一代,功能更强大,支持 Wi-Fi、蓝牙 5.0,拥有更丰富的传感器和更现代的 API(基于 ROS 2),是专业开发的首选。
优点:
- 专为开发设计: 接口清晰,文档齐全。
- 传感器丰富: 拥有 cliff 检测、碰撞检测、里程计、陀螺仪等多种传感器。
- 可编程: 可以通过串口或 Wi-Fi 发送指令来控制机器人。
- 扩展性强: 可以在上面搭建 Raspberry Pi、Arduino 等控制器,构建更复杂的系统。
b) Roomba 机器人 (如 j, i, s 系列)
如果你手头有一台消费级 Roomba,也可以进行开发,但挑战更大。
- 优点: 现实世界的应用,功能齐全。
- 缺点:
- 协议封闭: iRobot 不提供官方 API,开发者需要通过逆向工程来破解其通信协议(iRobot Roomba Open Interface 的变种)。
- 功能受限: 无法完全禁用其自带的清洁逻辑,控制可能不够直接。
- 文档稀少: 需要依赖社区的非官方文档。
对于绝大多数开发者,从 Create 2 或 Create 3 开始是最简单、最直接的选择。

核心概念:Roomba Open Interface (OI)
无论是 Create 还是 Roomba,其底层控制都依赖于 Open Interface (OI),这是一个标准化的命令集,你通过串口(或 Wi-Fi/蓝牙)发送特定的字节码指令给机器人,机器人就会执行相应动作。
OI 的基本工作模式:
- 启动: 机器人上电后处于被动模式。
- 发送指令: 你通过串口发送 OI 指令(
137代表Start)。 - 接收数据: 你可以发送指令来请求传感器数据(
142代表Sensors),机器人会返回相应的数据包。
常用 OI 指令示例:
| 指令 (十六进制) | 指令 (十进制) | 描述 |
| :--- | :--- | :--- |
| 128 | 128 | 启动 (进入被动模式) |
| 131 | 131 | 驱动模式 (可以控制运动) |
| 137 | 137 | 开始 |
| 139 | 139 | 停止 |
| 137 + 速度 + 半径 | | 驱动控制 |
| 142 | 142 | 请求传感器字节包 |
| 149 | 149 | 请求一组传感器数据 |
开发环境搭建 (以 Create 2 + Python 为例)
这是最流行、最容易上手的组合。

硬件准备:
- iRobot Create 2 机器人。
- 电脑: 任何操作系统均可。
- 串口连接:
- 推荐: 使用一个 USB-to-Serial 转换器 (如 FTDI芯片),将 Create 2 的 7-pin 接口连接到转换器,再插入电脑 USB 口。
- 替代: 在 Create 2 上安装一个 Raspberry Pi,通过 Pi 的串口与 Create 2 通信,Pi 再通过 Wi-Fi 与你的电脑通信。
软件准备:
- Python 3: 确保已安装。
- PySerial 库: 用于串口通信。
pip install pyserial
代码示例 1: 基础连接与控制
这个例子将演示如何连接 Create 2,并让它向前、向后、转弯。
import serial
import time
# --- 配置 ---
# 根据你的系统,串口名称可能不同
# Windows: "COM3"
# Linux: "/dev/ttyUSB0" 或 "/dev/ttyACM0"
# macOS: "/dev/cu.usbserial-XXXX"
SERIAL_PORT = "/dev/ttyUSB0"
BAUD_RATE = 115200 # Create 2 的标准波特率
def send_command(ser, command):
"""发送一个字节指令"""
ser.write(bytes([command]))
print(f"Sent command: {command}")
def drive(ser, velocity, radius):
"""
驱动机器人
velocity: 速度 (-500 到 500 mm/s)
radius: 转弯半径 (-32768 到 32767 mm)
- 直线: 32768 或 -32768
- 原地旋转: 0
"""
# 指令 137 (Drive)
# 参数1: 速度高字节
# 参数2: 速度低字节
# 参数3: 半径高字节
# 参数4: 半径低字节
ser.write(bytes([137])) # Drive command
ser.write(bytes([(velocity >> 8) & 0xFF, velocity & 0xFF])) # Velocity
ser.write(bytes([(radius >> 8) & 0xFF, radius & 0xFF])) # Radius
def main():
try:
# 1. 打开串口连接
ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
print(f"Successfully connected to {SERIAL_PORT}")
# 2. 启动机器人 (进入被动模式)
send_command(ser, 128)
time.sleep(1.0)
# 3. 设置为驱动模式
send_command(ser, 131)
time.sleep(1.0)
# 4. 开始运动
send_command(ser, 137)
time.sleep(1.0)
# 5. 执行一系列动作
print("Driving forward at 200 mm/s...")
drive(ser, 200, 1) # 半径为1,近似直线前进
time.sleep(3)
print("Turning in place (clockwise)...")
drive(ser, 100, 0) # 半径为0,原地顺时针旋转
time.sleep(2)
print("Driving backward...")
drive(ser, -150, 1) # 直线后退
time.sleep(3)
print("Stopping...")
drive(ser, 0, 0) # 速度为0,停止
time.sleep(1)
# 6. 停止并关闭连接
send_command(ser, 139) # Stop
ser.close()
print("Connection closed.")
except serial.SerialException as e:
print(f"Error connecting to serial port: {e}")
except Exception as e:
print(f"An error occurred: {e}")
finally:
if 'ser' in locals() and ser.is_open:
ser.close()
if __name__ == "__main__":
main()
进阶开发:读取传感器数据
让机器人感知环境是更高级的开发,下面是如何获取机器人状态(如电量、是否碰撞、轮子编码器等)。
代码示例 2: 读取传感器数据
import serial
import time
SERIAL_PORT = "/dev/ttyUSB0"
BAUD_RATE = 115200
def send_command(ser, command):
ser.write(bytes([command]))
def request_sensor_packet(ser, packet_id):
"""请求特定传感器数据包"""
# OI 指令 142 (Sensors) + 数据包ID
ser.write(bytes([142, packet_id]))
def main():
try:
ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
print(f"Connected to {SERIAL_PORT}")
# 初始化: Start -> Safe mode
send_command(ser, 128)
time.sleep(1)
send_command(ser, 131)
time.sleep(1)
# --- 读取不同传感器 ---
# 1. 请求 "OI Mode" 和 "Charging State" (Packet ID 35)
print("\nRequesting OI Mode and Charging State (Packet 35)...")
request_sensor_packet(ser, 35)
time.sleep(0.1)
if ser.in_waiting >= 2:
mode = ser.read()
charge_state = ser.read()
print(f" Mode: {mode}, Charge State: {charge_state}")
# 2. 请求 "B Charge Voltage" (Packet ID 24)
print("\nRequesting Battery Voltage (Packet 24)...")
request_sensor_packet(ser, 24)
time.sleep(0.1)
if ser.in_waiting >= 2:
voltage_high = ser.read()
voltage_low = ser.read()
voltage = (voltage_high[0] << 8) | voltage_low[0]
print(f" Battery Voltage: {voltage} mV")
# 3. 请求 "Wall/Side/Cliff/Bump/Wheel Drops" (Packet ID 7)
print("\nRequesting Wall, Cliff, and Bump Sensors (Packet 7)...")
request_sensor_packet(ser, 7)
time.sleep(0.1)
if ser.in_waiting >= 2:
byte1 = ser.read() # Wall, Cliff Left/Right
byte2 = ser.read() # Bump Left/Right, Wheel Drop Left/Right
print(f" Sensor Byte 1: {byte1[0]:08b}")
print(f" Sensor Byte 2: {byte2[0]:08b}")
# 你可以解析这些字节来获取具体状态
# 4. 请求 "Right Wheel Encoder Count" (Packet ID 43)
print("\nRequesting Right Wheel Encoder Count (Packet 43)...")
request_sensor_packet(ser, 43)
time.sleep(0.1)
if ser.in_waiting >= 2:
count_high = ser.read()
count_low = ser.read()
count = (count_high[0] << 8) | count_low[0]
print(f" Right Wheel Encoder Count: {count}")
# 停止
send_command(ser, 139)
ser.close()
print("\nConnection closed.")
except Exception as e:
print(f"An error occurred: {e}")
finally:
if 'ser' in locals() and ser.is_open:
ser.close()
if __name__ == "__main__":
main()
高级开发:使用 ROS (Robot Operating System)
对于复杂的机器人应用(如 SLAM、导航、建图),使用 ROS 是行业标准,iRobot 官方为 Create 3 提供了完整的 ROS 2 支持。
为什么用 ROS?
- 模块化: 将感知、规划、控制等功能拆分成独立的节点。
- 生态系统: 丰富的现有算法包(如导航栈
Nav2、视觉 SLAMslam_toolbox)可以直接使用。 - 标准化: 发布/订阅 模式让节点间通信变得简单。
ROS 开发流程 (以 Create 3 为例):
- 硬件准备: Create 3 + Raspberry Pi 4 (或性能更好的电脑)。
- 软件安装: 在 Raspberry Pi 上安装 ROS 2 (Humble)。
- 安装官方驱动:
sudo apt update sudo apt install ros-humble-irobot-create-msgs ros-humble-irobot-create-nodes
- 运行示例:
- 启动 Create 3 并连接到 Wi-Fi。
- 在你的电脑上,通过 SSH 连接到 Pi。
- 运行一个简单的键盘控制节点:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
- 再打开一个新的终端,启动 Create 3 的驱动节点:
ros2 launch irobot_create_driver bringup.launch.py
- 你就可以通过键盘控制机器人了,并且可以查看
/scan(激光雷达)、/odom(里程计)等话题数据。
总结与学习路径
| 开发阶段 | 目标 | 工具/方法 | 产出 |
|---|---|---|---|
| 入门 | 理解基本通信和控制 | Python + PySerial + Create 2 | 一个能让机器人前进、后退、转弯的脚本 |
| 进阶 | 读取环境信息,做出简单反应 | Python + PySerial + 传感器数据 | 一个能检测到障碍物并停止的避障程序 |
| 高级 | 实现自主导航、建图 | ROS 2 + Create 3 | 一张地图,一个能自主移动到指定点的机器人 |
推荐学习资源:
- 官方文档: iRobot Create 3 API 和 ROS 2 驱动文档 是最重要的资料。
- GitHub: 搜索
irobot-create,可以找到大量的开源项目、驱动和示例代码。 - 社区: 在 ROS Discourse、iRobot 开发者论坛或相关技术论坛提问。
希望这个详细的指南能帮助你开启 iRobot 机器人开发的旅程!从最简单的 Python 脚本开始,逐步深入,你很快就能构建出复杂的机器人应用。
标签: irobot机器人开发实用场景 家庭清洁机器人应用案例 irobot技术在不同领域的开发实例