当前位置: 首页 > news >正文

《ROS1学习笔记——在ros中实现串口通信》

文章目录

  • 1、下载相关包
  • 2、编程实现
    • 2.1、新建功能包
    • 2.2、c++代码
    • 2.3、配置CMakLists
  • 3 、硬件
  • 4、编译运行
    • 4.1、编译
    • 4.2运行
    • 4.2.2、串口助手
    • 4.2.3发送数据

1、下载相关包

ros里有相应的串口库可以供我们直接使用:

sudo apt-get install ros-noetic-serial

注意:noeyic需要换成自己ubuntu的版本。

2、编程实现

2.1、新建功能包

catkin_create_pkg serial_demo roscpp serial

2.2、c++代码

在src目录下新建demo_serial.cpp文件

#include<ros/ros.h>#include<serial/serial.h>#include<iostream>intmain(intargc,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::Rateloop_rate(500);while(ros::ok()){//获取缓冲区内的字节数size_t n=sp.available();if(n!=0){uint8_tbuffer[1024];//读出数据n=sp.read(buffer,n);for(inti=0;i<n;i++){//16进制的方式打印到屏幕//std::cout << std::hex << (buffer[i] & 0xff) << " ";std::cout<<buffer[i];}std::cout<<std::endl;//把数据发送回去sp.write(buffer,n);}loop_rate.sleep();}//关闭串口sp.close();return0;}

2.3、配置CMakLists

在CMakLists文件中添加如下代码

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

3 、硬件

我这里使用了两个CH430,先插上一个,选择连接到虚拟机上。
然后再插一个,选择连接到主机。

输入lsusb可以检测接入的USB设备

4、编译运行

4.1、编译

回到空间目录下进行编译

catkin_make

编译成功后检查devel目录下是否出现可执行文件

4.2运行

终端1:运行roscore

终端2:
1、改变环境变量

source devel/setup.bash

2、 修改Linux 系统对串口设备的默认权限限制
不然会串口打开失败

sudo chmod 777/dev/ttyUSB0

3、运行节点代码

rosrun demo_serial demo_serial

4.2.2、串口助手

在主机那边打开一个串口助手,配置好基本配置,打开串口。

4.2.3发送数据

主机向ros虚拟机发送数据,ros那边成功收到数据,并返回数据。

参考链接:https://blog.csdn.net/qqliuzhitong/article/details/114384297

http://www.jsqmd.com/news/1391165/

相关文章:

  • R包开发实战:从零构建个人数据分析工具包
  • 山东好用的碳化硅耐磨管生产厂家优选(淄博晶顺金能非金属管道有限公司(山东营销部)) - 品牌优推
  • 微信聊天记录导出与永久保存实战:一个开源工具一次搞定HTML/Word/CSV三格式
  • Windows系统下利用Cmd+Excel实现照片批量重命名的高效方法
  • STM32 SysTick精准延时原理:从fac_us=SystemCoreClock/8000000讲起
  • 一条链接搞定抖音批量下载:douyin-downloader 让素材整理效率翻倍
  • 终极免费解锁Wand游戏修改器:Wand-Enhancer一键补丁与手机远程控制实战指南
  • mdBook 安装教程:快速上手,从零到跑起来只需 5 分钟
  • Windows Docker Desktop深度安装与调优:从虚拟化配置到镜像加速实战
  • Pynamical高级技巧:自定义动力学模型并实现高效仿真
  • 深度解析万联芯城网站建设:从技术架构到用户体验的全方位实战指南
  • 专业教材编写捷径:AI写教材,提高写作效率,降低查重烦恼!
  • 如何把微信聊天记录永久保存?WeChatMsg免费导出HTML、Word、CSV详细教程
  • Qt 5.12.9 安装配置全攻略:从环境搭建到项目实战
  • Android Studio 中文语言包实战:15 分钟把英文 IDE 切换成母语界面
  • 小红书无水印下载工具 XHS-Downloader 上手指南:5分钟跑通,批量保存高清图文视频
  • STM32F429 TouchGFX环境搭建:从CubeMX配置到屏幕点亮全解析
  • RVO2-Unity常见问题解答:解决动态障碍物与Agent交互的难题
  • Java 8核心特性实战指南:Lambda、Stream、Optional与函数式编程
  • Vue开发者福音:Kuker扩展安装与Vuex状态调试详解
  • 5分钟搞定BT下载提速:trackerslist公共Tracker清单配置全攻略
  • 为什么你手动关掉的Windows Defender总会自己回来?开源工具defender-control让永久禁用一次到位
  • Linux包管理器APT/apt-get详解:从依赖地狱到一键安装
  • C#本地生成Code 39与Code 128条形码:原理、实现与工业打印实战
  • PBR渲染核心:法线分布函数(NDF)原理、选型与实战优化
  • 实测5款AI教材写作工具,轻松搞定高校教材编写,查重率低至个位数!
  • 微信聊天记录永久保存完全指南:WeChatMsg 数据留痕从入门到实战
  • 显卡驱动卸不干净、装不上还蓝屏?免费开源工具 DDU 帮你彻底清空驱动残留
  • Matlab sum函数深度解析:从基础求和到高维数据聚合实战
  • 焦作网站建设哪家权威靠谱?揭秘内行都不说的5个避坑真相