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

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Robotics XM430-W350 云台电机使用记录 的相关文章

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

    XM430 W350 是加拿大 Trossen Robotics 公司生产的一种伺服舵机 公司给这种电机配套了自研的控制协议以及开发 SDK 例程 Dynamixel SDK xff0c 此处记录下基于ROS 的开发例程的使用方法 xff0
  • ROS Robotics By Example No transform from [left_wheel] to [base_link]

    1 问题描述 在第二章中搭建双轮机器人 lt xml version 61 34 1 0 34 gt lt robot name 61 34 dd robot 34 gt lt base link gt lt link name 61 34
  • Robotics Modelling, Planning and Control

    求一本电子书啊 Robotics Modelling Planning and Control 作者 xff1a Bruno Siciliano CSDN 有下载链接 xff0c 但是我没有 C 币和积分呐 xff0c 可咋整 xff0c
  • 2D平面上的二连杆机器臂反向运动模拟(matlab代码示例)

    2D平面上的二连杆机器臂反向运动模拟 matlab上先下载 robotics system toolbox工具箱 robot rigidBodyTree DataFormat column MaxNumBodies 3 L1 1 the l
  • Matlab - Solidworks 机器人建模(3)如何把URDF文件导入到Matlab

    文章目录 0 前言 1 URDF 转化成 rigidbody tree格式 2 URDF 导入到 simulink 有了urdf文件之后 在matlab里面可以有这两种导入选择 urdf 转化成 rigidbody tree urdf 转化
  • 横滚、俯仰、偏航计算

    如何计算与齐次变换矩阵相关的横滚角 俯仰角和偏航角 我目前正在使用以下公式 但我不确定它们是否正确 pitch atan2 r20 sqrt r21 r21 r22 r22 yaw atan2 r10 r00 roll atan2 r21
  • 螺纹接头不旋转

    机器人仿真包中的接触建模出现问题drake 我尝试对 iiwa 操纵器进行位置控制 以影响连接到螺纹接头的主体 我期望坚果会向下移动 我看到的是末端执行器围绕螺母滑动 无法引起螺母沿着螺栓旋转 注意 这是一项持续调查this问题 简化的实验
  • 【具身智能评估10】ThreeDWorld: A Platform for Interactive Multi-Modal Physical Simulation

    论文标题 ThreeDWorld A Platform for Interactive Multi Modal Physical Simulation 论文作者 Chuang Gan Jeremy Schwartz Seth Alter D
  • 【具身智能评估9】Open X-Embodiment: Robotic Learning Datasets and RT-X Models

    论文标题 Open X Embodiment Robotic Learning Datasets and RT X Models 论文作者 论文原文 https arxiv org abs 2310 08864 论文出处 论文被引 12 1
  • 螺纹接头不旋转

    机器人仿真包中的接触建模出现问题drake https github com RobotLocomotion drake 我尝试对 iiwa 操纵器进行位置控制 以影响连接到螺纹接头的主体 我期望坚果会向下移动 我看到的是末端执行器围绕螺母
  • 寻找机器人在房子里定位的方法

    我正在破解一个吸尘器机器人用微控制器 Arduino 控制它 我想要做到打扫房间时更有效率 目前 它只是直行并在碰到物体时转向 但我很难找到最佳算法或方法用于知道它在房间中的位置 我正在寻找一种既便宜 不到 100 美元 又不太复杂 不需要
  • 在 2D 图像中查找路径障碍物

    您建议使用什么方法来查找 2D 图像中的障碍物 到目前为止 我想到了一些关键点 我怀疑我是否可以使用基于 障碍物数据库 搜索的对象识别 因为我不知道障碍物是什么样子 我认为如果路径与对象本身没有太大差异 颜色识别可能会出现问题 也许 再添加
  • 集成陀螺仪和加速度计读数[重复]

    这个问题在这里已经有答案了 可能的重复 结合陀螺仪和加速度计数据 https stackoverflow com questions 1586658 combine gyroscope and accelerometer data 我读过很
  • 如何确定互补滤波器的参数alpha?

    我知道互补滤波器兼有LPF和HPF的功能 但我认为我对其背后原理的理解仍然不清楚 我对数字信号处理很陌生 也许一些非常基本的解释会有很大帮助 假设我有一个互补过滤器 如下所示 y a y 1 a x 然后我的参数a可以通过以下方式计算 a
  • 如何正确计算Delta机器人的直接运动学?

    我正在尝试为 Delta 机器人进行一个简单的模拟 并且我想使用正向运动学 直接运动学 通过传递 3 个角度来计算末端执行器在空间中的位置 我已经开始了Trossen 机器人论坛 Delta 机器人教程 http forums trosse
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 使用卡尔曼滤波器跟踪位置和速度

    我正在使用卡尔曼滤波器 恒定速度模型 来跟踪物体的位置和速度 我测量对象的 x y 并跟踪 x y vx vy 这是有效的 但是如果在传感器读数 x y vx vy 上添加 20 mm 的高斯噪声 即使该点没有移动 只是噪声也会发生波动 对
  • 机器人探索算法

    我正在尝试为机器人设计一种算法 试图找到位于未知位置的旗帜 该旗帜位于一个包含障碍物的世界中 机器人的任务是夺取旗帜并将其带到他的基地 代表他的起始位置 机器人在每一步只能看到有限的邻域 他事先不知道世界是什么样子 但他有无限的内存来存储已
  • OpenCV 地板分割检测

    我正在研究一种检测图像中地板的方法 我试图通过将图像缩小为颜色区域然后假设最大区域是地板来实现此目的 我们对机器人的运行环境做出一些相当广泛的假设 我正在寻找一些关于适合这个问题的算法的建议 任何帮助将不胜感激 编辑 具体来说 我正在寻找一
  • 带有 UiPath 的 Powershell

    我正在使用 UiPath 启动 PowerShell 脚本 我需要从 UiPath 传递一个参数 首先这可能吗 其次有人有这方面的例子吗 不确定 PowerShell 脚本中的语法是什么 是否可以将参数从 UiPath 传递到终端 您的 P

随机推荐