ROS学习笔记-串口读取传感器的值并发布&自定义消息类型

在读这篇文章之前,可以先读一下小编前面的一篇关于串口读取的文章:

Linux学习笔记-利用循环队列读取串口数据

小编假设这里你已经比较清楚或者通过阅读小编上面的文章,已经对串口读取没有什么问题了,本文小编主要讲解如何将从串口阅读的值发布出去,并且自定义消息类型是如何定义的。

这个代码,小编会放在github上,文末给出链接,名字叫做nav40_rosdemo.cpp


一、将获取的串口的值如何发布出去

主要就三步:

1、Publisher公告消息
2、定义消息变量
3、消息变量赋值并发布

下面是截取的三部分的关键代码:

1、Publisher公告消息
ros::Publisher nav40_pitch = nh.advertise<std_msgs::Float32>
("nav40/pitch", 10);

2、定义消息变量
std_msgs::Float32 Pitch;

3、消息变量赋值并发布
Pitch.data=APM.pitch*180/3.1415926;
nav40_pitch.publish(Pitch);//发布消息


二、自定义消息类型

这个其实参考ros的维基百科就很OK了,按照ros的维基百科一步一步来什么问题都没有。ros维基百科链接:

http://wiki.ros.org/cn

但是可能很多朋友没有vpn,不太方便上wiki,这里我做一下搬运工。自定义消息类型,首先应该已经建立好了node。如下图,我已经在src文件里建立了三个包:


1、建立msg文件夹和.msg文件

本文小编都是在nav40_demo这个包里,添加消息的,现在我们进入到nav40_demo文件夹里,创建一个msg的文件夹,然后进入msg文件里创建一个.msg的文件。如下图:



2、在,msg文件里添加自定义的消息类型

小编这里只定义一句,定义pitch是一个32位的浮点型。


3、修改nav40_demo里的package.xml文件


在.xml文件里加入黄色标出来的两句话:

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>


4、修改cmakelist.txt

修改的部分就是下面我列出来的的代码,大家照着对应的改一改就行。

//添加message_generation
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
message_generation)

//添加消息文件
add_message_files(
FILES
nav40_msg.msg)

generate_messages(
DEPENDENCIES
std_msgs)
//添加message_runtime
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES nav40_demo
CATKIN_DEPENDS roscpp std_msgs message_runtime
# DEPENDS system_lib)

include_directories(
include
${catkin_INCLUDE_DIRS})

target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES})

到这,文件就全部改完了,现在可以重新编译一下,然后用下列命令查看消息是否成功创建:

rosmsg show nav40_demmo/nav40_msg


5、程序中如何调用

其实这一步最简单,你是怎么调用ros自带的就如何调用自己定义的,譬如本次例子中:

1、包含对应的头文件
#include "nav40_demo/nav40_msg.h"

2、定义消息类型
nav40_demo::nav40_msg Pitch;

然后你就可以用Pitch.pitch来使用你自定义的数据类型啦。

本文代码github链接如下:

https://github.com/binbinshare/Linux_demo/tree/master


发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();