国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

ros與下位機通信常用的c++ boost串口通信

2019-11-06 10:03:23
字體:
來源:轉載
供稿:網友

(運行串之前請先安裝串口驅動minicom)

一.首先移植c++ boost 庫:

1. 先去 Boost官網 下載最新的Boost版本, 我下載的是boost_1_63_0版本, 解壓.

2. 進入解壓后目錄: cd boost_1_63_0, 執行下面的命令:

$ ./bootstrap.sh --PRefix=path/to/installation/prefix

prefix 的值是你希望安裝boost的路徑, 不開啟此參數的話默認安裝在 /usr/local 下. 我安裝在 /home/hl/boost_1_63_0 目錄下:

$ ./bootstrap.sh --prefix=/home/hl/boost_1_63_0

Note: 家目錄不要用 ~ 表示, 編譯腳本不識別 ~, 會在當前目前新建一個名為 '~' 的目錄.

接著執行:

$ ./b2 install

這條命令把boost的頭文件文件夾 include/ 安裝在prefix定義的目錄中, 并且會編譯所有的boost模塊, 并將編譯好的庫文件夾 lib/ 也放在prefix定義的目錄中. 所有如果成功編譯的的話, prefix目錄即 /home/hl/boost_1_63_0目錄應當包含有 include/ 和 lib/ 兩個文件夾.

3. 測試,在你得ros工作空間的任意功能包中src/目錄下,創建boost_bode.cpp文件,內容如下:

先測試只依賴頭文件的功能模塊:

ASIO不僅支持網絡通信,還能支持串口通信。要讓兩個設備使用串口通信,關鍵是要設置好正確的參數,這些參數是:波特率、奇偶校驗 位、停止位、字符大小和流量控制。兩個串口設備只有設置了相同的參數才能互相交談。

ASIO提供了boost::asio::serial_port類,它有一個set_option(const SettableSerialPortOption& option)方法就是用于設置上面列舉的這些參數的,其中的option可以是:

serial_port::baud_rate 波特率,構造參數為unsigned intserial_port::parity 奇偶校驗,構造參數為serial_port::parity::type,enum類型,可以是none, odd, even。serial_port::flow_control 流量控制,構造參數為serial_port::flow_control::type,enum類型,可以是none software hardwareserial_port::stop_bits 停止位,構造參數為serial_port::stop_bits::type,enum類型,可以是one onepointfive twoserial_port::character_size 字符大小,構造參數為unsigned int復制代碼
#include <iostream>#include <boost/asio.hpp>#include <boost/bind.hpp>#include <ros/ros.h>using namespace std;using namespace boost::asio;int main(int argc, char* argv[]){          io_service iosev;//節點文件serial_port sp(iosev, "/dev/ttyUSB0");// 設置參數sp.set_option(serial_port::baud_rate(115200));sp.set_option(serial_port::flow_control(serial_port::flow_control::none));sp.set_option(serial_port::parity(serial_port::parity::none));sp.set_option(serial_port::stop_bits(serial_port::stop_bits::one));sp.set_option(serial_port::character_size(8));// 向串口寫數據write(sp, buffer("Hello world", 12));// 向串口讀數據char buf[1];read(sp, buffer(buf));printf("buf[0]= %c/n",buf[0]);iosev.run();return 0;}復制代碼

添加編譯選項:在你得功能包中的CMakeLists.txt 文件中添加:

add_executable(boost_node src/boost_node.cpp)target_link_libraries(boost_node ${catkin_LIBRARIES}

編譯boost測試程序:在你的工作空間的頂層目錄下

catkin_make如果編譯不通過的話應該是CmakeList沒有加入boost的庫,需要在CMakeLists.txt 文件中添加:set(Boost_INCLUDE_DIR /home/hl/boost_1_63_0/include)set(Boost_LIBRARY_DIR /home/hl/boost_1_63_0/lib)find_package(Boost REQUIRED COMPONENTS system)include_directories(${Boost_INCLUDE_DIR})link_directories(${Boost_LIBRARY_DIR})若運行不成功,報錯:

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 deniedAborted (core dumped)好像是權限不夠

使用root用戶或sudo chmod 666 /dev/ttyUSB0或者

              sudo chmod a+rw /dev/ttyUSB0

將你的電通和另一臺電腦通過串口連接。運行ros節點,另一臺電腦通過串口發送數據:接收如下:

hl@hl-System-Product-Name:~$ rosrun odom_tf_package boost_node buf[0] = c
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 临夏市| 莱阳市| 启东市| 沙田区| 仁寿县| 宾阳县| 阿拉尔市| 彭泽县| 星子县| 海林市| 婺源县| 华阴市| 内丘县| 连江县| 万宁市| 长宁县| 灵台县| 云龙县| 比如县| 大英县| 加查县| 浦东新区| 文成县| 杭锦后旗| 溧阳市| 万山特区| 邵阳县| 保定市| 荆州市| 芷江| 安阳市| 巩留县| 太湖县| 会泽县| 岳普湖县| 阿坝| 榕江县| 陆川县| 耒阳市| 仪征市| 永济市|