# ETHERCAT + ROS2 环境搭建
搭建 EtherCAT + ROS2 环境是一个涉及底层系统、实时内核、通信协议栈和上层控制框架的系统工程。 以下为您整理的详细搭建步骤,以目前最主流的 Ubuntu 22.04 + ROS2 Humble + IgH EtherCAT 组合为例:
系统级准备与安全启动检查
IgH EtherCAT 主站需要加载未签名的内核模块,因此必须首先禁用系统的安全启动(Secure Boot)。
1。 安装检测工具并检查状态:sudo apt-get install mokutil && mokutil --sb-state。
2。 若显示SecureBoot enabled,请重启电脑进入 BIOS 设置,在安全选项卡中禁用安全启动并保存退出。
配置 Linux PREEMPT_RT 实时内核
为了满足 EtherCAT 微秒级的硬实时控制需求,必须安装实时内核。
1。 安装低延迟内核(快速测试方案):sudo apt install -y linux-lowlatency linux-headers-lowlatency。
2。 安装 PREEMPT_RT 实时内核(推荐方案):通过 Ubuntu Pro 官方源免费获取(个人最多 5 台设备免费):
```bash
sudo pro attach
sudo pro enable realtime-kernel
sudo reboot
```
3。 重启后验证内核是否生效:uname -a | grep PREEMPT_RT。
编译与安装 IgH EtherCAT 主站
1。 安装编译依赖:sudo apt install -y git autoconf libtool pkg-config make build-essential net-tools。
2。 获取源码并切换稳定分支:
```bash
mkdir ~/EtherLab && cd ~/EtherLab
git clone https://gitlab.com/etherlab.org/ethercat.git
cd ethercat && git checkout stable-1.5
```
3。 配置与编译:
```bash
./bootstrap
./configure --prefix=/usr/local/etherlab --disable-8139too --enable-generic
make all modules
sudo make modules_install install
sudo depmod
```
4。 系统配置:
- 创建符号链接:`sudo ln -s /usr/local/etherlab/bin/ethercat /usr/bin/`
- 复制配置文件:`sudo mkdir -p /etc/sysconfig && sudo cp /usr/local/etherlab/etc/sysconfig/ethercat /etc/sysconfig/ethercat`
5。 配置网卡:编辑 sudo nano /etc/sysconfig/ethercat,
将 MASTER0_DEVICE 修改为您用于 EtherCAT 通信的网卡 MAC 地址,并将 DEVICE_MODULES 设置为 "generic"。
6。 启动主站并测试:sudo /etc/init.d/ethercat start,随后运行 ethercat master 查看状态,若Phase 为 Operation 则主站正常。
安装 ROS2 Humble 与 ros2_control
1。 安装 ROS2 Humble 桌面完整版:
```bash
sudo apt update && sudo apt install -y curl gnupg2 lsb-release
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros2.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update && sudo apt install -y ros-humble-desktop
source /opt/ros/humble/setup.bash
```
2。 安装 ros2_control 核心框架及预置控制器:
sudo apt install ros-humble-ros2-control ros-humble-ros2-controllers。
配置 ros2_control 控制器
在您的 ROS2 工作空间(如 my_robot/config/control_config.yaml)中编写 YAML 配置文件,定义控制周期和硬件接口:
controller_manager:
ros__parameters:
update_rate: 1000 # 控制周期(Hz),需与EtherCAT通信周期匹配
# 关节状态广播器(必须)
joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster
# 关节轨迹控制器(适用于机械臂)
arm_controller:
type: joint_trajectory_controller/JointTrajectoryController
ros__parameters:
joints:
- shoulder_joint
- elbow_joint
interface_name: position
集成与启动测试
1。 在 URDF/Xacro 文件中声明硬件接口,将插件指向 EtherCAT 硬件接口(如 ethercat_ros2_control/EthercatHardware),
并配置对应的 command_interface 和 state_interface。
2。 编写 Python 或 C++ 的 Launch 文件,依次启动 robot_state_publisher、controller_manager(加载上述 YAML 配置)以及各个控制器的 spawner 节点。
3。 运行 Launch 文件,使用 ros2 topic echo /joint_states 观察电机反馈数据,验证整个控制链路是否打通。