一.首先移植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/cam/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 in
  • #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

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)
好像是权限不够

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

sudo chmod a+rw /dev/ttyUSB0

将你的电通和另一台电脑通过串口连接。运root用户运行

root@cam-Aspire-V3-572G:/home/cam/catkin_ws/devel/lib/odom_tf_package# ./boost_node
buf[0] = 0

最新文章

  1. ELF Format 笔记(十四)—— 段内容
  2. Eclipse swt开发环境搭建
  3. Mysql数据库的通用安装方法
  4. DIV的表单布局
  5. 第七章Bulk设备
  6. 类:初识类的事件(有点不明白,怎么普通Precedure可以赋值给TEvent)
  7. Xamarin生成的APK大小分析
  8. ng-options的使用
  9. 使用Linux 安装MySQL
  10. 禁止通过网页URL访问文件夹 asp.net
  11. ;。【】DAY14、递归,匿名函数
  12. 对Datatable中过长内容实行省略话
  13. 解决pre-commit hook failed (add --no-verify to bypass)的问题
  14. linux下配置docker和splash(图文)
  15. JS-使用indexof来统计字符出现次数
  16. 1、 LwIP协议栈规范翻译——简介
  17. 第 8 章 容器网络 - 054 - 准备 macvlan 环境
  18. POJ 3126 Prime Path bfs, 水题 难度:0
  19. vue打包后,接口请求404的完美解决方案
  20. JDK7 异常的多重捕获

热门文章

  1. js optiontransferselect
  2. maven pom.xml解释 (转)
  3. UIButton、UIImageView、UILabel的选择
  4. Java可变参数 &amp; Python可变参数 &amp; Scala可变参数
  5. Lua了解 &amp; 为什么游戏开发用Lua
  6. Manacher 算法(hdu 3068 &amp;&amp; hdu 3294)
  7. Eclipse下导入外部jar包的3种方式 (zhuan)
  8. Selenium Grid 运行报错 Exception thrown in Navigator.Start first time -&gt;Error forwarding the new session Empty pool of VM for setup Capabilities
  9. 当CanTK遇到PhoneGap
  10. 简单的css居中问题(日常记录)