此节的前提是已经创建好工作空间,请参考 工作空间

一、话题通讯模型

二、话题编程实现

1. 实现发布者(Talker)

a、在~/catkin_ws/src/learning_communicaton/src目录下创建talker.cpp文件:
b、talker.cpp 文件代码如下:

/*
该例程将发布chatter话题,消息类型String
*/#include <sstream>
#include "ros/ros.h"
#include "std_msgs/String.h"int main(int argc,char **argv)
{//1. ROS节点初始化,“talker“为节点名称,后期可更改ros::init(argc,argv,"talker");//2. 创建节点句柄ros::NodeHandle n;// 创建一个Publisher,发布名为chatter的topic,消息类型为std::msgs::String,1000是发布队列的大小,它的作用是缓冲ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);//3. 设置循环的频率ros::Rate loop_rate(10); int count = 0;while (ros::ok()){//初始化std::msgs::String类型的消息std_msgs::String msg;std::stringstream ss;ss << "hello world " << count;msg.data = ss.str();//发布消息ROS_INFO("%s", msg.data.c_str()); chatter_pub.publish(msg);//循环等待回调函数ros::spinOnce();//按照循环频率延时loop_rate.sleep();++count;}return 0;
}

节点句柄:https://www.cnblogs.com/kerngeeksund/p/11184398.html
节点句柄的作用:1、是ROS管理节点的内部引用;2、指定命名空间;

2. 实现订阅者(Listener)


a、在~/catkin_ws/src/learning_communicaton/src目录下创listener.cpp文件:
b、listener.cpp 文件代码如下:

/*
该例程将订阅chatter话题,消息类型String
*/
#include "ros/ros.h"
#include "std_msgs/String.h"//接收到订阅的消息后,会进入消息回调函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{//将接收到的消息打印出来ROS_INFO("I heard: [%s]", msg->data.c_str());
}int main(int argc, char **argv)
{//初始化ROS节点ros::init(argc, argv, "listener");//创建节点句柄ros::NodeHandle n;//创建一个Subscriber,订阅名为chatter的topic,注册回调函数chatterCallbackros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);//循环等待回调函数ros::spin(); return 0;
}

3. 编译

  • 打开learning\_communication功能包中的CMakeLists.txt 文件,添加如下代码:
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
  • 生成:在catkin\_ws工作空间下生成可执行文件 命令: catkin_make

4. 运行可执行文件

注意每次打开新终端添加环境变量:(需要手动添加的话) source ~/catkin_ws/devel/setup.bash

  1. 启动ROS Master —新打开终端:roscore
  2. 启动talker —新打开终端: rosrun learning_communication talker
  3. 启动listener 新打开终端:rosrun learning_communication listener

    两边传输接收数据是实时的

三、自定义话题编程

我们可以使用ROS定义好的消息结构,也可以自己定义话题消息,即自定义话题编程

1. 定义msg文件

learning\_communication下创建msg目录,在msg目录下创建 Person.msg文件
写入:

string name
uint8 sex
uint8 ageuint8 unknown = 0
uint8 male    = 1
uint8 female  = 2

2. 在package.xml中添加功能包依赖

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

如果不加这两句,make报错:Invoking generate_messages() without having added any message or service file before.

3. 在CMakeLists.txt中添加编译选项

注意!! txt文件中有许多注释,但是不是所有函数都注释掉了!!有些函数已经写了,只需增加一句话即可,不要直接复制粘贴
如果出现 位置 顺序不对;如:generate_messages() must be called after add_message_files() ,向上翻查看注释里是不是写了

find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation # 只需要增加这一句即可)
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES learning_communicationCATKIN_DEPENDS roscpp rospy std_msgs message_runtime # 只需要增加这一句即可
#  DEPENDS system_lib
)

这句话是txt文件中没有的,直接复制加入即可,如果出现上述说的顺序问题,调整即可

add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
# 建议放到catkin_package函数前面

4. 编译

在 catkin_ws 工作空间下生成可执行文件:catkin_make

5. 查看自定义的消息

执行 rosmsg show Person

自定义成功,就可以通过包含头文件的方式使用了!

参考

  1. 深蓝学院《机器人操作系统ROS理论与实践》
  2. https://blog.csdn.net/weixin_44264994/article/details/105269783,如有侵权,请联系删除。

