ROS環境下串列埠通訊
摘自:https://blog.csdn.net/hengheng_51/article/details/79760096
ROS環境下串列埠通訊
笑看零一 2018-03-31 13:53:37 8140 收藏 22
分類專欄: 機器人 ros學習 文章標籤: ROS 串列埠通訊
版權
1. 環境:
- 作業系統: Ubuntu 14.04
- ROS版本: ROS Indigo
2. 步驟:
2.1 下載安裝ROS對應版本的工具包(此處為indigo版)
- 輸入以下命令安裝:
sudo apt-get-install ros-indigo-serial
- 1
- 重啟終端,輸入以下命令可以檢測到serial包的路徑說明已經安裝好:(路徑為 opt/ros/indigo/share/serial)
roscd serial
- 1
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();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
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)
- 1
- 2
- 3
-通過改變許可權就能解決這個問題:
sudo chmod 666 /dev/ttyUSB0
相關文章
- ros中使用serial包實現串列埠通訊ROS串列埠
- 串列埠通訊串列埠
- Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠Linux串列埠
- 串列埠通訊 (轉)串列埠
- .NET Compact Framework下的串列埠通訊Framework串列埠
- linux 串列埠通訊Linux串列埠
- 串列埠通訊協議串列埠協議
- Android 串列埠通訊Android串列埠
- C# 串列埠通訊C#串列埠
- 11. 串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- (10)uart串列埠通訊串列埠
- 通過串列埠進行通訊 :串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- Arduino下的STM32的串列埠通訊UI串列埠
- 安卓串列埠通訊疑問安卓串列埠
- java串列埠通訊例項 -Java串列埠
- VC++ 串列埠通訊(轉)C++串列埠
- 串列埠無法正常通訊串列埠
- 樹莓派4B基於OpenCV的C++環境的串列埠通訊樹莓派OpenCVC++串列埠
- 詳解linux下的串列埠通訊開發Linux串列埠
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- Android藍芽串列埠通訊Android藍芽串列埠
- VC++ 的串列埠通訊 (轉)C++串列埠
- 小型plc串列埠通訊簡介串列埠
- ros系統下更新串列埠包失敗的問題ROS串列埠
- STM32串列埠通訊串列埠
- C#串列埠通訊遇到的坑C#串列埠
- android ndk 虛擬串列埠通訊Android串列埠
- C#串列埠通訊程式SerialPort類C#串列埠
- 用VB除錯串列埠通訊 (轉)除錯串列埠
- STMF4串列埠通訊使用串列埠
- 串列埠通訊與其他通訊方式相比有什麼優勢?串列埠
- ROS串列埠程式設計學習筆記ROS串列埠程式設計筆記
- VC++串列埠通訊程式設計詳解C++串列埠程式設計
- 在VB中利用API進行串列埠通訊API串列埠
- 打工筆記--------------------------c#實現串列埠通訊筆記C#串列埠