Dynamixel舵机MX使用案例

ss这几天翻箱底,找到了这么个舵机

国内见的不多,官网:https://dynamixel.com/

不过入门还挺简单,先准备arduino和dynamixel sheild

然后下载打开arduino编辑器,安装DynamixelShield依赖包

查询一下自己舵机的id和波特率,如果不知道的话,就安装这个scan一下:

帮大家下好了链接:https://pan.baidu.com/s/1EStB-g97ZWgBKGNRX0fyJQ 
提取码:B206 
--来自百度网盘超级会员V6的分享

就可以试试咯~

切记修改舵机的id和波特率

角度设置:

/*******************************************************************************
* 版权所有 2016 ROBOTIS CO., LTD.
*
* 根据 Apache 许可证,版本 2.0 进行许可;
* 除非符合许可证的规定,否则您不得使用此文件。
* 您可以在以下网址获得许可证副本:
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* 除非适用法律要求或书面同意,否则软件
* 按“原样”提供,不提供任何形式的保证或条件,
* 包括但不限于适销性保证、适用于特定用途的保证或
* 不侵权。详见许可证。
*******************************************************************************/

#include <DynamixelShield.h>

#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_MEGA2560)
  #include <SoftwareSerial.h>
  SoftwareSerial soft_serial(7, 8); // DYNAMIXELShield UART RX/TX
  #define DEBUG_SERIAL soft_serial
#elif defined(ARDUINO_SAM_DUE) || defined(ARDUINO_SAM_ZERO)
  #define DEBUG_SERIAL SerialUSB    
#else
  #define DEBUG_SERIAL Serial
#endif

const uint8_t DXL_ID = 1; // 设置舵机的ID
const float DXL_PROTOCOL_VERSION = 2.0; // 设置舵机通信协议版本

DynamixelShield dxl; // 创建DynamixelShield对象

//This namespace is required to use Control table item names
using namespace ControlTableItem;

void setup() {
  // 初始化串口通信,设置波特率为115200
  DEBUG_SERIAL.begin(115200);

  // 设置串口波特率为57600bps。必须与DYNAMIXEL舵机的波特率相匹配。
  dxl.begin(57600);

  // 设置端口协议版本。必须与DYNAMIXEL协议版本相匹配。
  dxl.setPortProtocolVersion(DXL_PROTOCOL_VERSION);

  // 获取DYNAMIXEL信息(通过ping命令检查舵机是否连接)
  dxl.ping(DXL_ID);

  // 在配置EEPROM区域的项目时关闭扭力
  dxl.torqueOff(DXL_ID);

  // 将舵机工作模式设置为位置模式
  dxl.setOperatingMode(DXL_ID, OP_POSITION);

  // 打开舵机扭力
  dxl.torqueOn(DXL_ID);
}

void loop() {
  // 设置舵机到原始值512的位置
  dxl.setGoalPosition(DXL_ID, 512);
  // 延迟1秒
  delay(1000);
  
  // 打印舵机当前位置(原始值)
  DEBUG_SERIAL.print("Present Position(raw) : ");
  DEBUG_SERIAL.println(dxl.getPresentPosition(DXL_ID));
  // 延迟1秒
  delay(1000);

  // 设置舵机到5.7度的位置
  dxl.setGoalPosition(DXL_ID, 5.7, UNIT_DEGREE);
  // 延迟1秒
  delay(1000);
  
  // 打印舵机当前位置(角度值)
  DEBUG_SERIAL.print("Present Position(degree) : ");
  DEBUG_SERIAL.println(dxl.getPresentPosition(DXL_ID, UNIT_DEGREE));
  // 延迟1秒
  delay(1000);
}

速度设置

/*******************************************************************************
* 版权所有 2016 ROBOTIS CO., LTD.
*
* 根据 Apache 许可证,版本 2.0 进行许可;
* 除非符合许可证的规定,否则您不得使用此文件。
* 您可以在以下网址获得许可证副本:
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* 除非适用法律要求或书面同意,否则软件
* 按“原样”提供,不提供任何形式的保证或条件,
* 包括但不限于适销性保证、适用于特定用途的保证或
* 不侵权。详见许可证。
*******************************************************************************/

#include <DynamixelShield.h> // 包含DynamixelShield库

#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_MEGA2560)
  #include <SoftwareSerial.h> // 如果是 Uno、Nano、Mini 或 Mega,则包含 SoftwareSerial 库
  SoftwareSerial soft_serial(7, 8); // 创建软串口对象,将其连接到 DYNAMIXELShield 的 UART RX/TX 引脚
  #define DEBUG_SERIAL soft_serial // 将软串口设置为 DEBUG_SERIAL
