🧩 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
🔧 配置关键点¶
- 保持
schema_version: 2,source.expected_length通常设为16。 source_channels的值是 KER 数据包的从零开始索引;每个关节的source必须引用已定义的名称。- 每个
output对应一个 ROS 控制器,支持forward_position、joint_trajectory和gripper_action。 joints的数量、名称和顺序必须与控制器完全一致;topic或action也必须填写真实 endpoint。input_range是外骨骼范围,output_range是机器人范围。方向相反时交换output_range两端,不使用invert字段。- 角度通常使用
degree输入、rad输出;线性夹爪使用output_unit: m,并设置min/max安全边界。 - 建议启用
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。