第3章:标定前的软件环境
嗯,软件环境搭建这事儿,说简单也简单,说复杂也复杂。我见过不少工程师,硬件调得漂漂亮亮,结果卡在环境配置上,一卡就是好几天。说白了,标定工作能不能顺利推进,90%取决于你前期把软件环境收拾得利不利索。
3.1 ROS2驱动安装——别小看这一步
我个人习惯,先把ROS2的驱动装好。为什么?因为后面所有的通信、数据采集、标定算法,全得跑在ROS2这个框架上。你想想看,如果驱动没装对,后面排查问题就像大海捞针。
目前主流的机器人关节,用的驱动无非两种:一种是厂家提供的专用ROS2驱动包,另一种是通用的CAN或EtherCAT驱动。我建议你优先用厂家的,省心。
核心思路:驱动安装的本质,就是让ROS2能识别你的硬件,并且能收发数据。别搞复杂了。
举个例子,假设你用的是某款国产关节模组,厂家给了个 joint_driver 包。安装步骤大致如下:
# 1. 创建工作空间
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
# 2. 克隆驱动包
git clone https://github.com/xxx/joint_driver.git
# 3. 安装依赖
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
# 4. 编译
colcon build --packages-select joint_driver
# 5. 环境生效
source install/setup.bash
我在项目中遇到过一个问题:编译时提示缺少某个依赖包。当时我查了半天,发现是 rosdep 没更新。你记得先跑一下 rosdep update,能省不少事。
小技巧:装完驱动后,先跑一个 ros2 launch joint_driver test.launch.py,看看能不能正常启动节点。如果报错,八成是依赖没装全。
3.2 CAN/EtherCAT通信配置——硬骨头
通信配置这块,说白了就是让电脑和关节模组能「说上话」。CAN和EtherCAT是两种最常见的总线,我分别说说。
3.2.1 CAN通信配置
CAN总线在机器人关节里用得特别多,尤其是那些老牌厂商的产品。配置CAN,核心就两步:装驱动、配参数。
首先,你得确认你的CAN卡型号。比如我用过的 PEAK-USB 和 Kvaser,驱动安装方式完全不同。我建议你直接去官网下驱动,别用系统自带的,容易出幺蛾子。
装好驱动后,用 ip link 命令看看设备有没有被识别:
# 查看CAN设备
ip link show
# 如果看到 can0 之类的设备,说明驱动装好了
# 然后配置波特率并启动
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
我曾经有一次,怎么配都连不上关节。折腾了两小时,最后发现是CAN总线的终端电阻没焊。嗯,硬件问题别忽略。
注意:CAN总线两端必须各加一个120欧姆的终端电阻。少一个,信号就会反射,通信时好时坏。别问我怎么知道的。
3.2.2 EtherCAT通信配置
EtherCAT比CAN快得多,适合多关节、高实时性的场景。配置EtherCAT,我推荐用 SOEM 或 IgH EtherCAT Master。
我个人习惯用 IgH,因为它稳定,而且文档全。安装步骤:
# 下载源码
git clone https://gitlab.com/etherlab.org/ethercat.git
cd ethercat
# 编译安装
./configure --enable-8139too=no --enable-generic=yes
make
sudo make install
# 加载内核模块
sudo modprobe ec_master
# 启动EtherCAT主站
sudo /etc/init.d/ethercat start
装好后,用 ethercat slaves 命令看看能不能扫描到关节。如果啥都没有,检查网线,或者换个网口试试。我遇到过网卡不兼容的情况,换了个Intel的网卡就好了。
避坑指南:EtherCAT对网卡有要求。Realtek的网卡经常出问题,Intel的网卡最稳。我曾经因为网卡不兼容,折腾了整整一个周末。
3.3 数据采集工具链搭建——把数据抓出来
环境搭好了,通信通了,接下来就是采集数据。标定说白了就是「发指令、收数据、算参数」的循环。没有好用的工具链,你连数据都拿不到,还标什么定?
我常用的数据采集工具链分三层:
| 层级 | 工具 | 作用 |
|---|---|---|
| 底层 | CANutils / EtherCAT命令行 | 直接读写总线数据,调试用 |
| 中间层 | ROS2 topic / service | 封装成标准接口,方便上层调用 |
| 上层 | Python脚本 / rqt_plot | 可视化、记录、分析数据 |
举个例子,用ROS2采集关节的位置和电流数据:
# 启动关节驱动节点
ros2 run joint_driver joint_driver_node
# 查看有哪些话题
ros2 topic list
# 实时打印位置数据
ros2 topic echo /joint_states
# 或者用Python脚本记录到文件
ros2 bag record /joint_states
我个人习惯用 ros2 bag 记录数据,因为它能完整回放,方便后面分析。你想想看,标定过程中可能跑好几个小时,中间出点啥问题,有bag文件就能复盘。
小建议:采集数据时,记得同时记录时间戳。没有时间戳的数据,分析起来会非常痛苦。ROS2的bag默认带时间戳,这点很省心。
3.4 本章知识体系
下面这张图,是我自己画的软件环境搭建逻辑图。你照着这个顺序来,基本不会乱。
你看,整个流程是线性的。ROS2驱动是基础,通信配置是桥梁,工具链是抓手。三步走完,你的标定环境就齐活了。
总结一下:软件环境搭建,别贪快。每装一个东西,都验证一下。驱动装完跑个节点,CAN配完发个帧,EtherCAT配完扫个从站。每一步都确认没问题,再往下走。这样虽然慢,但稳。
好了,环境搭好了,下一章咱们就开始动手标定了。到时候你会发现,前面这些功夫,全都没白费。