当我尝试使用rosserial与Arduino通信以控制MX-64电机时,每次使用rostopic pub发送消息时,都会出现此错误:
“数据包中的协议版本不匹配:同步丢失或rosserial_python来自与rosserial客户端不同的ros版本”
如果我删除了代码中的Dynamixel.move(X_SERVO_ID,rollint);
函数,或者没有通过ROS发送任何信息,则不会有错误。我尝试了所有玫瑰色的示例,它们都工作正常,没有任何错误。
奇怪的是,即使它给我一个错误,程序仍在工作。每当我发送一条消息时,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);
}
答案 0 :(得分:0)
您的Dynamixel伺服器似乎已连接到与rosserial服务器进行通信的同一串行端口。在像Uno这样的许多Arduino板中,硬件串行端口(连接Dynamixel的地方)都连接到USB串行转换器(通过USB连接ROS)。
您需要将Dynamixel连接到Arduino上的其他硬件(或software)串行,并使用Dynamixel.begin(Stream&)
(Dynamixel_Serial.h#L162)对其进行初始化,其中Stream&
是硬件/软件序列。