ROS串口通信
身处机器人行业,不想一直只做低端的单片机控制,老是待在舒适区,所以一直都想学一下ROS系统,但看了几个月资料后,感觉还是云里雾里,似懂非懂,感念似乎都很清楚,但要实际去做,却又感觉无从下手。
于是想先找点眼前马上能用的着东西来实验一下,串口无疑是最合适的,来个ROS串口通信,就简单的跟单片机通通信也是不错的,反正其他难的也还做不了;
当然之前看的资料也没白看,系统安装、基本概念、基本操作都得心里有底,因为Linux基础并不是很好,所以还是比较畏惧敲命令的方式的,不管在Linux系统上做什么,我都还是很乐意去找相应IDE,ROS也不例外,官网上教程全是命令行,痛苦了一阵子之后,实在觉得没必要回到原始人状态,写代码就不用说了,光是那一堆依赖都能让人崩溃,于是网上一顿搜,发现ROS开发也是有IDE的,那个欣喜之情啊,简直溢于言表;马上下载安装上了,用了一段时间,发现这工具有很多bug,有时候莫名其妙的错误,但无妨,至少不用再自己去手动添加依赖了,我心足以!
下面详细介绍如何利用RoboWare-Studio创建一个可以跟串口通信的小例子;
1、创建工作空间,打开Studio创建一个工作区就行了,工作区中的src文件夹会自动创建,编译一下;
2、在src文件夹上右键选择添加C++节点,输入节点名和相应的依赖即可;依赖后面可以随时改;

3、创建节点后,里面的src文件夹自动创建,下一步就可以创建C++文件了,如下部分,是串口操作:
其中操作非常简单,定义了一个订阅句柄,用来接收其他节点发布的数据,然后在回调当中,用串口直接发送出去,另外定义一个发布句柄,在主循环不断扫描串口,读取数据,
如果有读到数据,则发布出去,其他节点订阅后既可查看单片机上发的数据;
其中无论订阅还是发布都使用到了一个自定义消息,用来规定要传输数据的格式,添加Msg文件夹后,再添加msg文件,内容如下:

这便是两个话题对应消息格式;
上面这个节点主要用作直接对硬件串口进行收发,它只管收发,并不理会收发的数据是什么,具体流程为,如果接收其他节点发布的消息,则将之原样发送到串口,如何
扫描到串口有数据,则将读到的数据发布到话题上;
所以如果我们要发特定数据并对接收到的做数据处理,则需添加另外一个节点,名称定为datapro,内容如下:

之前一直没搞懂他们的区别,都是选的“加入到新的可执行文件中”,如何选这一项,则改类的代码会单独形成一个可执行文件,在运行时需要单独开启,所以如果两个
功能相对独立,则可以选一项,但是如果代码是调用关系,比如上面的CRC类实际上是被datapro调用的,所以这里我们选择第二项会更好,运行时我们只需要驱动datapro就
可以使用CRC类功能;
另外Studio工具有一个bug是,添加C++类时,会报错,提示找不到头文件,这问题折腾了很久,后来发现需要把自动生成的头文件,提到上一级目标才可编译通过,即将
头文件直接到include文件夹下。
另一个小提醒就是,每次添加新文件或新类时,最好点一下刷新按钮,有时候看不到添加的类文件,需要手动刷新一下才会出来;
ROS串口通信的更多相关文章
- .NET 串口通信
这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...
- BluetoothChat用于蓝牙串口通信的修改方法
本人最近在研究嵌入式的串口通信,任务是要写一个手机端的遥控器用来遥控双轮平衡小车.界面只用了一个小时就写好了,重要的问题是如何与板子所带的SPP-CA蓝牙模块进行通信. SPP-CA模块自带代码,在这 ...
- Win10 IoT C#开发 4 - UART 串口通信
Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug ...
- 使用Java实现简单串口通信
最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^ 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar ...
- Java 串口通信
在Windows系统下,用Java开发串口通信相关的程序时,需要用到几个文件. (1)win32com.dll 要放在jdk\jre\bin目录下. (2)comm.jar 和javax.comm.p ...
- .NET 串口通信中断接收,包含0X1A(作为EOF)
.NET串口通信中将`0X1A`当做EOF处理,.NET接收到EOF会触发一次接收中断,此时事件形参`SerialDataReceivedEventArgs`值为枚举 `Eof`,其他为`Chars` ...
- STC12C5A60S2 双串口通信
STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...
- mfc 调用Windows的API函数实现同步异步串口通信(源码)
在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...
- VS2008基于对话框的MFC上位机串口通信(C++实现)简单例程
首先,在 vs2008 环境下创建 MFC 运用程序 设置项目名称为 ComTest(这个地方随意命名,根据个人习惯),点击确定后,点击下一步 出现如下界面 选择"基于对话框"模式 ...
随机推荐
- Spring Cloud Context模块
SpringCloud这个框架本身是建立在SpringBoot基础之上的,所以使用SpringCloud的方式与SpringBoot相仿.也是通过类似如下代码进行启动. SpringApplicati ...
- ASP.NET Web API系列教程(目录)(转)
注:微软随ASP.NET MVC 4一起还发布了一个框架,叫做ASP.NET Web API.这是一个用来在.NET平台上建立HTTP服务的Web API框架,是微软的又一项令人振奋的技术.目前,国内 ...
- LNMP下安装Pureftpd开启FTP服务以及修改FTP端口的方法
LNMP 环境包 1.2 内置了 Pureftpd 的安装程序. 安装 Pureftpd 进入lnmp解压后的目录,执行:./pureftpd.sh 会显示如下图: 按提示输入当前MySQL的root ...
- Android Studio项目Gradle内网配置
由于内网无法连接到外部网络,在使用Gradle编译Android Studio项目时就会面临一些问题: 1.Gradle安装文件无法下载 2.Gradle Android插件无法下载 3.项目依赖文件 ...
- LayUi前端框架删除数据缓存问题(解决删除后刷新页面内容又会显示问题)
form.on('submit(mySearch)', function(data){ table.reload('userTable', {//就会读取后台数据,重新加载: page: { curr ...
- java设计模式自我总结---适配器模式
上一篇博客说完了 java 23 中设计模式中的五种 创建性模式,由于篇幅过长,新开一贴今天开始学习结构型模式, 结构型模式包括以下七种:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式. ...
- table行颜色设置
function renderingTable(obj){ $(obj).each(function(){ //设置奇数行颜色 $(this).find(" ...
- ReSharper反编译C#类库
经常会在使用C#类中的某个函数时想了解其中具体的代码,可是F12转到定义后只能看到函数简单的声明, 看不到方法体中的代码,这挺让人沮丧的.. 如下: F12进入后显示的是元数据, Equals函数只能 ...
- Javascript我学之四作用域
本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘 作用域 JavaScript的变量作用域只有两种,全局作用域和函数作用域. 函数的作用域 函数中定义的变量是私有的,仅在本函数范围内有效,称为 ...
- Python学习计划
---恢复内容开始--- Python学习计划 https://edu.csdn.net/topic/python2?utm_source=blog4 匠人之心,成就真正Python全栈工程师 ...