零差云控电机ubuntu+IGH调试记录

embedded/2024/9/18 23:09:22/ 标签: igh, ethercat
ighlight-color: rgba(0, 0, 0, 0);">

一、上位机

Twincat3安装:https://blog.csdn.net/LclLsh/article/details/122863502
Twincat3设置实时网卡:https://zhuanlan.zhihu.com/p/217715531
Twincat3设置独立cpu:https://blog.csdn.net/weixin_44555503/article/details/108711912

  • 零差云控的上位机包括两种形式,利用erob调试器(can2usb)的canopen协议进行调试和网线的ethercat协议进行调试。canopen就不说了,直接看手册就行。
  • ethercat就要麻烦一点了,需要用到倍福的Twincat软件进行调试,安装说明可以参考上面的链接,好像只能装在系统c盘中。安装之前需要确定自己网卡的类型,可以搜到一个twincat支持的网卡列表,只能支持部分的intel网卡。在安装完成后,有以下几个步骤:
    ①把零差云控的xml配置文件,放到Twincat文件夹下
    ②设置实时网卡
    ③restart twincat system,这时应该可以看到数据更新了
    ④配置参数,参考eRob CANopen and EtherCAT 用户手册第六章Twincat主站控制。注意这里一定要按照流程配置完成,尤其是控制量的映射关系和上下限制。如果用原来的参数会导致电机飞转,虽然会很快报错停住,但是如果是用在机械臂的大关节上,停住前可能已经碰到东西了。
    ⑤激活配置Active Configuration,这里可能会报错setting TwinCAT in RUN Mode with VMware running might fail,是没有设置独立cpu导致的。

二、单关节电机代码

ROS2_IGH方案bilibili:https://www.bilibili.com/video/BV15X4y1t7XY/
ROS2_IGH方案CSDN:https://blog.csdn.net/Primary_student/article/details/135156861

  • 整体的方案参考了上面大佬的做法,实时补丁+ros2+ros2_control+moveit2+igh,因为当时对moveit和ros2_control不熟悉,所以没有用上面方案中的ethercat_driver_ros2中间件。在学习了ros2_control后,重新写了硬件接口的代码。这部分代码参考的是下面这个链接。

IGH分享-让电机转起来:https://www.bilibili.com/video/BV1kP4y1Y7QK/?spm_id_from=333.788.recommend_more_video.2&vd_source=a686d8f8b0e9b94066f2d4ba714466e7

三、多关节电机代码

igh_19">1、igh命令行

资料:https://blog.csdn.net/u014077947/article/details/127489297

  • 这是一个很重要的点,除了启动master节点、查看从机状态,还有切换电机状态、向sod写数据、设置debug日志等功能

2、速度限制

  • 运行过程中,还有一个问题是电机运动快了以后会报错,一般错误原因是警告,如果查看一下警告的错误码,会发现是软速度报错,这是因为速度软误差限制太低导致的。
  • 这个限制可以修改0x3B61,利用命令行进行修改。但是修改完了以后发现重新上电后,这个寄存器会重新恢复原来的数值。这就涉及到手册里的另一个属性了,也就是Backup,也就是有一部分寄存器可以在断电后保存参数,要实现保存还要操作0x1010这个寄存器。

3、同步模式

  • 电机多了以后会出现电机初始化报错的情况,也就是SAFEOP向OP转换的时候,会出现SAFEOP+ERROR的情况。这个情况可以用命令行切换,但是很不方便,而且初始化失败,肯定是有什么问题。经过大佬的提示,最终发现这是同步问题导致的。
  • 这里就进入一个比较迷惑的情况了,零差给的手册中关于同步设置的寄存器0x1C32,存在问题。0a寄存器大小不对,表述不清。很多寄存器的默认值错误。
  • ethercat的同步模式有三种,freerun、SM、DC。默认情况是freerun的,之前单关节电机代码的写法,会把同步模式设置为SM同步管理器模式,但是这会导致出现上面说的问题。
  • 最终还是参考了ethercat_driver_ros2的写法,完成了DC模式的配置。要用到ecrt_slave_config_dc、ecrt_master_application_time、ecrt_master_sync_slave_clocks这几个函数,并且在循环中也要更新

http://www.ppmy.cn/embedded/104543.html

相关文章

编译器基础介绍

随着深度学习的不断发展,AI 模型结构在快速演化,底层计算硬件技术更是层出不穷,对于广大开发者来说不仅要考虑如何在复杂多变的场景下有效的将算力发挥出来,还要应对 AI 框架的持续迭代。AI 编译器就成了应对以上问题广受关注的技…

windows下安装docker操作步骤

因为最近dockerb被封,下载资源太不方便了,所以还是自己本地安装上docker吧 下载的地址一定不要找错,是这里 https://docs.docker.com/desktop/install/windows-install/ 电脑--“控制面板”--“程序与功能”--开启windows功能 “Hyper-V”…

【系统分析师】-缓存

目录 1、常见分类 2、集群切片方式 3、Redis 3.1、分布式存储方式 3.2、数据分片方式 3.3、数据类型 3.4、持久化方案 3.5、内存淘汰机制 3.6、Redis常见问题 4、布隆过滤器 1、常见分类 1、MemCache Memcache是一个高性能的分布式的内存对象缓存系统,用…

Kafka 到数据仓库:使用 bend-ingest-kafka 将消息加载到 Databend

将消息从 Apache Kafka 导入到像 Databend 这样的云数据仓库可能是一项艰巨的任务。bend-ingest-kafka 工具简化了这一过程,使您能够轻松地将 Kafka 消息导入到 Databend 表中。 什么是 bend-ingest-kafka? bend-ingest-kafka 工具是一个专门为从 Apac…

