ROS中我们自定义的消息文件以".msg"作为后缀名,我们在功能包文件夹下新建msg文件路径,并且在其中:

vim Hello.msg
string Hello    //定义消息
int64 Count    //定义数据

返回到功能包文件夹下的src文件夹中

vim TheTalker2.cpp
#include <sstream>
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "rostest2/Hello.h"/*This header file is created by ROS with Config information*/
int main(int argc , char ** argv)
{ros::init( argc , argv , "talker");/*named node "talker" and initialize it*/ros::NodeHandle nh;/*get a node handle to operate the package*/ros::Publisher Sender = nh.advertise<rostest2::Hello>( "Sender" , 1000 );/*PAY ATTENTION!!! You should use package::.msg file's name!!named a Sender to be Publisher and give it node handle , the length of queue is1000 , if too long then quit*/ros::Rate loop_rate(10);/*wait for 10 hz each times,equals 100ms*/int count = 0;rostest2::Hello msg;while( ros::ok ){std::stringstream ss;ss << "Hello World by sender: " ;msg.Hello = ss.str();msg.Count = count;ROS_INFO( "Send Succeed %d" , count );Sender.publish(msg);ros::spinOnce();loop_rate.sleep();count++;}return 0;
}
vim TheListener2.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "rostest2/Hello.h"void SenderCallback( const rostest2::Hello::ConstPtr& msg )
{/*When Sender sending a message , this founction will do somethingROS_INFO will misunderstand what you want to say , so , rememberadd ".c_str()" to transfer format*/ROS_INFO( " Receive : [%s] [%d] " , msg->Hello.c_str() , msg->Count );
}int main( int argc , char ** argv )
{ros::init( argc , argv , "Receiver" );/*named node "Receiver" and initialize it*/ros::NodeHandle nh;/*get a node handle to operate the package*/ros::Subscriber rec = nh.subscribe( "Sender" , 1000 , SenderCallback );/*named a rec to be Subscriber and give it node handle , the length of queue is1000 , if too long then quit*/ros::spin();/*if there are no message , just wait .*/return 0;
}

上次讲到这里就结束了,但其实还有两个重要的文件需要修改,分别是CMakelist.txt 和package.xml , 用于添加依赖辅助编译

vim package.xml
<build_depend>message_generation</build_depend>
......
<build_export_depend>message_generation</build_export_depend>
......
<exec_depend>message_runtime</exec_depend>

看到这一堆depend,想必就不用多说了吧

vim CMakeLists.txt

剩下的部分由于太过冗长,仅挑选必要部分列出,ROS生成的源文档中这些大部分都被注释,只需删除注释符号并补充部分内容即可

find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation
)
/*All of these files is the ROS system dependencies at compile time,but we haven't used message_generation when we create package
*/
add_message_files(FILESHello.msg)
 generate_messages(DEPENDENCIESstd_msgs)
catkin_package(INCLUDE_DIRS includeLIBRARIES rostest2CATKIN_DEPENDS roscpp rospy std_msgs message_runtimeDEPENDS system_lib
)
include_directories(include${catkin_INCLUDE_DIRS}
)
add_executable( TheTalker2 src/TheTalker2.cpp)
add_executable( TheListener2 src/TheListener2.cpp)
//add our files
target_link_libraries( TheTalker2 ${catkin_LIBRARIES} )
target_link_libraries( TheListener2 ${catkin_LIBRARIES} )

这些都编辑完成后任务就结束啦,下面编译一下,可使用之前定义的cm命令或者cd ~/catkin_ws , catkin_make

ROS基础学习笔记(五):自定义消息练习以及订阅者发布者节点代码简介相关推荐

  1. ROS基础学习笔记(五)

    记录数据和回放: 记录数据: 1.启动案例程序:     roscore     rosrun turtlesim turtlesim_node     rosrun turtlesim turtle ...

  2. Spring Boot基础学习笔记25:RabbitMQ - 发布/订阅工作模式

    文章目录 零.学习目标 一.准备工作 (一)创建Spring Boot项目 - PublishSubscribeDemo (二)在应用属性文件里配置RabbitMQ 二.基于API进行消息发布和订阅 ...

  3. JavaScript基础学习——第五天(原型、垃圾回收、数组简介)

    目录 1. 原型 2. 垃圾回收 3. 数组简介 知识一:原型 深入 JavaScript 之原型和原型链 <!DOCTYPE html> <html><head> ...

  4. ROS学习笔记五:理解ROS topics

    ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...

  5. Java学习笔记(五):一张图总结完JVM8基础概念

    Java学习笔记(五):一张图总结完JVM8基础概念 引文 最近在学习JVM的相关内容,好不容易把基础概念全部都学了一遍,却发现知识网络是零零散散的.迫不得已,只好再来一次总的归纳总结.为了更好的理解 ...

  6. Python3 基础学习笔记 C05【字典】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  7. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  8. Python基础学习笔记之(一)

    Python基础学习笔记之(一) zouxy09@qq.com http://blog.csdn.net/zouxy09 前段时间参加微软的windows Azure云计算的一个小培训,其中Pytho ...

  9. 【AngularJs学习笔记五】AngularJS从构建项目开始

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  10. 逆向脱壳破解分析基础学习笔记七 堆栈图(重点)

    本文为本人 大神论坛 逆向破解脱壳学习笔记之一,为本人对以往所学的回顾和总结,可能会有谬误之处,欢迎大家指出. 陆续将不断有笔记放出,希望能对想要入门的萌新有所帮助,一起进步 堆栈图 首先给定一段反汇 ...

最新文章

  1. Jmeter之完整的HTTP接口测试
  2. java获取当前项目相对路径,在JAVA文件中获取该项目的相对路径
  3. GO关于gin工程关联GOPATH的说明
  4. windows如何添加本机dns记录_运维必看!超清晰的 DNS 原理入门指南
  5. 求链表相交时的交点(C语言)
  6. 手把手教你IDEA使用GIT进行项目管理
  7. 华为Mate 40 Pro+真机现身:外观实锤,价格近万!
  8. 华为云linux用户名,玩转华为云服务器ECS:001 如何登录并创建新用户
  9. 使用pip安装tensorflow很慢的问题
  10. 什么是依赖,什么是抽象
  11. Redis脚本实现分布式锁
  12. JAVA的第一个小程序:Hello world
  13. 在不同浏览器都实用的各窗口大小获取方法
  14. 安卓studio 连接雷电模拟器的历程
  15. 量化评价和质化评价举例_数据质量量化评价研究与实现
  16. 史上最权威的人工智能学习网站推荐
  17. 解决Pycharm出现的Debug无法正常运行(Frames are not available)的问题
  18. 智能化生鲜配送系统,让采购更高效
  19. C++中的随机数函数(
  20. 两种常用的全参考图像质量评价指标——峰值信噪比(PSNR)和结构相似性(SSIM)

热门文章

  1. 帝国网站mysql 数据库开发_帝国cms操作数据库函数范例(二次开发)
  2. 设置div背景颜色透明度,内部元素不透明
  3. IIS网站发布详细流程
  4. 计算机用老毛桃u盘备份系统,老毛桃u盘启动盘ghost备份系统操作步骤
  5. 拓扑学+计算机,拓扑学与物理学结合,量子计算机正在成为现实
  6. token与refresh_token
  7. 微信小程序开发费用一览表
  8. 小程序 实名信息_公告丨DUNK PLUS 小程序实名认证开启
  9. php dtu,什么是DTU DTU知识普及基础篇
  10. 涉案金额2亿多!贺金虎、刘国庆非法吸收公众存款案开庭