ROS串口通信

2023-11-16

1. USB转串口设备连接到Ubuntu虚拟机

1.1 查看windows 是否能识别USB转串口

将 USB转串口设备 插入电脑的USB接口,在搜索中输入“设备管理器”,打开【设备管理器】
在这里插入图片描述
windows识别到USB转串口:
在这里插入图片描述

1.2 USB转串口设备与Ubuntu虚拟机连接

点击VM的【虚拟机】菜单 →【可移动设备】 →【Future Devices USB Serial Converter】→【 连接(断开与主机的连接)】
在这里插入图片描述
【Future Devices USB Serial Converter】菜单项前面被打√,代表识别到串口。

1.3 查看USB转串口在Ubuntu虚拟机中的设备名称

拔出USB转串口设备,在终端中输入指令

$  ls /dev/tty*

重新插入USB转串口设备,再执行指令ls /dev/tty*,可以看到新增一项“/dev/ttyUSB0” ,ttyUSB0就是对应的串口设备名称。
在这里插入图片描述
为串口设备文件增加可读写权限,否则不能对串口设备执行读写操作
方式1 :临时设置串口设备文件的权限(每次开机都需重新设置)

$ sudo chmod 666 /dev/ttyUSB0

方式2:创建ttyUSB权限规则文件(一劳永逸)

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

文件中写入下列代码:

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

保存,重新登录后即生效


2. ROS安装serial包

安装指令:

sudo apt-get install ros-melodic-serial

不同版本的ROS,有对应的ROS包,melodic版本的ROS,serial包名称为
“ ros-melodic-serial ”


3. ROS实现串口通信

(1)创建串口对象
(2)设置串口属性,打开串口
(3)串口数据收发

3.1 编写串口通信程序

3.1.1 创建工作空间,编译,将工作空间添加到环境变量**

$ mkdir  -p test_serial_ws/src
$ cd test_serial_ws
$ catkin_make
....
$ source devel/setup.bash

3.1.2 创建软件包,添加依赖 serial包,编辑程序文件**

$ cd src
$ catkin_create_pkg serial_demo roscpp serial

src文件下,创建serial_demo.cpp的c++程序

$ serial_demo
$ cd  src 
& touch serial_demo.cpp

编辑serial_demo.cpp文件

#include <ros/ros.h>
#include <serial/serial.h>
#include <iostream>

int main(int argc,char**argv)
{
	setlocale(LC_ALL,"");
	//ros显示中文
	ros::init(argc,argv,"serial_port");
	//创建节点,节点名唯一
	ros::NodeHandle nh;
	//创建句柄 ,向ros master注册节点信息
	
	serial::Serial sp;
	//创建窗口对象
	
	try
	{
		sp.setPort("/dev/ttyUSB0");
		//设置要打开串口名称
		sp.setBaudrate(9600);
		//设置波特率
		serial::bytesize_t bytesize = serial::eightbits;
		sp.setBytesize(bytesize);
		//设置数据位
		serial::parity_t parity = serial::parity_none;
		sp.setParity(parity);
		//设置奇偶检验
		serial::stopbits_t stopbits = serial::stopbits_one;
		sp.setStopbits(stopbits) ;
		//设置停止位
		serial::Timeout to = serial::Timeout::simpleTimeout(100);
		sp.setTimeout(to);
		//设置接收字节间隔的超时时间
		sp.open();	
		//打开串口
	}
	catch(serial::IOException &e)
	{
		ROS_ERROR_STREAM("打开串口失败");//串口设备的权限不够
	}
	if(sp.isOpen())
	{
		sp.flushInput();
		//清空输入的缓存区
		ROS_INFO_STREAM("串口打开成功");	
	}
	else
	{
		return -1;
	}
	ros::Rate loop_rate(500);
	while(ros::ok())
	{
		size_t n = sp.available();
		//缓冲区中数据的字节数,函数返回值作为接收字符的长度
		if(n!=0)
		{
			std::string rev;
			rev = sp.read(n);//n为字节数
			//读取缓冲区数据
			std::cout<<rev<<std::endl;
			sp.write(rev.c_str());;
			//发送读取到的数据
		}
		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})

编译

$ cd test_serial_ws
$ catkin_make
.....

3.2 运行

首先插入另外一个USB转串口设备,在windows下使用串口调试助手打开该串口设备,同时将两个USB串口设备进行物理连接。

在Ubuntu虚拟机打开终端,运行roscore

$ roscore

打开另外一个终端,运行serial_port节点

$ rosrun serial_demo serial_demo

在这里插入图片描述
Serial Library

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

ROS串口通信 的相关文章

  • 毕业设计:自主开发的害虫识别系统--文档附源码

    基于yolov5多目标检测算法的农业害虫识别查询系统 设计文档 目标问题与意义价值 研究意义 本项目能够及时准确地识别农业害虫的种类 是害虫准确测报和合理防治的前提 传统的害虫识别方法主要依赖个人的专业经验进行辨别 或参考书本 网络上的文字

