ros串口通讯是非常重要的通讯手段,通常跟下位机或者各种usb口外设都是通过串口进行通讯的。

那么我们跟着教程来学习一下如何读取手机通过无线串口发送给电脑的数据。

这里我通过一个usb-ttl工具将蓝牙连接到电脑上,然后通过手机连接蓝牙给蓝牙发送数据,然后电脑从usb-ttl工具读取数据并显示。

1.首先,ros里面有相应的串口包给我们用。我们调用串口包编程会非常方便。下载串口库:

sudo apt-get install ros-melodic-serial

我的ros版本是melodic,如果跟我版本不一样,讲melodic替换成相应的版本代号。

2.创建一个ros功能包并且添加相应的依赖。主要依赖roscpp和serial包

catkin_create_pkg serial_demo roscpp serial

3.在serial_demo功能包的src文件夹里面,我们创建一个serial_demo.cpp的c++程序。

然后将以下代码复制进入(记得更改下方程序中波特率跟蓝牙波特率一致,同时更改到正确的串口):

//serial_demo.cpp
#include <ros/ros.h>
#include <serial/serial.h>
#include <iostream>int main(int argc, char** argv)
{ros::init(argc, argv, "serial_port");//创建句柄(虽然后面没用到这个句柄,但如果不创建,运行时进程会出错)ros::NodeHandle n;//创建一个serial对象serial::Serial sp;//创建timeoutserial::Timeout to = serial::Timeout::simpleTimeout(100);//设置要打开的串口名称sp.setPort("/dev/ttyUSB0");//设置串口通信的波特率sp.setBaudrate(9600);//串口设置timeoutsp.setTimeout(to);try{//打开串口sp.open();}catch(serial::IOException& e){ROS_ERROR_STREAM("Unable to open port.");return -1;}//判断串口是否打开成功if(sp.isOpen()){ROS_INFO_STREAM("/dev/ttyUSB0 is opened.");}else{return -1;}ros::Rate loop_rate(500);while(ros::ok()){//获取缓冲区内的字节数size_t n = sp.available();if(n!=0){uint8_t buffer[1024];//读出数据n = sp.read(buffer, n);for(int i=0; i<n; i++){//16进制的方式打印到屏幕std::cout << std::hex << (buffer[i] & 0xff) << " ";}std::cout << std::endl;//把数据发送回去sp.write(buffer, n);}loop_rate.sleep();}//关闭串口sp.close();return 0;
}

修改CMakeList文件,添加选项

add_executable(serial_demo src/serial_demo.cpp)add_dependencies(serial_demo ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})target_link_libraries(serial_demo${catkin_LIBRARIES}
)

4.然后编译执行即可:

但是他这边显示的是16禁止格式的数据。

如果我想显示字符或者字符串的话怎么修改呢?

找到程序第58行,将其注释掉,然后在第59行添加一句输出字符的代码就行:

std::cout<<buffer[i];

可以看出来,已经正确输出了从手机端发送过来的字符:

参考链接:https://blog.csdn.net/u014695839/article/details/81209082

