環境:Ubuntu16.04 + ROSキネティック
ROSは、2つの方法でシリアル通信の基礎となります:
- ROS下のノードとして:https://blog.csdn.net/Kalenee/article/details/80644896
- 従来のシリアル通信のスタイル: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、実行ノードが通信します
参照