Rosserial Arduino Library配置消息緩衝區和串口波特率


Rosserial Arduino Library配置消息緩衝區和串口波特率

前言

官方
http://wiki.ros.org/rosserial
主要看
2 Limitations
2.1Maximum Size of a Message, Maximum Number of Publishers/Subscribers
...
AVR Model | Input/Output buffer sizes | Publishers/Subscribers

ATMEGA168 | 150/150 bytes | 6/6
ATMEGA328P | 280/280 bytes | 25/25
All others | 512/512 bytes | 25/25
————————————————
You can change these numbers and sizes, refer to tutorial NodeHandle and ArduinoHardware for more informaiton.
教程鏈接

http://wiki.ros.org/rosserial_arduino/Tutorials/NodeHandle%20and%20ArduinoHardware
Advanced Configuration for NodeHandle and ArduinoHardware.

教程一開始這樣寫
The rosserial_arduino package is designed to work out-of-box for many users, but users might need to change the ros.h and the ArduinoHardware.h to better suit their need.
簡譯:rosserial_arduino包是爲廣大用戶設計的開箱即用的,但用戶可能要更改ros.h和ArduinoHardware.h以更好地滿足他們的需求。

。。

調整消息緩衝區大小的配置

本文有兩種方法

第一種方法操作基本延續官方的方法,複製,不直接更改庫代碼,避免影響其他項目使用庫。
可兼容多鍾硬件;
複製庫的ros.h,到當前項目目錄。改個名字如zr_ros.h,修改一下內容

//改改頭
#ifndef _ZR_ROS_H_
#define _ZR_ROS_H_

#if defined(ESP8266) or defined(ESP32) or defined(ROSSERIAL_ARDUINO_TCP)
  #include "ArduinoTcpHardware.h"
#else
  #include "ArduinoHardware.h"
#endif
//改變引用順序,這句放開頭編譯報錯
#include "ros/node_handle.h"
//下面根據多個硬件進行配置
namespace ros
{
#if defined(__AVR_ATmega8__) or defined(__AVR_ATmega168__)
  /* downsize our buffers */
  typedef NodeHandle_<ArduinoHardware, 6, 6, 150, 150> NodeHandle;
#elif defined(__AVR_ATmega328P__)
  //typedef NodeHandle_<ArduinoHardware, 25, 25, 280, 280> NodeHandle;
  typedef NodeHandle_<ArduinoHardware, 5, 5, 180, 180> NodeHandle;//做修改節省內存佔用
#elif defined(SPARK)
  typedef NodeHandle_<ArduinoHardware, 10, 10, 2048, 2048> NodeHandle;
#else
  typedef NodeHandle_<ArduinoHardware> NodeHandle; // default 25, 25, 512, 512
#endif
}
#endif

註釋掉庫文件ros.h的引用,使用新的zr_ros.h

//#include <ros.h>
#include "zr_ros.h"

另一種方法更簡單,都不用複製和創建文件了,只多3行代碼
如果針對一種硬件,如328p,可以在當前的sketch寫這麼幾行,也可以從ros.h代碼裏copy幾行代碼修改

//引用庫.h文件,尖括號
#include <ArduinoHardware.h>
#include <ros/node_handle.h>
//修改接收、發送的數量和他們緩衝區的大小
namespace ros{    typedef NodeHandle_<ArduinoHardware, 5, 5, 180, 180> NodeHandle;}

串口波特率更改

使用ros庫串口通信默認波特率57600 
涉及到波特率的更改,這裏給出跟官方不一樣的方法僅供參考。(官方不這樣也可能是舊版本不支持)

大概看了看現在庫的源碼,其實ros庫有設置接口,可以這樣

  //更改默認波特率
  ArduinoHardware* hw=nh.getHardware();
  hw->setBaud(115200);
  //在執行initNode時自動初始化串口。
  nh.initNode();


直接看硬件通信是哪個串口,使用 Serial.begin(115200)好不好?

nh.initNode()執行時也調用一次Serial.begin,也應該在initNode之後更改。這樣調用兩次Serial.begin。

  nh.initNode();
  Serial.begin(115200);

 

相關


ROS學習筆記66《NodeHandle和ArduinoHardware的高級配置》
https://blog.csdn.net/qq_27806947/article/details/83684370
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章