首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROSSerial无法与ROS上的teensy设备同步

ROSSerial无法与ROS上的teensy设备同步
EN

Stack Overflow用户
提问于 2021-02-08 15:13:47
回答 1查看 1.1K关注 0票数 0

我在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.beginSerial.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,问题仍然存在。

然而,到目前为止,一切都不起作用。

EN

回答 1

Stack Overflow用户

发布于 2021-04-15 06:40:02

rosserial的默认波特率为56700。要更改它,您需要执行以下操作

修改arduino代码中的include语句

代码语言:javascript
复制
#include <ros.h>

代码语言:javascript
复制
#include "ros.h"

在..ino/..pde文件旁边添加以下头文件

ros.h

代码语言:javascript
复制
#ifndef _ROS_H_
#define _ROS_H_

#include "ros/node_handle.h"
#include "ArduinoHardware.h"

namespace ros
{
  typedef NodeHandle_<ArduinoHardware> NodeHandle;
}

#endif

ArduinoHardware.h

代码语言:javascript
复制
#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文件中,我们使用构造函数设置要使用的波特率,如下所示

代码语言:javascript
复制
ArduinoHardware()
    {
      iostream = &Serial;
      baud_ = 500000;
    }

当你在使用USB的时候,碘流将是Serial。如果您使用的是引脚而不是USB,它将因Serial1而异于Serial8,正如所提到的这里。通过将此处设置的baud_设置为500000,可以改变teensy的波特率。

此代码来自NodeHandle和ArduinoHardware的高级配置

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66104275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档