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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ROS环境下串口通信

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

1. 環(huán)境:

  • 操作系統(tǒng): Ubuntu 14.04
  • ROS版本: ROS Indigo

2. 步驟:

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

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

2.2 使用ros自帶的serial包,編寫節(jié)點(diǎn)

  • 節(jié)點(diǎn)程序如下:
#include <ros/ros.h> #include <serial/serial.h> //ROS已經(jīng)內(nèi)置了的串口包 #include <std_msgs/String.h> #include <std_msgs/Empty.h> serial::Serial ser; //聲明串口對(duì)象 //回調(diào)函數(shù) void write_callback(const std_msgs::String::ConstPtr& msg) { ROS_INFO_STREAM("Writing to serial port" <<msg->data); ser.write(msg->data); //發(fā)送串口數(shù)據(jù) } int main (int argc, char** argv) { //初始化節(jié)點(diǎn) ros::init(argc, argv, "serial_example_node"); //聲明節(jié)點(diǎn)句柄 ros::NodeHandle nh; //訂閱主題,并配置回調(diào)函數(shù) ros::Subscriber write_sub = nh.subscribe("write", 1000, write_callback); //發(fā)布主題 ros::Publisher read_pub = nh.advertise<std_msgs::String>("read", 1000); try { //設(shè)置串口屬性,并打開串口 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; } //檢測(cè)串口是否已經(jīng)打開,并給出提示信息 if(ser.isOpen()) { ROS_INFO_STREAM("Serial Port initialized"); } else { return -1; } //指定循環(huán)的頻率 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的信息,比如訂閱消息,并調(diào)用回調(diào)函數(shù) ros::spinOnce(); loop_rate.sleep(); } }

3. 遇到問(wèn)題

-如果出現(xiàn)如下錯(cuò)誤,則是因?yàn)闄?quán)限不夠引起的

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)

-通過(guò)改變權(quán)限就能解決這個(gè)問(wèn)題:

sudo chmod 666 /dev/ttyUSB0

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。