ROS系统的串口数据读取和解析

2023-05-16

原帖地址:https://blog.csdn.net/Tansir94/article/details/81357612

一、Ubuntu下的串口助手cutecom
下载:sudo apt-get install cutecom 
打开:sudo cutecom 
 
查看电脑链接的串口信息(名称):

dmesg | grep ttyS*


二、使用ROS提供的serial包实现串口通信
参考1: 
https://blog.csdn.net/u014695839/article/details/81209082

参考2:

ROS Wiki 中serial包的介绍:http://wiki.ros.org/serial

首先,下载serial软件包:

sudo apt-get install ros-kinetic-serial

 #ros为Kinect版本

进入下载的软件包的位置

roscd serial


若是安装成功会看到:

$:/opt/ros/kinetic/share/serial


新建工作空间级程序包:

cd
mkdir -p serialPort/src
cd serialPort
catkin_make
source devel/setup.bash
cd src
catkin_create_pkg serialPort std_msgs roscpp serial
cd serialPort/src
touch serialPort.cpp


在新建的serialPort.cpp中复制如下代码:     

      #include <ros/ros.h> 
      #include <serial/serial.h>  //ROS已经内置了的串口包 
      #include <std_msgs/String.h> 
      #include <std_msgs/Empty.h> 
      serial::Serial ser; //声明串口对象 
      //回调函数 
      void write_callback(const std_msgs::String::ConstPtr& msg) 
      { 
          ROS_INFO_STREAM("Writing to serial port" <<msg->data); 
          ser.write(msg->data);   //发送串口数据 
      } 
      int main (int argc, char** argv) 
      { 
          //初始化节点 
          ros::init(argc, argv, "serial_example_node"); 
          //声明节点句柄 
          ros::NodeHandle nh; 
          //订阅主题,并配置回调函数 
          ros::Subscriber write_sub = nh.subscribe("write", 1000, write_callback); 
          //发布主题 
          ros::Publisher read_pub = nh.advertise<std_msgs::String>("read", 1000); 
          try 
          { 
              //设置串口属性,并打开串口 
              ser.setPort("/dev/ttyUSB0"); 
              ser.setBaudrate(115200); 
              serial::Timeout to = serial::Timeout::simpleTimeout(1000); 
              ser.setTimeout(to); 
              ser.open(); 
          } 
          catch (serial::IOException& e) 
      
          { 
              ROS_ERROR_STREAM("Unable to open port "); 
              return -1; 
          } 
          //检测串口是否已经打开,并给出提示信息 
          if(ser.isOpen()) 
          { 
              ROS_INFO_STREAM("Serial Port initialized"); 
          } 
          else 
          { 
              return -1; 
          } 
          //指定循环的频率 
          ros::Rate loop_rate(50); 
          while(ros::ok()) 
          { 
              if(ser.available()){ 
              ROS_INFO_STREAM("Reading from serial port\n"); 
              std_msgs::String result; 
              result.data = ser.read(ser.available()); 
              ROS_INFO_STREAM("Read: " << result.data); 
              read_pub.publish(result); 
          } 

          //处理ROS的信息,比如订阅消息,并调用回调函数 
          ros::spinOnce(); 
          loop_rate.sleep(); 
          } 
      } 


连接串口设备,通过第一部分给出的查看电脑连接串口号,更改上述程序中的ser.setPort("/dev/ttyUSB0");

更改CMakeList.txt文件,添加如下两行:

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


运行roscore,运行节点看是否能打开串口。如果提示Unable to open port,是由于权限不够引起的,进行如下操作 
创建文件:(若使用的是ttyACM将ttyusb替换即可)

1、永久解决串口权限问题

sudo gedit /etc/udev/rules.d/70-ttyusb.rules



2、在打开的文件中添加

KERNEL=="ttyUSB[0-9]*", MODE="0666"

或者

KERNEL=="ttyUSB*", OWNER="root", GROUP="root", MODE="0666" 


保存即可,重启或注销用户在登录后生效

 

2.临时获取串口权限
先查看插入电脑的串口号

ls /dev/ | grep ttyUSB



知道串口号之后对指定串口赋予权限,以ttyUSB0为例

sudo chmod a+rw /dev/ttyUSB0


