Arduino 使用rosserial与MX-64 DYNAMIXEL马达通信
当我尝试使用rosserial与Arduino通信以控制MX-64电机时,每次使用rostopic pub发送消息时,都会出现以下错误: “数据包中的协议版本不匹配:丢失同步或rosserial_python与rosserial客户端来自不同的ros版本” 如果我删除Arduino 使用rosserial与MX-64 DYNAMIXEL马达通信,arduino,ros,Arduino,Ros,当我尝试使用rosserial与Arduino通信以控制MX-64电机时,每次使用rostopic pub发送消息时,都会出现以下错误: “数据包中的协议版本不匹配:丢失同步或rosserial_python与rosserial客户端来自不同的ros版本” 如果我删除Dynamixel.move(X_伺服_ID,rollint)在代码中起作用,或者不通过ROS发送任何信息,不会出现错误。我尝试了所有的rosserial示例,它们都工作得很好,没有任何错误 奇怪的是,即使它给了我一个错误,程序仍然
Dynamixel.move(X_伺服_ID,rollint)代码>在代码中起作用,或者不通过ROS发送任何信息,不会出现错误。我尝试了所有的rosserial示例,它们都工作得很好,没有任何错误
奇怪的是,即使它给了我一个错误,程序仍然在工作。每次我发送消息时,DYNAMIXEL马达都会开始移动
#if (ARDUINO >= 100)
#include <Arduino.h>
#else
#include <WProgram.h>
#endif
#include <ros.h>
#include <std_msgs/Int8.h>
ros::NodeHandle nh;
#include <Dynamixel_Serial.h> // Library needed to control Dynamixal servo
#include <sensor_msgs/Imu.h>
#define X_SERVO_ID 0x01 // ID which we will be set in Dynamixel too
int rollint = 0;
void motor_cb(const std_msgs::Int8& cmd_msg) {
rollint = ((1.00*(90-cmd_msg.data))/360)*4095;
Dynamixel.move(X_SERVO_ID,rollint);
}
ros::Subscriber<std_msgs::Int8> sub("MX_Motor", motor_cb);
void setup() {
delay(100); // Give time for Dynamixel to start on power-up
nh.initNode();
nh.subscribe(sub);
}
void loop(){
nh.spinOnce();
delay(1);
}
#如果(ARDUINO>=100)
#包括
#否则
#包括
#恩迪夫
#包括
#包括
新罕布什尔州诺德汉德尔;
#包括//控制Dynamicxal伺服所需的库
#包括
#定义X_伺服_ID 0x01//ID,我们也将在Dynamixel中设置它
int-rollint=0;
无效电机断路器(常数标准msgs::Int8和cmd msg){
rollint=((1.00*(90-cmd_msg.data))/360)*4095;
Dynamixel.move(X_伺服_ID,rollint);
}
ros::用户子系统(“MX_电机”,电机_cb);
无效设置(){
延迟(100);//给Dynamixel通电启动的时间
nh.initNode();
新罕布什尔州认购(sub);
}
void循环(){
nh.spinOnce();
延迟(1);
}
看起来您的Dynamixel伺服连接到了与rosserial服务器通信所用的同一个串行端口。在许多Arduino板(如Uno)中,硬件串行端口(连接Dynamixel的地方)连接到USB串行转换器(通过USB连接ROS)
您需要将Dynamixel连接到Arduino上的不同硬件(或)序列,并使用Dynamixel.begin(Stream&)
()对其进行初始化,其中Stream&
是该硬件/软件序列