日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS环境下串口通信

發布時間:2024/1/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS环境下串口通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 環境:

  • 操作系統: Ubuntu 14.04
  • ROS版本: ROS Indigo

2. 步驟:

2.1 下載安裝ROS對應版本的工具包(此處為indigo版)

  • 輸入以下命令安裝:
sudo apt-get-install ros-indigo-serial
  • 重啟終端,輸入以下命令可以檢測到serial包的路徑說明已經安裝好:(路徑為 opt/ros/indigo/share/serial)
roscd serial

2.2 使用ros自帶的serial包,編寫節點

  • 節點程序如下:
#include <ros/ros.h> #include <serial/serial.h> //ROS已經內置了的串口包 #include <std_msgs/String.h> #include <std_msgs/Empty.h> serial::Serial ser; //聲明串口對象 //回調函數 void write_callback(const std_msgs::String::ConstPtr& msg) { ROS_INFO_STREAM("Writing to serial port" <<msg->data); ser.write(msg->data); //發送串口數據 } int main (int argc, char** argv) { //初始化節點 ros::init(argc, argv, "serial_example_node"); //聲明節點句柄 ros::NodeHandle nh; //訂閱主題,并配置回調函數 ros::Subscriber write_sub = nh.subscribe("write", 1000, write_callback); //發布主題 ros::Publisher read_pub = nh.advertise<std_msgs::String>("read", 1000); 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; } //指定循環的頻率 ros::Rate loop_rate(50); while(ros::ok()) { if(ser.available()){ ROS_INFO_STREAM("Reading from serial port\n"); std_msgs::String result; result.data = ser.read(ser.available()); ROS_INFO_STREAM("Read: " << result.data); read_pub.publish(result); } //處理ROS的信息,比如訂閱消息,并調用回調函數 ros::spinOnce(); loop_rate.sleep(); } }

3. 遇到問題

-如果出現如下錯誤,則是因為權限不夠引起的

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'what(): open: Permission denied Aborted (core dumped)

-通過改變權限就能解決這個問題:

sudo chmod 666 /dev/ttyUSB0

總結

以上是生活随笔為你收集整理的ROS环境下串口通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。