ROS学习篇(三)ROS系统的串口数据读取和解析(组合导航系统)

2023-05-16

一、Ubuntu下的串口助手cutecom

下载:sudo apt-get install cutecom
打开:sudo cutecom
这里写图片描述
查看电脑链接的串口信息(名称):

dmesg | grep ttyS*

这里写图片描述

二、使用ROS提供的serial包实现串口通信

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

https://zm12.sm-tc.cn/?src=l4uLj4zF0NCIiIjRnJGdk5CYjNGckJLQq5CQhrOamtCP0MnOz8vHyczRl4uSkw%3D%3D&uid=712f083c01cd636faabd3f599a744351&hid=5f6a9b7ebab420e7dfe77286863c8963&pos=5&cid=9&time=1533273988450&from=click&restype=1&pagetype=0000004000000402&bu=news_natural&query=ROS%E7%B3%BB%E7%BB%9F%E4%B8%8B%E4%B8%B2%E5%8F%A3%E7%BC%96%E7%A8%8B&mode=&v=1&force=true&wap=false&uc_param_str=dnntnwvepffrgibijbprsvdsdichei

首先,下载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替换即可)

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

在打开的文件中添加

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

To be continue。

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

ROS学习篇(三)ROS系统的串口数据读取和解析(组合导航系统) 的相关文章

随机推荐

  • FreeRTOS学习4-任务创建和删除

    关于任务创建有3个函数 1 动态创建一个任务 可以自动分配任务堆栈和TCB FreeRTOSConfig h中 xff0c 需要定义 define configSUPPORT DYNAMIC ALLOCATION 1 支持动态内存申请 Ba
  • java里 equals和== 区别

    1 java中equals和 61 61 的区别 值类型是存储在内存中的堆栈 xff08 简称栈 xff09 xff0c 而引用类型的变量在栈中仅仅是存储引用类型变量的地址 xff0c 而其本身则存储在堆中 2 61 61 操作比较的是两个
  • VRPTW建模与求解—基于粒子群算法

    VRPTW建模与求解 基于粒子群算法 1 VRPTW简要描述 VRPTW xff08 Vehicle Routing Problem with Time Windows xff09 是指在经典VRP的前提上 xff0c 给每个客户增添时间窗
  • 伽马分布,指数分布,泊松分布的关系 -转自简书

    原文链接 xff1a https www jianshu com p 6ee90ba47b4a 伽马分布 xff0c 指数分布 xff0c 泊松分布的关系 thinkando 关注 2018 09 25 21 13 字数 714 阅读 29
  • 双轴驱动步进电机云台二自由度单片机控制程序PTU57

    高精度云台由两个电机驱动 xff0c 可控制方位角和高度角 xff0c 具有两自由度的机械电子设备 可用于机器视觉 摄影摄像 监控安防 天文观测 雷达扫描 DIY雕刻机 转盘转台 智能机械手臂 双轴跟踪太阳能定日镜等各类应用高精度云台的场合
  • php使用curl获取需要认证的https请求

    lt php php使用curl获取需要认证的https请求的方法 url 61 34 XXXXXX 34 arr header 61 34 Accept application json 34 arr header 61 34 Autho
  • i-vector本质剖析

    1 i vector的由来 基于因子分析理论 xff0c 句子h的超向量可以描述成 其中为ubm模型的均值超向量 xff0c 即为i vector 2 i vector的计算 2 1 T矩阵的估计 为句子h的观察特征 xff0c 可以对应于
  • C++程序设计基础实验-实验七 多态性

    实验七多态性 一 实验目的 掌握运算符重载的方法 xff1b 掌握使用虚函数的继承实现动态多态性 掌握纯虚函数及抽象类的使用 二 实验内容 设计复数类Complex xff08 请参照教材例题8 1的设计 xff09 xff0c 实现运算符
  • g2o_a_general_framework_for_graph_optimaization

    g2o A General Framework for Graph Optimization NONLINEAR GRAPH OPTIMIZATION USING LEAST SQUARES 机器人和计算机视觉中的许多问题都可以用下列方程的
  • P5644 [PKUWC2018]猎人杀

    P5644 PKUWC2018 猎人杀 题目大意 一开始有 n n n 个猎人 xff0c 第 i i i 个猎人有仇恨度
  • 【Linux基础系列之】platform虚拟总线

    linux当中大多数的设备都是以paltform虚拟总线挂载上去的 xff0c 这里以kernel drivers net dm9000 c为例子分析一下 xff0c platform设备挂在过程 xff1b xff08 1 xff09 d
  • ARMv8-AArch64简述

    ARMv8是ARM版本升级以来最大的一次改变 xff0c ARMv8的架构继承以往ARMv7与之前处理器技术的基础 xff0c 除了现有的16 32bit的Thumb2指令支持外 xff0c 也向前兼容现有的A32 ARM 32bit 指令
  • ARMv8-AArch64寄存器和指令集

    xff08 一 xff09 简述 AArch拥有31个通用寄存器 xff0c 系统运行在64位状态下的时候名字叫Xn xff0c 运行在32位的时候就叫Wn xff1b AArch32与AArch64寄存器对应关系 xff1a xff08
  • ION框架学习(一)

    第一章介绍 xff1a ION的框架和buffer的分配 xff1b 第二章介绍 xff1a 如何使用ION buffer xff1b ION是google在Android4 0 为了解决内存碎片管理而引入的通用内存管理器 用来支持不同的内
  • 高通Camera 驱动调试要点(一)

    本文主要介绍QCOM camera调试的重要参数 xff1b xff08 1 xff09 Lane assign 和lane mask 现在摄像头基本都是mipi接口类型 xff0c 因为前后摄都对应到平台这边不同的mipi接口 xff0c
  • 高通Camera 驱动调试要点(二)

    这篇文章主要介绍数据流这边Camera ISP这块所遇到的问题 xff0c 主要介绍bus overflow和sof freeze xff1b xff08 一 xff09 bus overflow 摄像头传感器时钟通道 即 MIPI DDR
  • c/c++代码性能效率

    一 尽量减少值传递 xff0c 多用引用来传递参数 boolCompare xff08 span class hljs keyword string span s1 span class hljs keyword string span s
  • 6.Docker定制镜像

    当我们从docker镜像仓库中下载的镜像不能满足我们的需求时 xff0c 我们可以通过以下两种方式对镜像进行更改 1 从已经创建的容器中更新镜像 xff0c 并且提交这个镜像 2 使用 Dockerfile 指令来创建一个新的镜像 Dock
  • 全球最大成人网站公布年度榜单!原来lsp最爱看的是这种片……

    前几天 xff0c 那个号称全球最大的成人网站P hub xff0c 发布了 2022年度报告 别惊讶 xff0c 这已经是P某发布年度报告的第9个年头了 正所谓 xff0c 知己知彼百战不殆 不发年度报告 xff0c 怎么总结过去 xff
  • ROS学习篇(三)ROS系统的串口数据读取和解析(组合导航系统)

    一 Ubuntu下的串口助手cutecom 下载 xff1a sudo apt get install cutecom 打开 xff1a sudo cutecom 查看电脑链接的串口信息 xff08 名称 xff09 xff1a dmesg