🤖 roboto_origin_03 Wiki
首页 / 部署 / 快速开始

本页面向首次接触 ATOM01 部署框架的开发者,提供从代码获取到机器人动起来的最小完整路径。阅读完本页后,你将理解项目的模块划分、掌握一键启动流程,并知道在每一步遇到困难时应深入阅读哪一篇文档。如果你已熟悉 ROS2 与嵌入式开发,按照本页流程可在 30 分钟内完成首次上电运行。

Sources: README_CN.md

系统一览

ATOM01 部署框架以 ROS2 Humble 为中间件,采用三模块分离架构:推理节点负责加载 ONNX 策略模型并实时计算关节目标;电机驱动包通过 SocketCAN 与达妙(DM)等电机通信;IMU 驱动包读取机身姿态。三者通过 robot.yaml 统一配置,由 start_robot.sh 一键编译并后台启动。

graph LR
    A[手柄 / 指令] -->|ROS2 Topic| B(inference_node<br/>推理节点)
    B -->|MIT 控制指令| C[RobotInterface<br/>硬件抽象层]
    C --> D[motors 包<br/>CAN 总线]
    C --> E[imu 包<br/>串口/CAN]
    D --> F[23 个关节电机]
    E --> G[HiPNUC IMU]
    B --> H[ONNX<br/>策略模型]

上图中,推理节点是中枢神经:它以固定频率(默认 250 Hz)采集 IMU 角速度、机身姿态四元数、关节位置与速度,经观测堆叠后送入 ONNX 模型,输出 23 维动作指令;RobotInterface 将动作映射为 MIT 阻抗控制参数,通过 can0~can3 下发给左腿、右腿+腰、左手、右手四组电机。整个数据流在编译型 C++ 中完成,保证实时性。

Sources: inference_node.cpp, robot_interface.cpp, robot.yaml

项目结构速查

仓库根目录按功能做了清晰隔离。对初学者而言,重点关注以下路径即可:

目录 作用 入门关键文件
src/inference/ 推理节点与硬件抽象 config/robot.yaml(整机配置)、launch/inference.launch.py(启动描述)
src/motors/ 电机驱动 C++/Python SDK README_CN.md(API 速查)
src/imu/ IMU 驱动 C++/Python SDK README_CN.md(API 速查)
tools/ 一键启动与辅助工具 start_robot.sh(核心启动脚本)
scripts/ Python 示例与标定脚本 set_zero.py(零点标定)、motion_player.py(动作序列)
assets/ 内核包、udev 规则、DDS 配置 rt_fastdds_profile.xml(实时 DDS 优化)
graph TD
    Root[atom01_deploy] --> Src[src]
    Root --> Scripts[scripts]
    Root --> Tools[tools]
    Root --> Assets[assets]
    Src --> Inf[src/inference]
    Src --> Mot[src/motors]
    Src --> Imu[src/imu]
    Inf --> InfConfig[config/robot.yaml]
    Inf --> InfLaunch[launch/inference.launch.py]
    Tools --> Start[start_robot.sh]
    Scripts --> Zero[set_zero.py]

Sources: start_robot.sh, inference.launch.py

快速启动五步走

以下流程假设你已完成主控板(Orange Pi 5 Plus 或 RDK X5)的系统烧录与基础联网。若尚未配置 ROS2 环境或依赖,请先阅读 环境配置与依赖安装

flowchart TD
    A[1. 获取代码并编译] --> B[2. 确认硬件连接]
    B --> C[3. 电机零点标定]
    C --> D[4. 启动机器人软件]
    D --> E[5. 手柄使能与推理]
    E --> F{运行正常?}
    F -->|是| G[开始探索]
    F -->|否| H[查看排查技巧]
    H --> I[常见问题排查与调试技巧]

第一步:获取代码并编译

在项目根目录执行以下命令,拉取完整代码(含子模块)并进行首次编译:

git clone https://github.com/Roboparty/atom01_deploy.git
cd atom01_deploy
git submodule update --init --recursive
colcon build --symlink-install
source install/setup.bash

--symlink-install 选项让你在修改 src/ 下的 Python 脚本或配置后无需重新编译即可生效,对调试非常友好。编译成功后,install/ 目录下会生成 setup.bash 以及 Python 扩展模块 imu_pymotors_pyrobot_py

Sources: README_CN.md, start_robot.sh

第二步:确认硬件连接

ATOM01 默认使用 4 路 CAN 总线分别控制四肢,IMU 通过串口连接。首次上电前,请确认:

为免除“按顺序插拔”的麻烦,推荐部署 udev 规则自动绑定 USB 物理接口与 CAN/串口设备。若你使用 Orange Pi 5 Plus,执行:

sudo cp assets/99-auto-up-devs-orangepi.rules /etc/udev/rules.d/
sudo udevadm control --reload
sudo udevadm trigger

重启后输入 ip a 应能看到 can0~can3 全部处于 UP 状态。更详细的接线图、电机 ID 定义与 udev 规则定制方法,请参考 硬件连接与 CAN/IMU 映射

Sources: README_CN.md, 99-auto-up-devs-orangepi.rules

第三步:电机零点标定(首次必需)

电机零点标定只需在首次使用更换/维修电机后执行一次。仓库提供两种标定方式:软件服务标定适合批量写入,脚本标定适合逐关节人工摆位。对初学者推荐后者,更直观且不易出错。

