XM430-W350 是加拿大 Trossen Robotics 公司生产的一种伺服舵机。公司给这种电机配套了自研的控制协议以及开发 SDK 例程 Dynamixel SDK,此处记录下基于ROS的开发例程的使用方法,主要目的是用来控制2自由度云台。

目录

1、XM430-W350 伺服舵机简介

2、基于 ROS 平台的控制方法

3、上位机 DYNAMIXEL Wizard 2.0 的使用


1、XM430-W350 伺服舵机简介

XM430-W350 伺服舵机的数据手册链接:XM430-W350-T/R

Dynamixel SDK 的介绍及使用方法链接:DYNAMIXEL SDK

Dynamixel SDK 的源码链接:https://github.com/ROBOTIS-GIT/DynamixelSDK

该伺服舵机的控制使用了公司自研的 DYNAMIXEL protocol 2.0 协议。Dynamixel SDK 支持 Linux、Windows、Mac 系统以及 arduino ,并支持基于 C++ / C / C# / python / java / matlab / LabVIEW 语言的开发以及基于 ROS 机器人框架(C++/python都有)的开发。

本文主要记录下基于ROS的开发例程的使用方法。

整体来说,这款电机的的控制方式是基于串口通信的协议。Dynamixel SDK 文件夹中有两个比较重要的底层配置文件夹,一个是实现串口初始化的配置文件以及 DYNAMIXEL 协议的实现文件。最终可以使用 DYNAMIXEL 协议通过串口向控制板读写命令的方式控制电机。

串口通信的初始化源码在 port_handler_[whichOS].cpp 文件中,whichOS 是具体使用的操作系统,比如如果是在 Linux 系统下做开发的话就是通过 port_handler_linux.cpp 文件来配置串口。DYNAMIXEL 协议的实现源码在 protocol2_packet_handler.cpp 中。该协议有两个版本,默认使用 2.0 的版本。Dynamixel SDK 文件夹中剩下的就是基于这两个底层配置使用各种开发语言或者平台实现对舵机控制的例程了。

2、基于 ROS 平台的控制方法

首先是创建 ROS 工作空间并初始化。这里简要记录下创建流程:

首先创建一个 ROS 工作空间文件夹,名字随意,并在该文件夹内创建 src 文件并进入:

mkdir dynamixel-test
cd dynamixel-test
mkdir src
cd src

使用 catkin_init_workspace 命令在 dynamixel-test/src 文件夹中初始化工作空间。然后回退到上一级目录,此时虽然没有创建 ROS 包我们仍然可以使用 catkin_make 命令对工作空间进行编译:

cd ..
catkin_make

cd 到 src 目录下下载 SDK,然后编译即可:

cd src
git clone https://github.com/ROBOTIS-GIT/DynamixelSDK.git
cd ..
catkin_make

可以使用 ls /dev/ttyUSB* 命令获取已插入的 USB 端口

***@**:~$ ls /dev/ttyUSB*
/dev/ttyUSB0

如果扫描出来的USB端口号不是0,则需要修改源码中的ROS节点中对应的串口端口号,然后再重新编译。

#define DEVICE_NAME           "/dev/ttyUSB0"  // [Linux] To find assigned port, use "$ ls /dev/ttyUSB*" command

需要修改的文件

  • bulk_read_write_node.cpp
  • indirect_address_node.cpp
  • read_write_node.cpp
  • sync_read_write_node.cpp

上述节点的运行方法在源码中都有示例,这里以 read_write_node 和 bulk_read_write_node 为例说明。

先测试 read_write_node 节点,这个节点一次只能控制一个舵机运动

rosrun dynamixel_sdk_examples bulk_read_write_node

============= BUG ============

刚开始可能会报错如下:

[PortHandlerLinux::SetupPort] Error opening serial port!
[ERROR] [1657712981.288514643]: Failed to open the port!

这是由于串口权限不足,使用以下命令赋予串口权限:

sudo chmod 666 /dev/ttyUSB0

然后再次运行上述的rosrun指令问题就解决了,不过上述的权限指令每次都得运行,后面再找下有没有可以永久设置的方法再来更新。

2022.07.19更新:可以固定端口号,顺便设置访问权限。

把Linux下外设的USB端口号映射到固定的名字_地球被支点撬走啦的博客-CSDN博客

============= BUG END ============

然后运行 rostopic 指令发布话题:

rostopic pub -l /set_position dynamixel_sdk_examples/SetPosition "{id: 1, position: 1000}"

接下来测试 bulk_read_write_node 节点,这个节点可以一次控制多个舵机运动:

rosrun dynamixel_sdk_examples bulk_read_write_node

然后在新的终端里输入 rostopic 指令发布话题:

rostopic pub -1 /bulk_set_item dynamixel_sdk_examples/BulkSetItem "{id1: 2, id2: 3, item1: 'position', item2: 'position', value1: 2300, value2: 2300}"

还可以订阅服务:

**@***:~$ rosservice call /bulk_get_item "{id1: 2, id2: 3, item1: 'position', item2: 'position'}"
value1: 2301
value2: 1803

item 选项可以是 position 或者 LED,还可以根据数据手册的 control table来拓展自己的功能。

3、上位机 DYNAMIXEL Wizard 2.0 的使用

刚买回来的舵机配置的波特率可能跟源码中的不一样,我这个就是,源码中的波特率是57000,而通过上位机搜索才知道舵机里的波特率配置的是1000000 (T_T),所以如果波特率不匹配的话他还汇报错如下:

Failed to enable torque for Dynamixel ID 1

可以再源码中找到这个报错信息的片段,可以发现就是通信的问题:

  dxl_comm_result = packetHandler->write1ByteTxRx(portHandler, DXL1_ID, ADDR_TORQUE_ENABLE, 1, &dxl_error);if (dxl_comm_result != COMM_SUCCESS) {ROS_ERROR("Failed to enable torque for Dynamixel ID %d", DXL1_ID);return -1;}

上位机下载地址:ROBOTIS

可以选择 Windows、Linux、Mac三种版本的下载

我这里是Windows版的为例:

打开软件之后可以现在软件的 Options 选项中选择一些参数,如果不知道的话就全选,然后选择 Scan 选项让上位机自己扫描搜索,但是可能耗时比较长,我就是从这里发现我的新舵机的初始波特率是 1000000 而不是源码中的 57000 的。

下面是一个使用的例子,目的是设置 ID 为 1 的舵机运动到指定的位置。

