
工程架构上层程序 ↓ JointTrajectory ↓ ROS2 control Node ↓ 关节映射 ↓ rad → encoder count ↓ EtherCAT command ↓ CiA402 Drive ↓ Motor反馈方向Motor ↓ Encoder ↓ EtherCAT ↓ encoder count ↓ count → rad ↓ ROS2 ↓ JointState / Controller1. 参数化 launch为什么叫“参数化”例如robot.launch.py可以接受robot_ip can_interface ethercat_device use_sim joint_config于是开发环境 ↓ use_simtrue真实机器人use_simfalse同一套启动逻辑可以适配不同环境。这就是工程上的配置与代码分离。2. 为什么需要“关节映射”这是你简历中很重要但容易被忽略的一点实现关节映射。假设 ROS2left_elbow right_elbow left_knee而底层驱动器编号Motor 1 Motor 2 Motor 3系统需要建立ROS Joint Name ↓ Motor ID例如left_elbow → Motor 3 right_elbow → Motor 7 left_knee → Motor 10所以上层关节名称 ↓ Joint Mapping ↓ 底层电机编号这就是软件抽象层之间的适配。3. 弧度为什么还要转换ROS2 机器人软件通常使用rad例如1.57 rad但是电机编码器可能使用encoder count比如100000 count所以必须ROS2 ↓ rad ↓ 转换 ↓ encoder count ↓ EtherCAT ↓ Drive反馈反过来encoder count ↓ 转换 ↓ rad ↓ ROS24. ROS2 和 EtherCAT 为什么要解耦一个非常好的工程架构应该是ROS2 ↓ Hardware Interface ↓ EtherCAT Driver而不是ROS2 Node ↓ 到处写 IgH API ↓ 到处操作 PDO因为如果 ROS2 节点直接操作 EtherCATROS2代码 EtherCAT代码 CiA402代码全部混在一起。以后换硬件就非常痛苦。