ros串口通讯(读取串口数据)相关推荐

  1. s7300plc串口通信_什么是串口通讯?plc串口通讯的使用

    什么是串口通讯?plc串口通讯的使用 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆).大多数计算机包含两个基于RS232的串口.串 ...

  2. vb6 串口同时读取写入数据怎么避免冲突_实例:S7-200 SMART通过Modbus-RTU读取温湿度传感器数据...

    本实例我们介绍下西门子S7-200 SMART PLC如何通过Modbus-RTU协议读取温湿度传感器的数值.实例使用的硬件如下: S7-200 SMART CPU ST20: 温湿度传感器(支持Mo ...

  3. 工程思想——关于串口通讯协议帧数据的一些想法

    前言:之前在学校上计算机网络这门课程时候,被里面的各种协议绕的头晕眼花,总以为这些协议都已经被前辈固定,后生们只要按照之前的协议老老实实收发数据就能解决一切,直到自己也有做东西时要自己编写通讯协议时, ...

  4. java天平数据,java RS232串口通讯(电子天平数据抓取)

    写这篇文章是为了记录RS232串口通讯,当时有个央企项目里需要实现自动抓取RS232串口数据,需要支持主要浏览器:Chrome,Firefox,IE8以上等.看了很多有关rs232的资料和也找了很多方 ...

  5. plc串口通讯 qt_Qt 串口通信之使用三菱PLC控制程序

    作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 上位机与PLC通信有很多种方式,比如CPU编程口.网口.串口.总线连接等等.本章节记录一下如何通过 ...

  6. PIC单片机精通_串口通讯与串口调试实例

    1.引子 团队之所以称之为团队,就意味着多个人在一起共事.需要的是谦虚,谦逊,切勿言之偏偏.也要学会尊重,任何一门编程语言都有自己的优势与不足,否则早就有一门语言一统天下啦!!!我由VB入门,利用C. ...

  7. c#串口通讯 c#串口连接电子秤电子天平

    1.串口连接 串口通讯可以直接用RS232串口线连接电脑和电子秤,也可以用虚拟串口模拟数据. 注:RS232个人电脑不识别端口的话,需要安装对应的驱动,如下图 代码中需要配置正确的端口号,查看物理端口 ...

  8. android串口获取电子秤数据,c# 打开电子秤串口并读取电子秤数据

    [实例简介] C#打开串口与电子秤监听电子秤上的读数 [实例截图] [核心代码] #region 成员 SerialPort serialPort; int speed = 300; /// 获取或设 ...

  9. vb6 串口同时读取写入数据怎么避免冲突_分布式场景下的数据复制究竟怎么做...

    主从复制 集群中有一个主节点,写操作都必须经过主节点完成,读操作主从节点都可以处理. 同步复制 数据在副本上落盘才返回. 优点:保证在副本上的数据是最新数据. 缺点:延迟高,响应慢. 异步复制 数据不 ...

  10. android串口通讯奇偶校验,串口通讯奇偶数校验及CRC校验如何使用详解

    我们以前在学校使用串口基本都不用奇偶数校验都是采用硬件CRC(循环冗余校验码)校验的.但有时候为了数据传输的更加严谨和差错的处理会采用奇偶校验.这里简单说下软件上CRC校验是如何计算的. 所谓CRC是 ...

最新文章

  1. TensorFlow 2.7 正式版上线,改进 TF/Keras 调试,支持 Jax 模型到 TensorFlow Lite转换
  2. Openssl:构建CA的过程并实现web服务基于https访问的网络架构
  3. 编码原则:不变量/前置条件/后置条件
  4. python第三天課程:int, bool, str
  5. VTK:几何对象之SourceObjects
  6. Python dict() 函数
  7. tocmat类加载:正统的类加载
  8. mongodb比较操作符笔记
  9. 错排问题(以航电OJ 2048 为例)
  10. 小结大学计算机基础课程内容报告,WORD制作新年贺卡和个人简历大学计算机基础课程设计报告书.doc...
  11. 初学者儿童适合什么尺寸吉他?聪明的家长都这样选!
  12. 兴业银行java面试_【面经】兴业银行信息技术岗面试
  13. 阿狸和桃子的游戏题解
  14. 在Word、WPS中插入AxMath公式导致行间距异常的解决办法
  15. 一天一个面试题之——反射
  16. qs计算机专业排名2017,2017年qs计算机专业大学排名
  17. ClearCase 基本操作介绍
  18. 【javascript】js面试题原型和原型链
  19. Java珠穆朗玛峰案例
  20. 操作系统如何建立异常处理?

热门文章

  1. 2019【王道】【天勤】考研系列图书勘误表
  2. 中州韵输入法 linux,linux manjaro安装五笔+拼音输入法(中州韵)
  3. Linux ——Shell编程---以后补全
  4. springboot 和 js (vue) 实现SM3加密 防篡改
  5. MacBook 电池管家—— AlDente Pro 使用体验
  6. 液态金属驱动机器人研究取得进展
  7. 好用的revit软件:MEP绘制管道风管时,提示不可见如何解决?
  8. 设计模式之工厂模式(factory pattern)
  9. win10 安装yolov7 训练自己的数据集
  10. CPU和主存包括什么?