跳转到内容

从零搭建一台 2200 元($300)的 ROS2 科研机器人

一台完整的 ROS2 科研机器人,具备四轮麦克纳姆全向驱动、2D LiDAR SLAM、边缘 AI 推理,以及让你用 10 行代码编写第一个自主行为的 Python API。硬件总成本:不到 2200 元人民币(~$300 美元)。第一版原型无需定制 PCB——所有元件均可从淘宝或 AliExpress 现货购买。

作为参考,TurtleBot4 Lite 售价 $1,200 以上。高校自制科研平台在采购传感器、算力和底盘后通常花费 $2,000-5,000。3we 平台以极低成本实现了相当的感知和计算能力,并且通过 Python 优先的 SDK 消除了 ROS2 学习曲线。


组件型号大约价格 (RMB)
计算单元Raspberry Pi 5 (8GB) + Hailo-8L AI Hat650
微控制器ESP32-S3 DevKitC-135
LiDARLD06 360 度 2D LiDAR100
IMUBNO055 9 轴 IMU45
摄像头160 度鱼眼 USB 摄像头 (1080p)80
电机4x JGA25-370 直流电机带编码器120
电机驱动2x DRV8833 双 H 桥驱动20
轮子4x 65mm 麦克纳姆轮160
电池3S 2200mAh LiPo + BMS120
底盘200x200mm 铝板 + 铜柱80
电源5V/5A 降压模块(供 Pi5)25
安全急停按钮 + 继电器30
接线连接器、线缆、压接端子50
紧固件M3/M4 螺栓、螺母、铜柱30
合计1545 RMB ($215)

加上以下可选升级后,完整科研配置约 2200 元:

可选升级型号价格 (RMB)
深度感知Intel RealSense D405(二手)350
更强算力Pi 5 (16GB) 替换 8GB+100
充电底座定制底座 PCB + 触点200
含升级合计2200 RMB ($300)

Pi 5 原生运行 ROS2 Jazzy,性能是 Pi 4 的 1.5 倍。Hailo-8L AI 加速器(13 TOPS)通过 M.2 扩展板插入,可以 30+ FPS 运行 YOLO、MobileNet 和自定义 VLA 模型,且不占用 CPU。这一组合提供:

  • 完整的 ROS2 技术栈(Nav2、SLAM、感知)
  • 13 TOPS 神经网络推理,支持设备端 AI
  • USB3 接摄像头,以太网用于远程开发
  • 系统总功耗低于 8W

ESP32-S3 通过 micro-ROS 处理实时电机控制,通过 USB-CDC 以 1000Hz 与 Pi 通信。它运行:

  • 4 个电机的 PID 速度控制
  • 编码器计数(4 通道,正交编码)
  • 100Hz IMU 融合
  • 安全看门狗(通信中断时停止电机)

这种架构将硬实时(电机控制)与软实时(导航、感知)分离,这对可靠的机器人运行至关重要。

LD06 是一款 14 美元的 360 度 2D LiDAR,12m 测距范围,4500 采样/秒。通过 UART 接口连接,直接兼容 ROS2 的 ldlidar 包。在室内环境的 SLAM 和避障场景中,其表现与价格贵 10 倍的 LiDAR 相当。

麦克纳姆轮无需复杂转向机构即可实现平台全向移动(前后、横移、对角线、原地旋转)。这对以下场景至关重要:

  • 紧凑的室内导航(走廊、桌下)
  • 精确的对接操作
  • 完整运动规划(简化 Nav2 配置)

┌─────────────────────────────────────────────────────────┐
│ 你的 Python 代码 │
│ from threewe import Robot │
│ await robot.move_to(x=2.0, y=1.5) │
├─────────────────────────────────────────────────────────┤
│ threewe Python SDK │
│ Robot, VLMRunner, VLARunner, Gymnasium Envs │
├─────────────────────────────────────────────────────────┤
│ Backend Abstraction Layer │
│ GazeboBackend │ IsaacSimBackend │ RealBackend │
├─────────────────────────────────────────────────────────┤
│ ROS2 Jazzy │
│ Nav2 │ SLAM Toolbox │ robot_perception │ micro-ROS │
├──────────────────────┬──────────────────────────────────┤
│ Raspberry Pi 5 │ ESP32-S3 │
│ + Hailo-8L │ Motor PID + Encoders │
│ Camera, LiDAR │ IMU, Safety Watchdog │
└──────────────────────┴──────────────────────────────────┘

关键点:你永远不需要学习 ROS2threewe SDK 通过 Python 暴露所有功能:

import asyncio
from threewe import Robot
async def main():
async with Robot(backend="real") as robot:
# 获取传感器数据
image = robot.get_camera_image() # (480, 640, 3) uint8
scan = robot.get_lidar_scan() # 360 range measurements
pose = robot.get_pose() # x, y, theta in map frame
# 导航
await robot.move_to(x=2.0, y=1.5) # 使用 Nav2 路径规划
await robot.move_forward(1.0) # 前进 1 米
await robot.rotate(1.57) # 旋转 90 度
# AI 推理(在 Hailo-8L 上运行)
result = await robot.execute_instruction("find the door")
asyncio.run(main())

底层实现中,RealBackend 将这些调用转换为 ROS2 服务调用、动作客户端和话题订阅。但你永远不需要接触这些复杂性。


你不需要购买任何硬件就可以开始开发:

Terminal window
pip install threewe[sim]
threewe launch --backend gazebo --scene office_v2

这会启动一个 Gazebo 仿真环境,其中包含 3we 机器人模型和一个办公场景。你的 Python 代码运行方式完全相同:

async with Robot(backend="gazebo") as robot:
await robot.move_to(x=2.0, y=1.5)
image = robot.get_camera_image()

当你准备好迁移到硬件时,只需将 backend="gazebo" 改为 backend="real"。这是唯一需要的修改。


完整组装指南在 docs/assembly_guide.md。以下是关键步骤:

切割或订购 200x200mm 铝板。用 L 型支架安装 4 个电机。安装麦克纳姆轮(注意对角线配对——方向错误会破坏全向移动)。

┌────────────────┐
│ FL ╲ ╱ FR │ FL/BR: 左旋滚子
│ ╲╱ │ FR/BL: 右旋滚子
│ ╱╲ │
│ BL ╱ ╲ BR │ 俯视图
└────────────────┘

使用铜柱分层安装组件:

  • 底层:电池 + BMS + 降压模块
  • 中层:ESP32-S3 + 电机驱动
  • 顶层:Raspberry Pi 5 + Hailo-8L 扩展板 + LiDAR

关键连接:

起始端目标端接口
Pi 5ESP32-S3USB-C (micro-ROS)
ESP32-S3DRV8833 x2GPIO (PWM + DIR)
DRV8833Motors直连
Pi 5LD06 LiDARUSB-UART
Pi 5CameraUSB3
ESP32-S3BNO055I2C
E-StopSafety Relay常闭触点
Safety RelayMotor power串联
Terminal window
# Raspberry Pi 5 (Ubuntu 24.04 + ROS2 Jazzy 预装)
git clone https://github.com/telleroutlook/3we-robot-platform.git
cd 3we-robot-platform
# 编译 ROS2 包
cd ros2_ws && colcon build --symlink-install
source install/setup.bash
# 烧录 ESP32-S3 固件
cd firmware/esp32
idf.py set-target esp32s3
idf.py build && idf.py flash
# 安装 Python SDK
pip install threewe
# 启动所有节点
ros2 launch robot_bringup robot.launch.py
import asyncio
from threewe import Robot
async def main():
async with Robot(backend="real") as robot:
# 简单运动测试
await robot.move_forward(0.5) # 前进 50cm
await robot.rotate(3.14) # 掉头
await robot.move_forward(0.5) # 返回
asyncio.run(main())

特性3we 平台TurtleBot4 Lite自行搭建
成本~$300$1,200+$2,000-5,000
驱动类型麦克纳姆轮(全向)差速不定
边缘 AIHailo-8L (13 TOPS)无标配附加件
LiDARLD06 (360-deg)RPLiDAR (360-deg)不定
摄像头鱼眼 1080pOAK-D Lite不定
Python APIthreewe SDK自定义自定义
Sim2Real内置 (Gazebo/Isaac)需单独配置手动
SLAMSLAM ToolboxSLAM Toolbox手动
导航Nav2(预配置)Nav2手动
VLM/VLA 支持内置手动
Gymnasium 环境包含手动
开源硬件完全开源 (CERN-OHL-P)专有不定
可复现性高(BOM、指南)购买预装产品
首次演示时间2-3 小时30 分钟(预装)数天到数周

关键差异化因素不是任何单一规格——而是集成体验。Python 研究人员可以从 pip install threewe[sim] 开始,训练 RL 智能体并部署到硬件上,无需编写 ROS2 节点、配置 Nav2 或调试 TF 树。


所有组件均可从主流中国电子零售商和 AliExpress(国际买家)购买:

元件搜索关键词推荐店铺
Pi 5”树莓派5 8GB”树莓派官方店
Hailo-8L”Hailo-8L M.2 AI Hat”微雪 (Waveshare)
ESP32-S3”ESP32-S3-DevKitC-1”乐鑫官方店
LD06 LiDAR”LD06 激光雷达”乐动机器人店
BNO055”BNO055 九轴”各类店铺
JGA25-370”JGA25-370 编码器电机”各类店铺
麦克纳姆轮”65mm 麦克纳姆轮”各类店铺
DRV8833”DRV8833 电机驱动”各类店铺

搜索英文元件名称即可。大多数发往全球,2-3 周到货。LD06 LiDAR 和麦克纳姆轮特别容易找到。

第一代平台使用零定制 PCB。所有连接使用标准杜邦线、USB 线缆和螺丝端子。定制充电底座 PCB 是可选的,仅在需要自主长时间实验时才需要。


async with Robot(backend="real") as robot:
# SLAM 自动运行中
occupancy_map = robot.get_map()
# 导航到任何可达点
result = await robot.move_to(x=5.0, y=3.0)
print(f"Arrived: {result.success}, distance: {result.distance:.2f}m")
async with Robot(backend="real") as robot:
result = await robot.execute_instruction(
"go to the kitchen and find the coffee mug"
)
import gymnasium as gym
import threewe.gym # Registers environments
env = gym.make("3we/Navigation-v1", render_mode="rgb_array")
obs, info = env.reset()
for _ in range(1000):
action = your_policy(obs)
obs, reward, terminated, truncated, info = env.step(action)
from threewe.ai.vla_runner import VLARunner
vla = VLARunner.from_pretrained("lerobot/act_3we_nav")
async with Robot(backend="real") as robot:
while True:
obs = robot.get_observation(modalities=["image", "lidar", "velocity"])
action = vla.predict(obs, instruction="patrol the office")
robot.execute_action(action)
Terminal window
# 运行 100 轮点目标导航
threewe benchmark run --task pointnav --episodes 100 --backend gazebo
# 与基线对比
threewe benchmark compare --result results.json --baseline random_walk
# 提交到社区排行榜
threewe benchmark submit --result results.json

该平台支持仿真中的多机器人。每个机器人实例独立连接:

async def multi_robot():
async with Robot(backend="gazebo", config="robot_1") as r1:
async with Robot(backend="gazebo", config="robot_2") as r2:
# 协调两个机器人
await asyncio.gather(
r1.move_to(x=2.0, y=0.0),
r2.move_to(x=-2.0, y=0.0),
)

该平台实现了硬件级安全机制,软件无法绕过:

  1. 物理急停按钮:红色蘑菇头按钮通过常闭继电器切断电机电源。按下后立即断开所有电机驱动的供电,无论软件在做什么。

  2. 通信看门狗:ESP32-S3 固件有 200ms 看门狗。如果 200ms 内未收到速度指令,电机自动停止。这可以防护 Pi 崩溃、网络断开或进程挂起等情况。

  3. 速度限制:在固件和 SDK 中均硬编码。最大线速度 0.5 m/s,最大角速度 1.0 rad/s。不重新烧录固件无法覆盖。

  4. 安全距离:SDK 强制 15cm 缓冲区——如果 LiDAR 检测到 15cm 内有障碍物,运动指令会被拒绝并抛出 SafetyError


模块化设计意味着你可以从最小配置开始,逐步升级:

阶段硬件能力
第 1 阶段Pi5 + ESP32 + 电机 + LiDAR导航、SLAM
第 2 阶段+ 摄像头视觉感知、VLM 控制
第 3 阶段+ Hailo-8L设备端 AI、实时检测
第 4 阶段+ RealSense3D 建图、深度避障
第 5 阶段+ 充电底座自主长时间实验

每个阶段无需修改已有代码。SDK 自动检测可用硬件并进行适配。


Terminal window
# 1. 先在仿真中体验(无需硬件)
pip install threewe[sim]
threewe launch --backend gazebo --scene office_v2
# 2. 编写你的第一个自主行为
python -c "
import asyncio
from threewe import Robot
async def main():
async with Robot(backend='gazebo') as robot:
await robot.move_to(x=2.0, y=1.5)
print('Arrived!')
asyncio.run(main())
"
# 3. 准备好后,搭建硬件(见 docs/assembly_guide.md)
# 4. 将 backend="gazebo" 改为 backend="real"
# 5. 在真实机器人上运行相同代码