Robotics XM430-W350 云台电机使用记录相关推荐

  1. RM-6623云台电机使用心得

    1.如果一条总线两个云台ID一样,就会乱转,具体ID如下(和1234拨码开关数字对应) 2.例程CAN1可以控制四个电机 但是说明书里有八个 难道要改CAN的报文长度? 3.平面轴承质量会影响转动质量 ...

  2. PMSM电机学习记录--矢量控制之滞环电流控制(Bang-Bang控制)

    一.PMSM是比较流行的一种电机,它的综合性能优良,因此市场偏爱.但是它也有多变量.强耦合.模型复杂.不易控制等缺点,因此合理的控制方式对于PMSM研究来说至关重要. 矢量控制技术是借鉴直流电机电枢电 ...

  3. 华为Mate30与大疆手机云台3_更便捷更从容,大疆DJI OM 4手机云台使用体验

    不多不少,距离2019年的8月正好过去了一年.在去年8月,大疆为消费者带来了全新的手机云台--OSMO Mobile 3,其最大特点莫过于采用可折叠式的机身设计以及那仅为405g的云台重量,让手机云台 ...

  4. 电子稳定器云台的校准

    云台校准包括哪些 ·云台无刷电机的定位 ·云台霍尔传感器AB相最大最小值收集 ·云台陀螺仪的校准 电机定位 无刷电机为啥要做定位呢,了解电机驱动的都知道,电机是靠正弦波去驱动才能转的更顺滑,电机的机械 ...

  5. 基于二轴云台目标跟踪系统设计

    文章目录 前言 机器学习之前的目标检测研究 一.系统总览 上位机及其功能 下位机及其功能 二.基本方案设计 云台结构设计 机器视觉运算需求分析 三.目标识别算法与跟踪算法 运用HOG特征结合SVM的目 ...

  6. ODrive踩坑(二)3508电机和TLE5012B磁编码器参数配置、校准、位置闭环模式转动电机(TLE5012B-E1000)

    ODrive对无刷电机进行闭环控制,需要提前获取电机和编码器的参数. 电机极对数 电机需要配置的参数为 极对数.最大电流.校准电流.电机类型.其他参数如相电阻.电感等可由驱动器自动测量. 极对数 = ...

  7. 开源俄版三轴云台软硬件、调参软件调试可用,代码开源,入门说明

    本方案采用开源方案,云台嵌入式软件采用simpleBGC开源代码,并参考了网上"SimpleBGC32- 开源三轴无刷云台算法完全解说"修改而成,程序在STorM32 BGC V1 ...

  8. 无人机云台电机用的是哪种?

    无人机云台是无人机用于安装.固定摄像机等任务载荷的支撑设备.而无人机云台电机是利用压电材料输入电压会产生变形的特性,使其能产生超声波频率的机械振动,再透过摩擦驱动的机构设计,让云台电机如同电磁马达一般 ...

  9. 【问答】Q群问关于机器人关节电机选择

    Q1:如何选择合适的无刷电机,怎样计算无刷电机的静态转矩? A:最好仿真验证.如果直驱动,Tmotor u8,其他不推荐了 . A:电流力矩系数 * 额定电流 = 电机静扭 Q2:电流力矩系数是什么? ...

最新文章

  1. mysql隐藏密码_MySQL在Linux系统中隐藏命令行中的密码的方法
  2. 手把手教你实现SVM算法(二)
  3. Python 3基础教程15-读文件内容
  4. mysql如何管理空间_管理空间的mysql数据库
  5. java编程二十_Java语言程序设计(二十)编程练习
  6. cocos creator粒子不变色_隐秘的物理粒子系统与渲染 !Cocos Creator LiquidFun !
  7. Java switch的使用细节和使用注意
  8. There is no Action mapped for namespace / and action name accredit.
  9. WIndow Document
  10. 让你人见人爱的27个原则
  11. 从数据库中导出数据库文档
  12. python 正则表达式集合-抄的
  13. [转载]表的设计命名的十个注意点
  14. 【Caffe安装】Caffe安装(有GPU)--wanglei
  15. 判断粗大误差的matlab程序,粗大误差处理程序
  16. Chango的数学Shader世界(十八)RayTrace三维分形(三)—— 完善,距离场软阴影
  17. autojs写的全网视频解析app,带解析接口。
  18. 微信哪个电话能转人工服务器,微信人工客服电话多少?微信客服怎么打转人工(这份教程收好了)...
  19. excel的主要功能_免费的Excel共享编辑办公软件,表格权限-套打模板样样有,附下载...
  20. CSR867x 之充电配置开发

热门文章

  1. Android 11 中访问 Android/data 目录的几种方式
  2. 计算机网络组成原理实验,计算机组成原理实验教程
  3. 4.1 理解层叠分类器的检测原理
  4. CC2640之OAD固件升级(外置Flash)
  5. vscode保存或者格式化文档时自动转为符合eslint的格式配置
  6. 24.Vue路由管理器:Router(进阶篇)
  7. 桌面版 ChatGPT 来了!
  8. Response to the reviews
  9. 某计算机系的小周,某大学计算机系的小周现在是大二的学生,现在回想起自己在大一时大手大脚花钱还是 - 问答库...
  10. plt.savefig保存图片一片空白或者显示内容不完整、错乱