2024.4.3 controller+soem双进程调试

本文详细介绍了关节减速器的减速比、编码器位数对运动控制的影响,以及使用solidworks建立运动学模型的过程。着重讨论了安全调试流程,包括官方示教器回零、SOEM主站控制、CST模式下的正弦轨迹跟踪和六轴同步远程控制的实现方法。

1. 需要数据:

  1. 各关节减速器减速比(符号与关节方向电机方向相关)
  2. 编码器位数17位131072、20位1048576,23位8388608(与关节转角换算到电机端脉冲值有关)
  3. DH参数(主要是连杆长度,建立名义运动学模型)
  4. solidworks三维模型用于导出urdf文件及显示虚拟模型运动仿真

补充:

  1. 机器人各关节电机编码器零位脉冲值,先使用示教器回零位,然后改线,用soem上电后读回,或有手册参考

2. 安全调试流程:

  1. 官方示教器回零位(会有几到上千脉冲的跟踪定位误差)
  2. soem主站单独连接控制第六轴从站,motorcontrol 中,CST模式零力矩输出可拖动,读回编码器值并记录,SLAVE_NUM=1需修改
  3. 第六轴CSP模式保持读回的编码器原位置
  4. 基于上电位置进行正弦轨迹跟踪(正弦周期及幅值可调,驱动器速度约束可以适当降低,不能比轨迹速度更低)
  5. 依次调试654321各轴,均为motor_control控制,通过单独连线(高创单轴)或者六合一驱动器的单独软复位(清能德创)
  6. 同时多轴调试 SLAVE_NUM=6,六轴正弦小幅度运动测试
  7. controller 修改urdf模型路径,修改相关数据,进行运动的仿真测试
  8. 定义 IDDP_ENABLE,主站不使能,只测试读回编码器读数,通过减速比换算到关节角度后显示到仿真中进行判断流程是否计算正确
  9. 只控制第六轴SLAVE_NUM=1,通过controller进程通信发送控制指令进行远程控制
  10. 六轴同步远程控制,

补充

  1. 驱动器STO需要外接手控急停开关
  2. soem开始单轴依次调试时单轴软复位
  3. 清能德创驱动器需要Windows系统下的driverstarter 软件进行软复位,需要usb-485/422的线(淘宝官方店)
<think>我们正在讨论AUTD3Sharp中的Link.SOEM。根据用户的问题,他想要了解Link.SOEM的功能介绍以及使用方法。 由于AUTD3是一个用于控制声场的设备,而SOEM(Simple Open EtherCAT Master)是一个开源的EtherCAT主站库。 因此,Link.SOEM应该是用于通过EtherCAT协议连接AUTD设备的一种链路实现。 功能上,Link.SOEM应该提供以下能力: 1. 通过EtherCAT协议与AUTD设备通信。 2. 实时控制多个AUTD设备(通常以菊链方式连接)。 3. 支持SOEM库提供的实时性能。 使用方法方面,我们需要在代码中创建Link.SOEM的实例,并将其传递给Controller的Open方法。 以下是一个基本的使用步骤: 1. 创建一个Controller实例,并添加AUTD设备(通过几何结构描述)。 2. 创建一个Link.SOEM实例,配置必要的参数(如网络接口名、同步模式等)。 3. 使用创建的Link打开控制器。 注意:SOEM需要实时性能,因此可能需要设置线程优先级或使用实时操作系统(RTOS)以获得最佳性能。 由于AUTD3Sharp的具体API可能会更新,以下代码示例基于常见的用法模式: ```csharp using AUTD3Sharp; using AUTD3Sharp.Link; // 创建Controller var autd = new Controller(); // 添加设备,这里假设有两个设备,每个设备的空间位置关系 autd.Geometry.AddDevice(new Vector3(0, 0, 0), new Vector3(0, 0, 0)); // 第一个设备的位置和旋转 autd.Geometry.AddDevice(new Vector3(0, 0, 0), new Vector3(0, 0, 0)); // 第二个设备的位置和旋转 // 创建SOEM Link // 使用SOEM连接,指定网络接口(如"eth0"),如果设置高精度模式,则使用true(需要支持) var link = new SOEM().WithInterface("eth0").WithHighPrecision(true); // 打开控制器 autd.Open(link); // 然后进行正常的操作,如发送数据等 ``` 注意:在实际使用中,可能需要处理SOEM链路的状态和错误。 另外,SOEM链路支持同步周期设置、错误处理回调等高级配置。 由于EtherCAT通信对实时性要求很高,因此在使用SOEM时,建议在实时操作系统下运行,并确保网络适配器支持实时通信。 此外,AUTD3Sharp的Link.SOEM可能还提供了一些其他配置方法,例如设置超时时间、同步周期等。 如果用户需要更复杂的功能,可以参考官方文档或示例。 生成相关问题: 1. 使用Link.SOEM时如何选择网络接口? 2. 如何配置SOEM链路的同步周期和超时? 3. Link.SOEM在非实时系统下的性能如何? 4. 如何处理SOEM链路中的错误? 5. 有没有使用SOEM时优化性能的建议? </think>### AUTD3Sharp中Link.SOEM的介绍及使用方法 #### 一、Link.SOEM功能概述 Link.SOEM是AUTD3Sharp库中基于**SOEM(Simple Open EtherCAT Master)** 协议的通信链路实现,主要用于通过**EtherCAT工业总线**连接和控制AUTD3声场生成设备。其核心功能包括: 1. **实时通信**:实现µs级精度的硬件同步控制[^1] 2. **多设备支持**:支持菊链式连接最多255台AUTD3设备 3. **热插拔支持**:运行时动态检测设备连接状态 4. **硬件同步**:通过分布式时钟(DC)实现纳秒级相位同步 5. **错误恢复**:自动处理网络抖动和从站状态异常 #### 二、基本使用方法 ```csharp using AUTD3Sharp; using AUTD3Sharp.Link; // 创建SOEM链路实例 var link = new SOEM() .WithIfname("eth0") // 指定网卡接口 .WithHighPrecision(true) // 启用高精度模式 .WithTimeout(TimeSpan.FromSeconds(1)); // 设置超时时间 // 初始化控制器 using var autd = new ControllerBuilder() .AddDevice(new AUTD3(Vector3.Zero)) // 添加设备 .OpenWith(link); // 建立SOEM连接 // 发送控制指令 autd.Send(new Sine(150)); // 示例:发送150Hz正弦波 ``` #### 三、关键参数配置 | 方法 | 功能 | 默认值 | |------|------|--------| | `.WithIfname()` | 指定网卡接口 | "eth0" | | `.WithBufSize()` | 设置通信缓冲区大小 | 32 | | `.WithSendCycle()` | 设置发送周期(µs) | 2000 | | `.WithSync0Cycle()` | 同步周期设置 | 2 | | `.WithHighPrecision()` | 高精度时间戳模式 | false | #### 四、错误处理 建议实现状态监听: ```csharp link.OnLost = (msg) => { Console.Error.WriteLine($"设备丢失: {msg}"); // 自动重连逻辑 link.Reopen(); }; ``` #### 五、使用注意事项 1. 需安装**SOEM 1.42+** 原生库 2. Windows需禁用网卡的**流控制**(Flow Control) 3. Linux需配置**实时内核**(如PREEMPT_RT) 4. 避免与标准TCP/IP流量共用物理网卡 5. 推荐使用**Intel I210**等工业级网卡 > 典型应用场景:多换能器阵列的相位同步控制、声镊系统、超声波悬浮实验[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值