LeKiwi 移动机械臂
Relevant source files
The following files were used as context for generating this wiki page:
LeKiwi 平台是集成到 IB-Robot 框架中的三轮全向移动机械臂。它把 6-DOF SO101 机械臂和自定义移动底盘组合在一起,通过 lekiwi_hardware 插件使用 Feetech STS 协议统一控制基于位置的机械臂关节和基于速度的底盘电机。
系统架构
LeKiwi 系统作为 ros2_control SystemInterface 运行,把 9 个物理电机(6 个机械臂,3 个底盘)抽象为标准 ROS 2 命令接口和状态接口。
硬件映射图
下图展示高层 ROS 2 控制器与底层 LeKiwiSystemHardware 实现之间的关系。
graph TD
subgraph "ROS 2 Control Layer"
A[arm_position_controller] --> |"Joints 1-5"| HW["lekiwi_hardware/LeKiwiSystemHardware"]
G[gripper_position_controller] --> |"Joint 6"| HW
B[base_velocity_controller] --> |"Joints 7-9"| HW
HW --> JS[joint_state_broadcaster]
end
subgraph "Physical Hardware (Feetech STS)"
HW --> |"SyncWritePosEx (ID 1-6)"| ARM_MOTORS["6x STS Position Servos"]
HW --> |"SyncWriteSpe (ID 7-9)"| BASE_MOTORS["3x Wheel Velocity Servos"]
ARM_MOTORS --> |"SyncRead"| HW
BASE_MOTORS --> |"SyncRead"| HW
end
subgraph "Code Entities"
HW_CLASS["lekiwi_hardware::LeKiwiSystemHardware"]
FEETECH_SDK["SMS_STS.h (Feetech SDK)"]
end
来源: src/lekiwi_hardware/README.md:17-40, src/lekiwi_hardware/include/lekiwi_hardware/lekiwi_system_hardware.hpp:19-25, src/lekiwi_hardware/config/lekiwi_controllers.yaml:1-20
硬件接口(lekiwi_hardware)
lekiwi_hardware 包提供 LeKiwiSystemHardware 插件,实现 hardware_interface::SystemInterface src/lekiwi_hardware/include/lekiwi_hardware/lekiwi_system_hardware.hpp:25-25。它通过 1 Mbps 串口连接管理与 Feetech SMS_STS 舵机的通信 src/lekiwi_hardware/README.md:225-226。
关键函数和控制循环
on_init: 初始化硬件接口,调整内部缓冲区大小,并从HardwareInfo对象解析电机 ID。它还会从硬件参数中提取串口和标定文件路径 src/lekiwi_hardware/src/lekiwi_system_hardware.cpp:13-54。on_configure: 解析calib_file_指定的 JSON 标定文件,为机械臂电机加载回零偏移和关节限位。底盘电机不需要标定数据 src/lekiwi_hardware/src/lekiwi_system_hardware.cpp:56-102。on_activate: 建立与电机的串口通信,ping 每个电机确认连通性,并配置机械臂电机为位置控制、底盘电机为轮式(速度)模式。它还初始化syncReadBegin,用于高效状态读取 src/lekiwi_hardware/src/lekiwi_system_hardware.cpp:133-210。read(): 使用syncReadPacketTx/Rx在单次事务中获取全部 9 个电机的位置和速度,确保时间一致性 src/lekiwi_hardware/README.md:226-226。原始电机数据会转换为 ROS 单位,并存储在hw_positions_和hw_velocities_中 src/lekiwi_hardware/src/lekiwi_system_hardware.cpp:212-249。write():机械臂(ID 1-6): 将命令位置从弧度转换为原始 ticks,应用回零偏移,并限制在定义范围内。然后发送包含目标位置、速度和加速度的
SyncWritePosEx包 src/lekiwi_hardware/README.md:227-227, src/lekiwi_hardware/src/lekiwi_system_hardware.cpp:251-280。底盘(ID 7-9): 将命令速度从 rad/s 转换为原始 steps/s 并进行限幅。随后发送
SyncWriteSpe包,实现连续旋转速度控制 src/lekiwi_hardware/README.md:228-228, src/lekiwi_hardware/src/lekiwi_system_hardware.cpp:282-297。
控制频率:
controller_manager配置为 100 Hz 运行 src/lekiwi_hardware/config/lekiwi_controllers.yaml:3-3。
坐标与单位转换
插件负责 ROS 2 标准单位(弧度、rad/s)与 Feetech 原始 ticks 之间的转换。转换逻辑集中在 lekiwi_conversions.hpp 中 src/lekiwi_hardware/README.md:210-210。
函数 |
用途 |
|---|---|
|
机械臂位置:raw ticks → radians |
|
机械臂位置:radians → ticks(限幅到 [0, 4095]) |
|
速度:raw steps/s → rad/s |
|
速度:rad/s → steps/s(限幅到 [-32768, 32767]) |
|
解码 2 字节寄存器(bit 15 为符号位) |
|
编码回零偏移(bit 11 为符号位) |
来源: src/lekiwi_hardware/src/lekiwi_system_hardware.cpp, src/lekiwi_hardware/README.md:172-180, src/lekiwi_hardware/include/lekiwi_hardware/lekiwi_conversions.hpp
机器人描述(lekiwi_description)
lekiwi_description 包包含平台的 URDF/Xacro 模型。主模型是 lekiwi_assembled.urdf.xacro,它把 SO101 机械臂与 LeKiwi 三轮底盘合并 src/lekiwi_description/urdf/lekiwi_assembled.urdf.xacro:5-8。
运动学配置
底盘: 三轮全向驱动系统。车轮相对于 +X 轴布置在 60°、180° 和 300° src/lekiwi_description/urdf/lekiwi_assembled.urdf.xacro:127-152。
机械臂安装: 机械臂基座(
worldlink)以固定偏移和 90 度 Z 轴旋转安装到base_linksrc/lekiwi_description/urdf/lekiwi_assembled.urdf.xacro:157-161。关节命名: 关节以 “1” 到 “9” 的数字命名,保持与
robot_config和硬件 ID 的直接映射 src/lekiwi_description/urdf/lekiwi_assembled.urdf.xacro:185-240。ros2_control集成:lekiwi_assembled.urdf.xacro文件包含ros2_control标签,会根据use_sim参数动态加载真实硬件的lekiwi_hardware/LeKiwiSystemHardware插件,或仿真插件(例如gz_ros2_control/GazeboSimSystem)src/lekiwi_description/urdf/lekiwi_assembled.urdf.xacro:165-181。它还为每个关节定义命令和状态接口 src/lekiwi_description/urdf/lekiwi_assembled.urdf.xacro:183-240。
来源: src/lekiwi_description/urdf/lekiwi_assembled.urdf.xacro:1-161, src/lekiwi_description/urdf/base.common.xacro:1-32
外设配置
该平台配备多个相机和传感器,作为 peripherals 定义:
前置相机: 基于 OpenCV 的前向相机驱动,用于全局导航和障碍检测 src/robot_config/config/robots/lekiwi_navi.yaml:210-227。
腕部相机: 安装在机械臂上的 RealSense 相机,用于精细操作和抓取。其 RGB 和深度话题会为
rtabmap重映射 src/robot_config/config/robots/lekiwi_navi.yaml:229-246, src/robot_config/config/robots/lekiwi_navi.yaml:133-136。IMU: BNO055 传感器,为 EKF 定位提供姿态数据 src/lekiwi_description/urdf/base.common.xacro:28-30。
来源: src/robot_config/config/robots/lekiwi_navi.yaml:209-246, src/lekiwi_description/urdf/base.common.xacro:1-32