简历技术栈全面复习——ROS2缺口
·
工程架构:
上层程序
↓
JointTrajectory
↓
ROS2 control Node
↓
关节映射
↓
rad → encoder count
↓
EtherCAT command
↓
CiA402 Drive
↓
Motor
反馈方向:
Motor
↓
Encoder
↓
EtherCAT
↓
encoder count
↓
count → rad
↓
ROS2
↓
JointState / Controller
1. 参数化 launch
为什么叫“参数化”?
例如:
robot.launch.py
可以接受:
robot_ip
can_interface
ethercat_device
use_sim
joint_config
于是:
开发环境
↓
use_sim=true
真实机器人:
use_sim=false
同一套启动逻辑可以适配不同环境。
这就是工程上的:
配置与代码分离。
2. 为什么需要“关节映射”?
这是你简历中很重要但容易被忽略的一点:
实现关节映射。
假设 ROS2:
left_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
↓
ROS2
4. ROS2 和 EtherCAT 为什么要解耦?
一个非常好的工程架构应该是:
ROS2
↓
Hardware Interface
↓
EtherCAT Driver
而不是:
ROS2 Node
↓
到处写 IgH API
↓
到处操作 PDO
因为如果 ROS2 节点直接操作 EtherCAT:
ROS2代码
+
EtherCAT代码
+
CiA402代码
全部混在一起。
以后换硬件就非常痛苦。
更多推荐
所有评论(0)