不用重启即可生效
 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS系统的串口数据读取和解析 的相关文章

  • 非常实用的一键开关机电路

    按键电路在我们的电路设计中非常常见 xff0c 其中有一种比较特殊 xff0c 就是一键开关机电路 xff0c 顾名思义 xff0c 就是只用一个按键实现开机关机以及其他功能 xff0c 其实大家都接触过 xff0c 我们手机中的开机键就是
  • 一个很精妙的高精度电压基准电路

    先上图 xff0c 图里面的431也可以是别的基准源 xff08 比如LT1004之类的 xff09 甚至可以是一个简单的稳压二极管 需要说明的时 xff0c 此电路并非本人原创 xff0c 也不知道作者是谁 xff0c 偶然看到后 xff
  • AD拼板技巧

    随着整个电子产业的不断发展 xff0c 电子行业的很多产品都已经有完善的上下游配套企业 从一个成熟产品的方案设计 xff0c 外观设计 xff0c 加工制造 xff0c 装配测试 xff0c 包装 xff0c 批发商渠道等等 xff0c 这
  • 单片机RS485通信接口、控制线、原理图及程序实例

    RS232 标准是诞生于 RS485 之前的 xff0c 但是 RS232 有几处不足的地方 xff1a 接口的信号电平值较高 xff0c 达到十几 V xff0c 使用不当容易损坏接口芯片 xff0c 电平标准也与TTL 电平不兼容 传输
  • AD圆形铺铜技巧

    1 在铺铜时按shift 43 空格是可以画圆弧 xff0c 但那只能画一个很小的圆 xff0c 可以用 34 34 34 34 xff08 逗号 xff0c 句号键 xff09 来调整圆的半径 选择铺铜命令 gt 设置参数 gt 进入铺铜
  • 解决STM32 I2C接口死锁在BUSY状态的方法讨论

    解决STM32 I2C接口死锁在BUSY状态的方法讨论 关于STM32的I2C接口死锁在BUSY状态无法恢复的现象 xff0c 网上已有很多讨论 xff0c 看早几年比较老的贴子 xff0c 有人提到复位MCU也无法恢复 只有断电才行的状况
  • 解决AD不能导入CAD文件

    相信好的小伙伴在导入Auto CAD文件时出现下面图片所示的文件后缀 xff0c 且只有这一种 xff1a 那怎么解决呢 xff1f xff1f xff1f 这是因为你没有安装插入的插件而已 xff0c 实际上这是由于新的安装机制导致 xf
  • do{...}while(0)的用法,超详解

    转载原文地址 xff1a http blog csdn net majianfei1023 article details 45246865 零 导引 第一次见到 do while 0 是在学习libevent的时候 xff0c 看到里面有
  • 以太坊的Ethash算法

    Ethash认真的阅读 xff0c 理解 xff0c 计算和调试了一番 xff0c 顺便自己翻译了一下 xff0c 共同学习 此规范是修订版23 Ethash 是 Ethereum 1 0 的计划的PoW算法 这是最新版本的Dagger H
  • MinGW下载

    下载地址 https www mingw w64 org downloads 选择windows版本 点击MingW W64 builds进入页面 https www mingw w64 org downloads mingw builds
  • 关于c语言中printf的几个问题

    问题在执行下列代码时发现的 int main int a 61 1 float b 61 1 0 float c 61 a 10 printf 34 d 34 int b printf 34 d 34 b 问题一 为什么不一样啊 用 d输出
  • 北斗定位与GPS定位的区别

    欢迎来到东用小知识课堂 xff0c 每天学习一分钟 xff0c 让你紧跟时代 xff0c 扩充自己 xff0c 成为大佬不是梦 xff01 1 覆盖范围 xff1a 北斗定位系统是覆盖中国本土的区域导航系统 覆盖范围东经约70 一140 x
  • 污水处理远程监控系统解决方案

    一 行业背景 随着我国科技和经济的发展 xff0c 近年来工厂数量日益增多 xff0c 而生产所带来的工业垃圾及污水就是一个重要的环境污染问题 xff0c 部分工厂甚至会在监管部门的监控死角下偷偷进行污水排放 xff0c 对周围水质造成严重
  • 5G工业路由器安全性怎么样?工业路由器的特点

    路由器 xff0c 本身就是一个具有相当大潜力的网络通信设备 xff0c 即使再是网络小白的用户 xff0c 可能也知道路由器是家中用于发布无线网络的设备 xff0c 如果深入了解的话 xff0c 其作用和发展会让人大为感慨 相信很多用户也
  • 路由器有防火墙?工业路由器的那些安全防护

    想要网络安全光是电脑装了杀毒软件可不行 xff0c 如果一个企业或者大型工厂一旦因为网络防护疏忽 xff0c 那么丢失数据信息所造成的损失是无法估量的 xff0c 所以企业及工厂网络通信及数据传输所使用的路由器一般都是工业级的 xff0c
  • Cat.1和Cat.4有哪些区别

    Cat 1的全称为LTE UE Category 1 xff0c 它是4G LTE网络的一个类 xff0c 也可以理解为低配的4G终端 xff0c 属于广域网 xff0c 蜂窝联网 xff0c 上行峰值为5Mbit s xff0c 下行峰值
  • RS485接口连接设备数量总共有多少?

    RS485总线可以连接256个设备 xff0c 但测试后发现这个数字有比较大的差异 有一种说法认为专门开发串行嵌入式的RS485总线只能连接32个节点 xff0c 这由自身的驱动能力决定的 有人说网上的各种485总线产品可以支持128个 x
  • 预防山体滑坡,泥石流监测智能预警系统

    一 行业背景 我国是一个山区面积较大的国家 xff0c 山地 丘陵约占国土总面积的2 3 xff0c 在众多的山区中 xff0c 都具备泥石流形成的基本条件 xff0c 这也让我国成为受泥石流灾害影响最大的国家 在我国境内 xff0c 泥石
  • 如何扩大无线网络信号强度?

    欢迎来到东用小知识课堂 xff0c 每天学习一分钟 xff0c 让你紧跟时代 xff0c 扩充自己 xff0c 成为大佬不是梦 xff01 无线网络通信设备存在一个问题 xff0c 那就是他的信号发射都是直线型 xff0c 因此一旦家中或者
  • OpenWrt 添加cpu温度显示监控

    opkg update opkg install lm sensors lm sensors detect 然后修改一下 usr lib lua luci view admin status index htm 增加一个温度的显示 lt C

