我在RASPI4上使用rosserial +RASPI4/Ubuntu20.04的teensy。teensy代码是用ros_lib on platformio (https://platformio.org/lib/show/5526/...)实现的。该程序编译良好,并在端口/dev/ttyACM0上成功上传。但是,当我执行rosrun rossserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=500000时,我会得到同步失败的错误。
错误:无法与设备同步;可能存在链接问题或链接软件版本不匹配,例如hydro rosserial_python和groovy。
我已经尝试过的事情:
( a)在Serial.begin(500000)中设置正确的波特率
( b)禁用所有Serial.begin和Serial.print语句
c)在nh.gethardware()->setbaud(500000)前设置ros节点nh.init()的波特率
d)在ros_lib typedef NodeHandle_<arduinohardware, 10,="" 10,="" 1024,="" 1024=""> NodeHandle;的ros.h中将默认缓冲区大小增加到1024
( e)尝试了Arduino板而不是Teensy,问题仍然存在。
然而,到目前为止,一切都不起作用。
发布于 2021-04-15 06:40:02
rosserial的默认波特率为56700。要更改它,您需要执行以下操作
修改arduino代码中的include语句
#include <ros.h>至
#include "ros.h"在..ino/..pde文件旁边添加以下头文件
ros.h
#ifndef _ROS_H_
#define _ROS_H_
#include "ros/node_handle.h"
#include "ArduinoHardware.h"
namespace ros
{
typedef NodeHandle_<ArduinoHardware> NodeHandle;
}
#endifArduinoHardware.h
#ifndef ROS_ARDUINO_HARDWARE_H_
#define ROS_ARDUINO_HARDWARE_H_
#if ARDUINO>=100
#include <Arduino.h>
#else
#include <WProgram.h>
#endif
#include <HardwareSerial.h>
#define SERIAL_CLASS HardwareSerial
class ArduinoHardware
{
public:
ArduinoHardware()
{
iostream = &Serial;
baud_ = 500000;
}
void setBaud(long baud)
{
this->baud_= baud;
}
int getBaud()
{
return baud_;
}
void init()
{
iostream->begin(baud_);
}
int read()
{
return iostream->read();
};
void write(uint8_t* data, int length)
{
for(int i=0; i<length; i++)
{
iostream->write(data[i]);
}
}
unsigned long time()
{
return millis();
}
protected:
SERIAL_CLASS* iostream;
long baud_;
};
#endif在上面定义的ArduinoHeader.h文件中,我们使用构造函数设置要使用的波特率,如下所示
ArduinoHardware()
{
iostream = &Serial;
baud_ = 500000;
}当你在使用USB的时候,碘流将是Serial。如果您使用的是引脚而不是USB,它将因Serial1而异于Serial8,正如所提到的这里。通过将此处设置的baud_设置为500000,可以改变teensy的波特率。
此代码来自NodeHandle和ArduinoHardware的高级配置
https://stackoverflow.com/questions/66104275
复制相似问题