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


摘要: 原創博客:轉載請表明出處:http://www.cnblogs.com/zxouxuewei/

 

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

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

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

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

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

$ ./bootstrap.sh --prefix=/home/xzz/boost_1_6_0

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

接着執行:

$ ./b2 install

這條命令把boost的頭文件文件夾 include/ 安裝在prefix定義的目錄中, 並且會編譯所有的boost模塊, 並將編譯好的庫文件夾 lib/ 也放在prefix定義的目錄中. 所有如果成功編譯的的話, prefix目錄即 /home/xzz/boost_1_56_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 int
  • serial_port::parity 奇偶校驗,構造參數為serial_port::parity::type,enum類型,可以是none, odd, even。
  • serial_port::flow_control 流量控制,構造參數為serial_port::flow_control::type,enum類型,可以是none software hardware
  • serial_port::stop_bits 停止位,構造參數為serial_port::stop_bits::type,enum類型,可以是one onepointfive two
  • serial_port::character_size 字符大小,構造參數為unsigned int
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>

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

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

root@zxwubuntu-Aspire-V3-572:rosrun odom_tf_package boost_node 
buf[0] = c


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM