# motion_ethercat_sim **Repository Path**: caixiaoliang/motion_ethercat_sim ## Basic Information - **Project Name**: motion_ethercat_sim - **Description**: 运动控制->ethercat->仿真软件(模拟真实电机动作) - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-03 - **Last Updated**: 2026-03-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RK3588 + IGH EtherCAT + PyBullet 仿真平台搭建指南 本工程实现了一个高度解耦的机器人开发环境:在 PC 端使用 **PyBullet** 进行物理仿真,并通过 **PySOEM** 模拟虚拟 EtherCAT 从站;在 **RK3588** 控制端运行真实的 **IGH EtherCAT 主站** 代码。两者通过网线直连,实现 1ms 级别的实时控制。 --- ## 一、 软件环境安装 在 PC 端(建议 Ubuntu 20.04+)运行以下命令安装必要依赖: ### 1. Python 依赖库 ```bash # 安装物理仿真引擎 pip install pybullet # 安装 EtherCAT 协议库 pip install pysoem # 升级 NumPy(确保 C-API 兼容性) pip install --upgrade numpy ``` ### 2. 编译环境 确保系统中已安装 `gcc` 和 `make`: ```bash sudo apt update sudo apt install build-essential ``` --- ## 二、 仿真平台搭建引导 ### 1. 网络硬件配置 (PC ↔ RK3588) 这是实现 EtherCAT 二层通信的关键步骤: - **物理连接**:使用普通网线将 RK3588 的专用 EtherCAT 网口与 PC 的网口直连(无需交换机/路由器)。 - **PC 网卡配置**:清空 PC 网卡的 IP 地址并禁用 IPv6,确保其仅作为二层透传网口。 ```bash # 假设 PC 网卡名为 ens33 (请根据 ifconfig 结果修改) sudo ifconfig ens33 0.0.0.0 up sudo sysctl -w net.ipv6.conf.ens33.disable_ipv6=1 ``` ### 2. PC 端:启动虚拟从站仿真 在 PC 端终端运行主仿真程序: ```bash cd motion_ethercat_sim # python3 biped_12dof_main.py sudo -E $(which python3) biped_12dof_main.py ``` *启动后,你将看到 PyBullet 的 3D 仿真窗口,并提示等待 RK3588 连接。* ### 3. RK3588 端:启动实机主站控制 在 RK3588 端编译并运行提供的 C 控制代码: ```bash # 编译(链接 IGH EtherCAT 库) gcc biped_ethercat_mit_imu.c -o biped_control -lethercat -lm -lpthread -lrt # 运行(必须使用 sudo 权限) sudo ./biped_control ``` --- ## 三、 核心配置说明 - **从站地址映射**: - 地址 1~12:12 台钛虎 MIT 虚拟电机 - 地址 13:虚拟 IMU 传感器 - **PDO 协议 (MIT 指令)**: - **Rx (Master->Slave)**: 20字节 (`q_ref`, `dq_ref`, `kp`, `kd`, `tau_ff`) - **Tx (Slave->Master)**: 12字节 (`q_real`, `dq_real`, `tau_real`) - **ESI 文件**:位于 `esi/tihu_mit.esi`,已针对 MIT 协议进行了 PDO 映射优化。 --- ## 四、 常见问题排查 | 问题 | 解决方案 | | :--- | :--- | | **IGH 扫描不到从站** | 检查网线是否直连;确认 PC 网卡已执行 `0.0.0.0` 配置且已启动 `biped_12dof_main.py` | | **仿真运行缓慢/卡顿** | 确保 PC 的 CPU 性能足够,且 `biped_12dof_main.py` 中的 `CONTROL_FREQ` 为 1000Hz | | **Python 报错 NumPy 冲突** | 运行 `pip install --upgrade numpy` 升级到最新版本 | --- ## 五、 关键技术修复说明 (RK3588 扫描成功要点) 在开发过程中,为了让 RK3588 的 IGH Master 能够成功识别并扫描到 13 个仿真从站(12电机 + 1 IMU),我们克服了以下核心底层协议挑战: ### 1. MAC 地址改写与二层透传 - **问题**:仿真端发送回包时,如果目标 MAC 错误或源 MAC 未正确绑定到物理网卡,IGH 主站驱动会丢弃该包。 - **修复**:在 [biped_12dof_main.py](file:///home/cmit/LinuxProject/motion_ethercat_sim/biped_12dof_main.py) 中,使用 `fcntl.ioctl` 获取物理网卡的真实 MAC 地址。在构造 EtherCAT 响应帧时,强制将 **Destination MAC** 设置为主站 MAC,将 **Source MAC** 设置为仿真网卡的真实物理地址,确保二层协议栈的合法性。 ### 2. EtherCAT 数据报头部 (Datagram Header) 修正 - **问题**:标准 EtherCAT 数据报头部为 **10 字节**(包含 2 字节的 Interrupt 字段),早期代码误认为 8 字节,导致数据偏移量全部错位。 - **修复**:更新了数据报解析逻辑,使用 `struct.unpack("