跳转至

🧩 KER 外骨骼配置文件与第三方机器人适配

KER 包把外骨骼数据到机器人控制器的转换全部放在 YAML 中。适配其他厂家的机器人时,通常只需复制 config/demo.yaml 并修改配置,不需要修改 Python 源码。

机器人需要先提供下文支持的 ROS 2 控制接口。若厂商只提供专用 SDK,需要先编写接口桥接;运动学结构不同时,本包的逐关节线性映射也不等同于末端位姿重定向。

🚀 启动自定义配置

ros2 launch openarmx_teleop_ker teleop_ker.launch.py \
  config_file:=/absolute/path/my_robot.yaml connection:=usb

config_file 优先于 robot 参数。也可以把文件放入包的 config/ 目录,用文件名(不含 .yaml)作为 robot。修改后重新构建并重新 source 工作区。

🧱 配置结构示例

下面以单关节控制器说明结构;实际适配时应补齐控制器要求的全部关节,示例范围需根据机器人规格调整。

schema_version: 2
robot_info: {name: MyRobot, model: v1}
source: {type: ker, packet_field: angles, unit: degree, expected_length: 16}
source_channels:
  right_j1: 0
  right_trigger: 7
outputs:
  - name: right_arm
    type: forward_position
    topic: /right_arm_controller/commands
    joints:
      - name: robot_joint1
        source: right_j1
        transform:
          input_range: [-90, 90]
          output_range: [-1.57, 1.57]
          input_unit: degree
          output_unit: rad
          clamp_input: true
          clamp_output: true
          min: -1.57
          max: 1.57

🔧 配置关键点

  1. 保持 schema_version: 2,source.expected_length 通常设为 16。
  2. source_channels 的值是 KER 数据包的从零开始索引;每个关节的 source 必须引用已定义的名称。
  3. 每个 output 对应一个 ROS 控制器,支持 forward_position、joint_trajectory 和 gripper_action。
  4. joints 的数量、名称和顺序必须与控制器完全一致;topic 或 action 也必须填写真实 endpoint。
  5. input_range 是外骨骼范围,output_range 是机器人范围。方向相反时交换 output_range 两端,不使用 invert 字段。
  6. 角度通常使用 degree 输入、rad 输出;线性夹爪使用 output_unit: m,并设置 min/max 安全边界。
  7. 建议启用 startup.ramp_sec,再按机器人速度配置 safety.max_step;偶发编码器尖峰可使用 jump_reject。

映射处理顺序为:单位转换 → 输入限幅 → 范围映射 → scale → offset → 输出 min/max 限幅 → 发布。

✅ 适配验证

先使用 use_fake_hardware:=true,逐关节检查方向、零位、范围和夹爪行程,再执行:

ros2 topic echo /right_arm_controller/commands
ros2 topic echo /joint_states

如果控制器使用 action 夹爪,使用对应的 ROS 2 action 工具检查目标值。确认命令数量和顺序无误后,再连接真实机器人。

完整字段说明参见 ROS 2 包中的 配置文件说明_CN.md。