一.首先移植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

转载于:https://www.cnblogs.com/CZM-/p/5890254.html

ros与下位机通信常用的c++ boost串口应用相关推荐

  1. ROS分布式多机通信

    背景 今天在测试时需要配置两台计算机通过ROS进行通信,在此记录下来. 以下内容为胡春旭编撰的<ROS机器人开发实践>中的内容,个人认为写得非常简洁实用. ROS分布式多机通信 ROS是一 ...

  2. Labview通过RS422通讯接口PC与下位机通信

    前言:最近做的一个关于串口通信的小项目:具体功能就是实现PC发送指令控制下位机的转动,下位机收到指令并返回响应指令给上位机,完成一问一答式串口通信.之前处理的是电脑发送数据的格式问题,这次解决的是另外 ...

  3. QT5实现串口收发数据(上位机与下位机通信)

    最近帮老师做一个应用程序,通过上位机与下位机进行串口通信,最后实现实时绘图,通过几天努力,成功实现蓝牙串口通信. 参考博客1 注意:代码中一些与串口无关代码,可以忽略掉 一.QT5串口基础知识 1. ...

  4. 【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信

    文章目录 前言 一.ESP8266模块与STM32连接 二.单片机代码 三.总结 前言 承接上文WIFI上位机部分:[上位机]通过WIFI上位机与网络调试助手通信绘制曲线,现阶段实现了STM32单片机 ...

  5. 3.3-上位机与下位机通信构架源代码编写与使用方法说明

    一.测试框架所使用的示例命令定义 本框架的示例代码所使用的命令协议规定如下: CRC校验码 = [命令类型码 + 命令码 + 命令参数] 一个完整封包 = [包头 + 包长 + 命令类型码 + 命令码 ...

  6. ros分布式多机通信完整教程

    ros多机通信完整试坑教程 文章目录 ros多机通信完整试坑教程 前言: 系统介绍: 1.设置IP和~/.bashrc文件: 列一波搜到的有用的教程: 接着上面的来 第二个bug--图像话题会丢包.延 ...

  7. labview与下位机通信的格式问题处理

    泡 论坛 没多长时间,但是从这里真的得到很多人的帮助,先谢谢! 因为最近一段时间在做一个上位机的开发需要用到串口 通信 ,而且用户强制要求要十六进制收发(后来才知道的,所以耽误了一些时间,希望大家以后 ...

  8. python编程与下位机通讯_ros 与下位机通信

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  9. ros机器人的上位机和下位机怎么通信

    ROS 机器人的上位机和下位机通信是通过 ROS 网络通信机制实现的.上位机和下位机都是 ROS 节点,它们通过发布和订阅消息来进行通信.上位机可以发布控制命令,而下位机可以发布传感器数据.这种通信方 ...

最新文章

  1. 如何在Vim中用换行符替换字符
  2. jQuery1.6以上attr改用prop
  3. 怎么将SAP数据传输到其他系统(Transferring Data from SAP to Other Systems)
  4. [0] OpenCV_Notes - 琐碎
  5. 如何使用 Visual Studio Code 调试 Angular Schematics 实现
  6. Spring事务管理(二)分布式事务管理之JTA与链式事务
  7. 找出单身狗java_Java单身狗 —— 单例模式
  8. BZOJ4025 二分图
  9. KASLR-内核地址空间布局随机化
  10. 青花瓷 下载App Store上历史版本的App的ipa的包
  11. 基于SLAM的机器人的自主定位导航
  12. oracle找出两张表中不同的数据
  13. 人才测评技术与应用【1】
  14. ssm酒店预订系统ssm酒店管理系统民宿预订ssm酒店客房预订系统SSM客房预订系统
  15. cf1009 C. Annoying Present
  16. fiftyone安装使用亲测
  17. 超全的 100 个 Pandas 函数汇总,建议收藏
  18. 不用修改flash源文件,给.swf 加链接地址方法
  19. 提供良好客户服务的5大原则
  20. 协议栈植入芯片势在必行,IPSec就是个错误

热门文章

  1. 【翻译】Ext JS最新技巧——2014-8-13
  2. C# WinForm 通过URL取得服务器上的某图片文件到本地
  3. shell 脚本中如何实现自加操作
  4. python之路6-迭代器、生成器、装饰器
  5. js插件---IUpload文件上传插件(包括图片)
  6. 【转】linux中waitpid及wait的用法
  7. php实现基于shmop扩展的数据缓存
  8. 监控io性能,free命令,ps网络命令,查看网络状态,Linux下抓包
  9. 2016年十大存储预测
  10. Hadoop MapReduce编程 API入门系列之最短路径(十五)