Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 使用rosserial与MX-64 DYNAMIXEL马达通信_Arduino_Ros - Fatal编程技术网

Arduino 使用rosserial与MX-64 DYNAMIXEL马达通信

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示例,它们都工作得很好,没有任何错误 奇怪的是,即使它给了我一个错误,程序仍然

当我尝试使用rosserial与Arduino通信以控制MX-64电机时,每次使用rostopic pub发送消息时,都会出现以下错误:

“数据包中的协议版本不匹配:丢失同步或rosserial_python与rosserial客户端来自不同的ros版本”

如果我删除
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&
是该硬件/软件序列