先确认 scripts/config/set_zero.yaml 中的电机 ID、CAN 接口与实际硬件一致,然后执行:

source /opt/ros/humble/setup.bash
source install/setup.bash
python3 scripts/set_zero.py

脚本会依次将每个电机切换到阻尼模式,你只需手动将关节转到机械零位,按 Enter 确认即可;按 空格 跳过当前电机。全部完成后,零点即写入电机 Flash。

注意src/inference/config/robot.yaml 中的 motor_zero_offset 第 13 个值(腰部 yaw)默认为 2.093。若你是将腰部 yaw 转至限位块处标定,保留该值;若使用打印件固定腰部 yaw 标定,请将其改为 0.0

Sources: set_zero.py, set_zero.yaml, robot.yaml, README_CN.md

第四步:启动机器人软件

一切准备就绪后,在项目根目录执行:

./tools/start_robot.sh

该脚本会自动完成以下操作:

  1. 设置 Fast DDS 环境变量,加载 assets/rt_fastdds_profile.xml 以优化实时通信;
  2. 自动 source ROS2 环境并执行 colcon build --symlink-install
  3. 在后台 screen 会话中启动推理节点 inference_node
  4. 在后台 screen 会话中启动手柄节点 joy_node
  5. 验证 DDS 配置与节点发现状态,输出启动报告。

启动成功后,终端会打印绿色成功信息。你可以通过以下命令查看实时日志:

screen -r inference_session   # 查看推理节点输出
screen -r joy_session         # 查看手柄节点输出

Ctrl+A 再按 D 即可 detach 会话,回到原终端。停止所有后台组件:

screen -S inference_session -X quit
screen -S joy_session -X quit

Sources: start_robot.sh

第五步:使能电机与开始推理

软件启动后,机器人处于待机状态。拿起手柄,按以下顺序操作:

按键 功能 时机
X 使能 / 失能电机 首次上电必须先按 X 使能
A 复位电机到默认角度 若姿态异常,按 A 恢复站姿
B 开始 / 暂停推理 确认站稳后按 B 启动策略
右摇杆 前后左右移动 推理运行中控制平移
LT / RT 左右旋转 推理运行中控制转向

推理启动后,机器人会根据 ONNX 策略自主保持平衡并响应手柄速度指令。若需切换策略(如从默认行走切换为 beyondmimicinterrupt 模式),修改 src/inference/launch/inference.launch.py 中加载的 YAML 文件名后重新运行 ./tools/start_robot.sh 即可。

Sources: README_CN.md, start_robot.sh, inference.launch.py

首次启动检查清单

在点击启动前,建议逐条核对下表,可显著减少首次上电的报错概率:

检查项 期望结果 验证命令 / 方法
ROS2 Humble 已安装 ros2 --version 有输出 ros2 --version
依赖库已安装 colconscreenlibeigen3-dev 可用 `dpkg -l
工作空间已编译 install/setup.bash 存在 ls install/setup.bash
CAN 接口已 UP can0~can3 显示 state UP ip a | grep can
IMU 串口可访问 /dev/ttyUSB0 存在且权限正确 ls -l /dev/ttyUSB0
电机零点已写入 各关节机械零位与软件零位一致 运行 set_zero.py 并确认
robot.yaml 零点偏移正确 腰部 yaw 偏移值与标定方式匹配 检查 motor_zero_offset 第 13 项
实时优先级已配置 ulimit -r 返回 98 ulimit -r

Sources: README_CN.md

常用命令速查

以下命令覆盖了日常调试中最频繁使用的操作,建议保存备查:

目的 命令
启动整机软件 ./tools/start_robot.sh
进入推理日志 screen -r inference_session
停止推理节点 screen -S inference_session -X quit
初始化所有电机 ros2 service call /init_motors std_srvs/srv/Trigger
开始策略推理 ros2 service call /start_inference std_srvs/srv/Trigger
停止策略推理 ros2 service call /stop_inference std_srvs/srv/Trigger
清除电机错误 ros2 service call /clear_errors std_srvs/srv/Trigger
复位关节到默认角度 ros2 service call /reset_joints std_srvs/srv/Trigger

Sources: README_CN.md, start_robot.sh

下一步阅读建议

完成首次启动并让机器人动起来后,建议按照以下顺序深入阅读,逐步建立对系统的完整理解:

  1. 若你尚未完成环境配置或想了解依赖细节环境配置与依赖安装
  2. 若需重新接线、修改 udev 规则或更换 IMU 波特率硬件连接与 CAN/IMU 映射
  3. 若对零点标定的两种方法仍有疑问电机零点标定
  4. 若希望脱离网线、通过 WiFi 热点远程调试WiFi 热点与远程调试
  5. 若想深入理解启动脚本、DDS 配置与推理节点的线程模型启动机器人与推理节点
  6. 若需查看手柄按键的完整映射与组合操作手柄控制说明
  7. 若计划通过 ROS2 服务或 Topic 进行二次开发ROS2 服务接口调用
  8. 若倾向使用 Python 快速验证算法或控制单电机Python SDK 快速上手
  9. 若启动后电机无响应、推理闪退或 CAN 报错常见问题排查与调试技巧