Robotics XM430-W350 云台电机使用记录

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 的舵机运动到指定的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地球被支点撬走啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值