机器人操作系统ROS(4)话题编程相关推荐

  1. 机器人操作系统ROS(5)服务编程

    在catkin\_ws工作空间下的功能包learning\_communication下继续实现通信编程,请参考上节-话题编程 一.服务通讯模型 二.服务编程实现 注:实现加法listener发布两个 ...

  2. 机器人操作系统ROS 编程开发--详细总结

    最近工作涉及到自动驾驶的,需要学习ROS,学习中总结了一些知识点,分享给大家. ROS基本介绍 机器人操作系统ROS,是一种分布式处理框架(又名Nodes),ROS常用C++和python编程语言开发 ...

  3. 机器人操作系统ROS(6)动作编程

    注:在 catkin\_ws 工作空间下的功能包earning\_communication 下继续实现通信编程,参考上节-服务编程 一.动作通讯模型 二.动作编程实现 1. 自定义动作文件actio ...

  4. python机器人编程教程入门_机器人操作系统(ROS)入门必备:机器人编程一学就会

    本书是针对机器人操作系统(ROS)初学者的入门教程,从基础的如何安装ROS,到ROS的框架介绍和C/C++.Python编程基础概念介绍,直至完整搭建一个机器人项目,每一个部分都有详细的操作过程和相应 ...

  5. 机器人操作系统ROS(1)

    ROS总体设计 ROS五个特点 点对点设计 一个使用ROS的系统包括一系列进程,这些进程存在于多个不同的主机并且在运行过程中通过端对端的拓扑结构进行联系,如图2所示.虽然基于中心服务器的那些软件框架也 ...

  6. 从零打造一个机器人002【初识机器人操作系统--ROS】

    从零打造一个机器人002[初识机器人操作系统–ROS] 1.ROS是什么 ROS是一个适用于机器人的开源的元操作系统.其实它并不是一个真正的操作系统,其底层的任务调度.编译.寻址等任务还是由Linux ...

  7. 关于机器人操作系统(ROS)学习前须知二三

    ROS基础资料 1.什么是ROS? ROS(机器人操作系统,Robot Operating System),是专为机器人软体开发所设计出来的一套电脑作业系统架构.它是一个开源的元级操作系统(后操作系统 ...

  8. <笔记>机器人操作系统ROS理论与实践--第一讲:认识ROS

    <笔记>机器人操作系统ROS理论与实践--第一讲:认识ROS 前言 一.为什么需要ROS 二.ROS的总体设计 1.一个目标 2.五个特点 3.四位一体 三.ROS的系统实现--三个层次 ...

  9. 机器人操作系统ROS(8)arbotix控制器控制小车运动

    本文内容:在 Ubuntu 18.04 虚拟机中,基于安装配置好 ROS Ketinc上,进行 URDF 机器人建模的详细步,同时配置摄像. 说明:本文是之前的延伸,该节需要参考上节机器人操作系统RO ...

最新文章

  1. js 操作json对象增删改
  2. Asp.net Mvc Enum 扩展
  3. 如何用MediaCapture解决二维码扫描问题
  4. MapXtreme 2005学习(3):向图层中添加线段
  5. HDU - 3068 最长回文(manacher)
  6. 冒泡排序和选择排序区别_你以为只是简单的排序?(一)
  7. linux开发板显示百叶窗图片,03Linux命令操作2
  8. 10. VMware Tools 安裝
  9. laravel自动建mysql索引_让 Laravel 优雅地创建 MySQL 全文索引
  10. AI能为智能手机带来哪些惊喜?Gartner列了这十大应用
  11. php 如何去除说有空格,php怎么去除所有空格
  12. Ubuntu下的几种常见输入法极其配置方式
  13. win7计算机系统减肥,win7系统精简瘦身的操作方法
  14. Android-隐藏app图标以及隐式启动
  15. NetSuite Account Register报表详解
  16. 什么是keep-alive
  17. multisim中轻触开关在哪_proteus中这个开关在哪
  18. 免费小说分享—《异界之九阳真经》
  19. 工程经济学第一章工程经济学概述笔记
  20. PID调节之积分(D)调节

热门文章

  1. [linux] unzip
  2. Dev c++无法新建项目解决方法
  3. gke下载_我们如何在GKE上升级Kubernetes
  4. 《2023年金融科技趋势展望》发布,提出十大技术趋势
  5. 什么是闭包,对闭包的理解,闭包的用途及优缺点
  6. @Qualifier注解的使用
  7. termux安装linux 并开机自动运行命令,自动进入系统
  8. 【Splay 总结】
  9. 谣言检测相关论文阅读笔记:Towards Multi-Modal Sarcasm Detection via Hierarchical Congruity Modeling
  10. SQL 里ESCAPE的用法