#elif defined(ARDUINO_SAM_DUE) || defined(ARDUINO_SAM_ZERO)
  #define DEBUG_SERIAL SerialUSB // 如果是 Due 或 Zero,则将 USB 串口设置为 DEBUG_SERIAL
#else
  #define DEBUG_SERIAL Serial // 否则将硬串口设置为 DEBUG_SERIAL
#endif

const uint8_t DXL_ID = 6; // 定义舵机的ID
const float DXL_PROTOCOL_VERSION = 1.0; // 定义舵机通信协议版本

DynamixelShield dxl; // 创建 DynamixelShield 对象

// 使用 ControlTableItem 命名空间来使用控制表项名称
using namespace ControlTableItem;

void setup() {
  // 初始化串口通信,设置波特率为115200
  DEBUG_SERIAL.begin(115200);
  
  // 设置串口波特率为1000000bps。必须与 DYNAMIXEL 舵机的波特率相匹配。
  dxl.begin(1000000);
  
  // 设置端口协议版本。必须与 DYNAMIXEL 协议版本相匹配。
  dxl.setPortProtocolVersion(DXL_PROTOCOL_VERSION);
  
  // 获取 DYNAMIXEL 信息(通过 ping 命令检查舵机是否连接)
  dxl.ping(DXL_ID);

  // 在配置 EEPROM 区域的项目时关闭扭力
  dxl.torqueOff(DXL_ID);
  
  // 将舵机工作模式设置为速度模式
  dxl.setOperatingMode(DXL_ID, OP_VELOCITY);
  
  // 打开舵机扭力
  dxl.torqueOn(DXL_ID);
}

void loop() {
  // 设置舵机目标速度为200(原始单位)
  dxl.setGoalVelocity(DXL_ID, 200);
  // 延迟1秒
  delay(1000);
  
  // 打印舵机当前速度(原始单位)
  DEBUG_SERIAL.print("Present Velocity(raw) : ");
  DEBUG_SERIAL.println(dxl.getPresentVelocity(DXL_ID));
  // 延迟1秒
  delay(1000);

  // 设置舵机目标速度为25.8 RPM
  dxl.setGoalVelocity(DXL_ID, 25.8, UNIT_RPM);
  // 延迟1秒
  delay(1000);
  
  // 打印舵机当前速度(RPM单位)
  DEBUG_SERIAL.print("Present Velocity(rpm) : ");
  DEBUG_SERIAL.println(dxl.getPresentVelocity(DXL_ID, UNIT_RPM));
  // 延迟1秒
  delay(1000);

  // 设置舵机目标速度为百分比 -10.2%
  dxl.setGoalVelocity(DXL_ID, -10.2, UNIT_PERCENT);
  // 延迟1秒
  delay(1000);
  
  // 打印舵机当前速度(百分比单位)
  DEBUG_SERIAL.print("Present Velocity(ratio) : ");
  DEBUG_SERIAL.println(dxl.getPresentVelocity(DXL_ID, UNIT_PERCENT));
  // 延迟1秒
  delay(1000);
}

### Dynamixel 舵机使用教程 #### 了解DYNAMIXEL XM430-W350伺服舵机 XM430-W350是一款高性能的智能型舵机,具有高扭矩、低功耗以及丰富的功能特性。该款舵机支持多种通信协议,并内置有温度传感器、电流检测等功能模块,适用于各种机器人应用场景[^2]。 #### 上位机软件-DYNAMIXEL Wizard 2.0 的操作指南 为了方便用户配置和调试DYNAMIXEL系列电机参数,官方提供了图形界面工具—DYNAMIXEL Wizard 2.0。通过此程序可以轻松完成ID设置、波特率调整等基本初始化工作;同时还能实时监控设备状态并记录数据变化情况,极大地方便了开发人员的工作流程。 #### ROS环境下的简单实例展示 对于希望利用Robot Operating System(ROS)框架来实现更复杂任务逻辑的人来说,在Linux系统下安装好必要的依赖包之后,可以通过如下命令启动核心节点和服务端口监听服务: ```bash roscore ``` 接着执行Python脚本文件`read_write_node.py`来进行读写测试实验: ```bash rosrun dynamixel_sdk_examples read_write_node.py ``` 上述过程能够帮助开发者熟悉如何基于SDK接口函数编写自定义应用程序,从而更好地发挥出硬件产品的性能优势[^3]。 #### Dynamixel SDK库的应用说明 由ROBOTIS公司维护开源项目Dynamixel SDK为不同平台上的用户提供了一套统一的操作API集合,涵盖了C/C++、C#、Java等多种编程语言的支持选项。借助这些现成资源,工程师们可以根据实际需求快速搭建起稳定可靠的控制系统架构[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值