随机推荐

  • RS485接线方式小科普

    欢迎来到东用知识小课堂 xff01 RS 485采用平衡发送和差分接收方式实现通信 xff1a 发送端将串行口的ttl电平信号转换成差分信号a xff0c b两路输出 xff0c 经过线缆传输之后在接收端将差分信号还原成ttl电平信号 RS
  • 传输数据稳如老狗,还支持多种接口,这款DTU让智能化更简单

    如果你的项目正在向着智慧化转变或发展 xff0c 那么你一定会深刻意识到数据传输的稳定性对于整个系统的稳定运行的重要性 毕竟 xff0c 项目的智能化发展需要时刻保持数据的可靠性和稳定传输 xff0c 如果一旦传输因设备或者网络等因素导致中
  • 什么是光耦隔离?光耦隔离的主要作用

    欢迎来到东用知识小课堂 xff01 光耦合器的结构相当于把发光二极管和光敏三极管封装在一起 光耦隔离电路使被隔离的两部分电路之间没有电的直接连接 xff0c 主要是防止因有电的连接而引起的干扰 xff0c 特别是低压的控制电路与外部高压电路
  • ORB305与CISCO路由器构建L2TP over IPSec VPN操作手册

    1 网络拓扑 在思科路由器与ORB305之间建立一个安全隧道 xff0c 对客户路由器端设备子网 xff0c 与思科路由器端服务器子网之间的数据流进行安全保护 xff0c 组网拓扑图如图所示 2 思科路由器端配置指导 此处以多数客户使用专线
  • linux下使用UDP发送接收数据

    接收 static int sock fd struct sockaddr in recv addr 读取参数 struct sockaddr in send addr 发送参数 sock fd 61 socket AF INET SOCK
  • 0长度数组的使用,重点掌握的知识

    0长度的数组在ISO C和C 43 43 的规格说明书中是不允许的 xff0c 但是GCC的C99支持的这种用法 GCC对0长度数组的文档参考 xff1a Arrays of Length Zero 如下代码片段 xff0c 哪个更简洁更灵
  • Freertos中检测内存的剩余函数

    static uint16 t prvTaskCheckFreeStackSpace const uint8 t pucStackByte
  • 重定位

    一 必须知道的几个概念 1 链接地址和运行地址 运行地址 xff0c 顾名思义就是程序运行的时候的地址 xff0c 也就是你用工具将代码下载到RAM的那个地址 xff0c 也叫加载地址 链接地址 xff0c 由链接脚本指定的地址 为什么需要
  • CC2541低功耗的实现方法

    转自 xff1a http blog csdn net mzy202 article details 42091537 CC2541 CC2540 实现超低功耗是非常重要的 xff1a 我们来总结一下实现方法 xff1a 1 xff0c 有
  • Macbook pro/air 2013 late -2014 使用转接卡更换NVME SSD休眠不醒问题的解决办法

    2021年1月更新 xff0c 发现升级 big sur 11 1之后 xff0c 固件版本变成了429 0 0 0 睡眠问题又回来了 xff0c 每次都睡死 xff0c 不醒 于是我按老办法 xff0c 把mbp114的nvme驱动刷到m
  • stm32使用stlink v2.0下载的sw接线方式

    stm32的sw下载需要用到4根线 GND VCC SWCLK SWDIO xff0c 对应好即可 xff0c 相比较3根线的方式 xff0c 优先推荐4根线下载方式
  • stm32芯片的焊接

    stm32的焊接 xff0c 使用到东西 xff1a 松香 xff0c 维修佬 xff0c 烙铁 1 首先将stm32的一个角的脚上涂上维修佬 xff0c 要特别特别少 xff0c 太多了 xff0c 容易粘连到其他脚上面 xff0c 不好
  • Modbus-RTU通讯协议中CRC校验码的计算步骤

    在CRC计算时只用8个数据位 xff0c 起始位及停止位 xff0c 如有奇偶校验位也包括奇偶校验位 xff0c 都不参与CRC计算 CRC计算方法是 xff1a 1 预置1个16位的寄存器为十六进制FFFF xff08 全1 xff09
  • 一个很好的makefile例子(经典)

    转自http www cnblogs com sld666666 archive 2010 04 08 1707789 html 相信在unix下编程的没有不知道makefile的 xff0c 刚开始学习unix平台 下的东西 xff0c
  • 无线传输距离计算公式

    转自一篇文档 无线传输距离计算 Pr dBm 61 Pt dBm Ct dB 43 Gt dB FL dB 43 Gr dB Cr dB Pr xff1a 接受端灵敏度 Pt 发送端功率 Cr 接收端接头和电缆损耗 Ct 发送端接头和电缆损
  • hex文件解析

    Keil开发环境编程时对源程序进行编译链接后都 可以 成一个可执行文件即 hex文件 xff0c 但是有不完全是一个可执行文件 然后 可以 通过烧录工具烧写到对应的单片机的 flash中 xff0c 当然也还有其他方法可以进行烧录 大家在编
  • Ubuntu下如何挂载以及卸载U盘?

    l 在挂载U盘前 xff0c 首先运行命令cat proc partitions xff0c 看看现在系统中有哪些分区 插上u盘以后 xff0c 再次运行上述命令 xff0c 看看多出来什么分区 xff08 通常是sda1 xff0c 由于
  • 链接脚本文件的写法

    对于 lds文件 xff0c 它定义了整个程序编译之后的连接过程 xff0c 决定了一个可执行程序的各个段的存储位置 虽然现在我还没怎么用它 xff0c 但感觉还是挺重要的 xff0c 有必要了解一下 先看一下GNU官方网站上对 lds文件
  • Ubuntu18.04+思岚激光雷达A2M7+ROS测试

    Ubuntu18 04 43 思岚激光雷达A2M7 43 ROS测试 1 测试环境搭建 测试环境 xff1a Ubuntu18 04 43 ROS Melodic测试工具 xff1a 思岚科技激光雷达A2M7 43 USB转接工具 2 下载
  • ROS系统的串口数据读取和解析

    原帖地址 xff1a https blog csdn net Tansir94 article details 81357612 一 Ubuntu下的串口助手cutecom 下载 xff1a sudo apt get install cut