高度なROS - シリアル通信

環境:Ubuntu16.04 + ROSキネティック

ROSは、2つの方法でシリアル通信の基礎となります:

  1. ROS下のノードとして:https://blog.csdn.net/Kalenee/article/details/80644896
  2. 従来のシリアル通信のスタイル:https://blog.csdn.net/Kalenee/article/details/82422196

 

I.はじめに

次いで、ROS ROS標準通信フォーマットと髪、ビアメッセージ処理プラットフォームの完了のシリアルノードの調製は、シリアルポートを介してデータを配信します。

 

二、配置

1、シリアルポート機能パッケージ

sudo apt-get install ros-kinetic-serial

APIドキュメント:http://wjwwood.io/serial/doc/1.1.0/classserial_1_1_serial.html

2、シリアルインストールアシスタント

sudo apt-get install cutecom 

 

第三に、シリアルノードを書きます

#include <ros/ros.h>
#include <serial/serial.h>

//串口类
serial::Serial ser;

#define sBUFFERSIZE 1000 // send buffer size串口发送缓存长度
#define rBUFFERSIZE 1000 // receive buffer size 串口接收缓存长度
unsigned char s_buffer[sBUFFERSIZE]; //发送缓存
unsigned char r_buffer[rBUFFERSIZE]; //接收缓存

//下发数据函数
void data_redownload() 
{
  ser.write(s_buffer, sBUFFERSIZE);
}

int main(int argc, char **argv) {
  ros::init(argc, argv, "serial_node");
  ros::NodeHandle nh;

  //打开串口
  try {
    ser.setPort("/dev/ttyUSB0");
    ser.setBaudrate(115200);
    serial::Timeout to = serial::Timeout::simpleTimeout(1000);
    ser.setTimeout(to);
    ser.open();
  } catch (serial::IOException &e) {
    ROS_ERROR_STREAM("Unable to open port ");
    return -1;
  }

  if (ser.isOpen()) {
    ROS_INFO_STREAM("Serial Port initialized");
  } else {
    return -1;
  }

  // 10hz频率执行
  ros::Rate loop_rate(10);
  while (ros::ok()) {
    ros::spinOnce();
    if (ser.available()) {
      size_t bytes_read;
      bytes_read = ser.read(r_buffer, ser.available());
    //接收到数据后处理
    }
    loop_rate.sleep();
  }
}

 

第四に、テスト

図1は、デバイスがシリアル接続状態とチェックに接続されました

dmesg | grep ttyS*

問題は、接続権限の問題ができない場合2は、かどうかを通信するcutrcomアシスタントシリアルデバイスでシリアルポートをチェックし、システムのユーザー権限、USER_NAMEユーザー名を与えるために、次のコマンドを実行します。

sudo usermod -a -G dialout user_name

3、実行ノードが通信します

 

参照

http://stevenshi.me/2017/10/11/stm32-serial-port-ros/

公開された53元の記事 ウォンの賞賛186 ビュー180 000 +

おすすめ

転載: blog.csdn.net/Kalenee/article/details/82422196