🤖 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_py、motors_py、robot_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 策略自主保持平衡并响应手柄速度指令。若需切换策略(如从默认行走切换为 beyondmimic 或 interrupt 模式),修改 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
依赖库已安装 colcon、screen、libeigen3-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 报错 → 常见问题排查与调试技巧