指针 C programming

”许久未曾提笔,心湖泛起涟漪。“ 概念:指针是一种将另一个变量的内存地址存储 为其值的变量。 int a 1; printf("%d", a); // 打印的是 变量a 的 存储地址 位置上 存储的 值 printf("%p", (void*)&a); // 打印的是 变量a 本身…

装过mr又卸载了,max报错 mrmateralattribs missing dlls

rendering>scene converter 打开对话框后,current preset 中选择 remove invalid legacy elements,取消open scene converter。。勾选 automaticaly remove missing。再点 convet scene

单品月GMV破4900W,2024防晒衣赛道在狂飙!

今年,防晒衣市场又火出新高度了? 市场竞争逐渐激烈,新产品新款式不断涌现,价格覆盖越来越广泛,消费者对防晒产品的需求也在不断升级。根据艾瑞咨询发布的数据显示,预计2026年我国防晒服配市场规模达到958亿…

算法设计:实验二贪心算法

【实验目的】 应用贪心算法求解活动安排问题。 【实验要求】 活动安排问题是可以用贪心算法有效求解的很好的例子。 问题:有n个活动的集合A{1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活…

vscode c++和cuda开发环境配置

文章目录 1. vscode 插件安装2. 开发环境配置2.1 bear 安装2.2 代码的编译2.2.1 编写Makefile文件2.2.2 bear make和make命令2.3 debug环境配置2.1 函数跳转设置2.1.1 ` c_cpp_properties.json` 设置2.1.2 settings.json设置2.2 调试环境配置2.2.1 tasks.json2.2.2 launch.json…

uniapp / uniapp x UI 组件库推荐大全

在 uniapp 开发中,我们大多数都会使用到第三方UI 组件库,提起 uniapp 的UI组件库,我们最常使用的应该就是uview了吧,但是随着日益增长的需求,uview 在某些情况下已经不在满足于我们的一些开发需求,尽管它目…

鸿蒙项目目录

AppScope > app.json5:应用的全局配置信息。 entry:HarmonyOS工程模块,编译构建生成一个HAP包。 src > main > ets:用于存放ArkTS源码。 src > main > ets > entryability:应用/服务的入口。 src &g…

【虚拟化】KVM常用命令操作(virsh磁盘管理)

目录 一、KVM概述 1.1 KVM工具栈 1.2 libvirt架构概述 1.3 KVM磁盘格式介绍 1.4 KVM磁盘操作常见语法 1.5 qemu-img命令简介 1.6 libguestfs安装 二、虚拟机磁盘管理 2.1 查看虚拟机磁盘 2.2 创建虚拟机磁盘 2.3 扩容磁盘容量 2.4 查看虚拟机存储状态 2.5 快照 2…

c-数据结构(栈和队列)

栈与队列 概念 栈:只能在固定的一端进行操作;“先进后出” 栈顶:可以进行插入删除的一端 栈底:栈顶的对端 入栈(压栈):将节点插入栈顶之上 出栈(弹栈):将…

Kafka消息积压的典型场景及解决方案

Kafka消息积压的典型场景: 1.实时/消费任务挂掉 比如,我们写的实时应用因为某种原因挂掉了,并且这个任务没有被监控程序监控发现通知相关负责人,负责人又没有写自动拉起任务的脚本进行重启。 那么在我们重新启动这个实时应用进行…

原来这就是 布隆过滤器

1.布隆过滤器的引出 一个有趣的现象 不知道大家有没有发现这么一个现象,当我们在使用一些软件的时候,比如像 CSDN、这种具有推荐算法的应用,他并不会给我们推送我们已经浏览过的内容,这是怎么做到的呢? 说白了就是人…

uniapp二维码生成

uniapp二维码生成 参考文档依赖引入代码html部分生成代码&#xff08;vue3 hook&#xff09;使用 参考文档 【博主&#xff1a;ChoneyLove】uniapp中生成二维码及解决微信小程序端问题总结 依赖引入 npm i uqrcodejs代码 html部分 <canvas type"2d" id"…

sqlite3 db.configure方法详解:设置项与默认值

在Node.js环境中&#xff0c;sqlite3库为开发者提供了一个与SQLite数据库进行交互的简洁API。除了基本的数据库操作外&#xff0c;sqlite3还允许开发者通过db.configure方法来配置数据库的一些底层参数和行为。本文将深入解析db.configure方法&#xff0c;包括其API函数定义、所…

vue点击事件

在Vue中&#xff0c;处理点击事件是一种常见且基本的需求&#xff0c;通常用于响应用户与UI元素的交互。Vue通过v-on指令&#xff08;或其简写形式&#xff09;来监听DOM事件&#xff0c;包括点击事件&#xff08;click&#xff09;。 使用v-on:click或click 当你想要在用户点…

http方法调用接口

调用post方法 public static String doPostWeChat(String accessToken, String url, String tradeCode) throws Exception {// 创建一个默认的 HTTP 客户端实例CloseableHttpClient client HttpClients.createDefault();CloseableHttpResponse response null; // 响应对象初…

【jQuery】前端八股文面试题

jQuery 这个问的没有那么多&#xff0c;暂时我被问到的就这几个。 大家可以直接订阅专栏。 文章目录 jQuery1. jQuery 常见的方法有哪几个&#xff1f;2.在 jQuery 中&#xff0c;常见使用委托的事件有哪些&#xff1f;1&#xff09;点击事件&#xff08;click&#xff09;2&…