随机推荐

  • Qt5(一)编写Qt多窗口程序

    本文作者 小嗷 微信公众号 aoxiaoji 吹比QQ群 736854977 链接 https f600lt github io archives 摘要 这篇开始将从基础知识点开始一步一步QT到QT项目 原因就是读者说 QT类很多看不懂 这
  • 如何抵御ddos攻击-免费防御方法分享

    网站遭受DDOS攻击不要怕 今天来跟大家聊聊防御ddos攻击 顺便分享一些防御ddos攻击比较使用的方法 如果你是学生也不要紧 这里可以给你分享免费的防御方法 针对ddos攻击 我们升级服务器带宽配置是不起作用的 因为大部分攻击都是来自海外
  • 文心千帆为你而来

    1 前言 3月16号百度率先发布了国内第一个人工智能大语言模型 文心一言 文心一言的发布在业界引起了不小的震动 而文心一言的企业服务则由文心千帆大模型平台提供 文心千帆大模型平台是百度智能云打造出来的一站式大模型开发与应用平台 提供包括文心
  • 【面试题】说一下promise的理解

    一 什么是Promise ES6 异步编程的一种解决方案 比传统的方案 回调函数和事件 更加的合理和强大 大家都知道传统解决异步编程用的是回调函数套回调函数 简称回调地域 以前用JQuery的朋友应该是相当熟悉了 维护起来很难搞 回调地域
  • 七种Linux设备驱动模型之——Device

    前言 Linux将所有的设备统一抽象为struct device结构 同时将所有的驱动统一抽象为struct device driver结构 这样设计之后就方便驱动开发工程师编写驱动 只需要将具体的设备包含struct device结构 具
  • std::string用法总结

    在平常工作中经常用到了string类 本人记忆了不好用到了的时候经常要去查询 在网上摘抄一下总结一下 为以后的查询方便 string类的构造函数 string const char s 用c字符串s初始化string int n char
  • Windows10下Nginx初步配置

    1 nginx启动与关闭 nginx启动命令 一闪而过为正常启动 且看不到nginx进程 D server nginx nginx 1 16 0 gt start nginx nginx关闭命令 快速停止 nginx s stop 完整有序
  • 宝塔面板ip:端口,访问不进去;提示:请使用正确的入口登录面板 解决办法

    请使用正确的入口登录面板 错误原因 当前新安装的已经开启了安全入口登录 新装机器都会随机一个8位字符的安全入口名称 亦可以在面板设置处修改 如您没记录或不记得了 可以使用以下方式解决 解决方法 在SSH终端输入以下一种命令来解决 1 查看面
  • Android servicemanager进程启动过程

    在分析ServiceManager实例化注册流程前 先放张ServiceManager在Binder体系中的UML图 一 ServiceManager启动流程 查看system core rootdir init rc脚本可知 init进程
  • 用anaconda在d盘中创建虚拟环境

    我可以给你一些提示 首先 你需要在D盘中打开Anaconda Prompt 然后使用命令 conda create n python 来创建虚拟环境 其中 是你要为虚拟环境起的名字 而 则是你想安装的Python版本
  • 2023-9-11 拆分-Nim游戏

    题目链接 拆分 Nim游戏 include
  • 浅谈几个通信概念-如何理解卷积,负频率,傅里叶变换,奈奎斯特采样定理?

    1 如何理解卷积 t时刻的输出信号是t时刻之前的无数小的脉冲序列冲击引起的 2 如何理解欧拉公式 复指数信号呢 可以看成一个点在复平面上以角速度w进行逆时针的旋转 傅里叶分析 整体到部分 把一个信号分解成无数个基频组成的信号的和的过程 of
  • 7-4 输出三角形字符阵列 (15 分)

    7 4 输出三角形字符阵列 15 分 本题要求编写程序 输出n行由大写字母A开始构成的三角形字符阵列 输入格式 输入在一行中给出一个正整数n 1 n lt 7 输出格式 输出n行由大写字母A开始构成的三角形字符阵列 格式见输出样例 其中每个
  • 基于web的在线视频编辑的设计

    基于web的在线视频编辑的设计 我在这里首先说明一下 本设计只涉及到逻辑设计和关键的技术 具体的实现方法 语言就得运用自己的特长去解决了 场景 1 比如我用手机录播一段很长的MP4格式的视频 我想剪切其中的几段 然后在合并成一个新的视频 如
  • Hive(2) Hive单节点安装以及分布式安装

    Hive安装 单节点安装 在官网上下载Hive的安装包 官网地址 http hive apache org 把Hive的安装包上传到服务器中 然后解压到指定文件 我这里解压到 opt software 目录下 tar zxvf apache
  • C++11之第二章 2.23课后题讨论

    题目内容如下 给定指针p 你能知道它是否指向了一个合法的对象吗 如果能 叙述判断的思路 如果不能 也请说明原因 网上一下几种答案 答案1 这个问题我的思路是 首先用 p将其值输出来 如果编译器报错 证明p指向一个无效的对象 要么p 0要么p
  • Entity Framework 使用Code First 处理多个表关系时的错误 “将 FOREIGN KEY 约束 'FK_dbo.' 引入表 ' ' 可能会导致循环或多重级联路径”...

    将 FOREIGN KEY 约束 FK dbo 引入表 可能会导致循环或多重级联路径 请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION 或修改其他 FOREIGN KEY 约束 WillCascad
  • Vue开发环境搭建全过程,一步一个坑

    这是基于vue cli 2 x 搭建项目 首先我们要安装好整个开发环境 其实Windows和Mac的整个过程基本一样 开发环境 Homebrew Mac的包管理神器 Node js cnpm 淘宝镜像 节省安装时间 webpack vue
  • 【粉丝问答25】函数指针定义的一个错误

    1 问题 某个函数指针的使用 编译时出错了 type defaults to int in declaration of on touch messgae handle Wimplicit int typedef on touch mess
  • ROS串口通信

    1 USB转串口设备连接到Ubuntu虚拟机 1 1 查看windows 是否能识别USB转串口 将 USB转串口设备 插入电脑的USB接口 在搜索中输入 设备管理器 打开 设备管理器 windows识别到USB转串口 1 2 USB转串口