ubuntu16.04下ROS操作系统学习笔记(三 / 二)ROS基础-ROS通信编程(上)

简介: ubuntu16.04下ROS操作系统学习笔记(三 / 二)ROS基础-ROS通信编程(上)

1.话题编程

首先我们要有一个发布话题的Talker,还要有一个订阅话题的Listener,然后就是负责管理整个系统的ROS Master。

话题编程的流程主要是以下四个步骤:

  • 创建发布者
  • 创建订阅者
  • 添加编译选项
  • 运行可执行程序

上面的前两步是编程实现的,第三步是通过编译的方式生成可执行文件。最后一步就是去运行一下这个可执行的程序。

我们之前创建的功能包learning_communication里面是没有代码的:

然后在这个文件下面创建一个talker.cpp文件

里面的代码解释也非常清晰。通过句柄.advertise发布消息,里面需要传入发布消息的具体类型,以及队列的长度。

代码的流程如下:

  • 初始化ROS节点
  • 向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型。
  • 按照一定频率循环发布消息。

有了发布者之后,我们接下来需要去定义一个订阅者,步骤如下:

  • 初始化ROS节点
  • 订阅需要的话题
  • 循环等待话题消息,接收到消息后进入回调函数。
  • 在回调函数里面完成消息处理。

源码如下:

现在的话我们就已经写好了c++文件,我们需要对其进行编译,如果我们使用的是python文件的话,我们就不用对其进行编译了。编译代码主要有以下三个步骤:

  • 设置需要编译的代码和生成的可执行文件;
  • 设置链接库;
  • 设置依赖。

在上面这个文件夹下面的CMakeLists.txt就是我们具体需要编译的选项的。接下来我们需要在这个文件下面设置我们需要编译的选项。在这个文件里面很多都是被注释掉了,我们很多时候去掉其中的注释然后再改一点就可以了,并不需要我们自己写。将代码生成可执行文件就是需要使用add_executable这个配置。

这里我们在下面再粘贴一下:

这里我们只需要看未被注释的,第一行的意思就是将talker.cpp生成可执行文件。如果需要更多的文件来生成可执行文件的话,需要在后面再多加几个c++文件。

因为我们需要依赖第三方的库,所以我们需要添加target_link_libraries来与第三方的库做一个链接。之后我们回到工作空间对其进行编译。

编译成功之后就会有以下提示:显示达到1005并且没有报错的话就说明编译成功了。

我们在下面这个文件里面就可以找到我们编译生成的可执行文件了。

之后我们启动roscore

再运行发送“hello world”可执行文件:

再运行接收文件的话,就可以看到下面的结果:

如果我们需要自己定义话题消息的话,我们可以采取以下方式自定义话题消息

string name

uint8 sex

unit8 age

unit8 unknown = 0

unit8 male = 1

unit8 female = 2

具体操作步骤如下:

  • 定义msg文件
  • 在package.xml中添加功能包依赖

 <build_depend>message_generation</build_depend>

<exec_depend>message_runtime</exec_depend>

  • 在CMakeList.txt添加编译选项

接下来具体操作一下:

首先创建一个文件夹,命名为msg文件

在这个文件夹下面创建一个具体的Person.msg文件

之后我们在package.xml文件里面去添加依赖。部分的ROS版本中的exec_depend需要改成run_depend。

之后的话我们需要在CMakeLists.txt文件里面添加编译选项,在下面添加message_generation功能包。

然后添加编译时候的依赖:

接下来添加是哪一个具体的msg文件:

之后对其进行编译:

我们可以在代码终端里面验证一下:

 

2.服务编程

listener通过请求的形式来完成跟talker的一个通讯,talker把处理完成之后的数据处理完成之后再发布给listener,整个服务编程流程可以大致分为以下四个步骤:

  • 创建服务器
  • 创建客户端
  • 添加编译选项
  • 运行可执行程序

假设如下场景,listener发布某两个加数给talker,talker接收到这两个加数之后将这两个加数进行相加,并且把求和的结果告诉listener。具体步骤如下:

  • 定义srv文件
  • 在package.xml中添加功能包依赖
  • 在CMakeLists.txt添加编译选项

首先创建一个srv文件:

然后在下面定义以下文件:

中间的三条横线将数据分成两部分,上面的是服务的请求部分,下面的是服务的应答部分。

之后我们需要在pacaage.xml文件中添加功能包依赖

<build_depend>message_generation</build_depend>

<exec_depend>message_runtime</exec_depend>

这个和之前的talker-listener是一样的,因为我们刚才添加好了,这里就不用去做任何修改:

之后修改CMakeLists.txt文件,和之前的也差不多:

首先修改message_generation,和message_runtime。

之后再修改add_service_files:

之后进入工作空间下面,对其进行编译:

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
ROS入门实践
本课程将基于基础设施即代码 IaC 的理念,介绍阿里云自动化编排服务ROS的概念、功能和使用方式,并通过实际应用场景介绍如何借助ROS实现云资源的自动化部署,使得云上资源部署和运维工作更为高效。
相关文章
|
10月前
|
传感器 机器人 开发者
ROS服务(Service)通信中的模型与实际应用: 初识Hello World并予以扩展
总而言之,ROS服务提供的是一种可靠而灵活的通信方式。每一次服务的请求和应答都会阻塞,直至应答完成。这意味着在调用服务之后,你可以确保你的请求被正确处理。这也是它在机器人系统中如此重要的原因,因为在许多情况下,我们需要获取实时、准确的结果,例如控制机器人执行精确的运动。
557 1
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
394 19
|
存储 弹性计算 运维
云端问道 7 期实践教学-使用操作系统智能助手 OS Copilot 轻松运维与编程
使用操作系统智能助手 OS Copilot 轻松运维与编程
305 14
|
弹性计算 人工智能 运维
新手训练营——使用操作系统智能助手OS Copilot轻松运维与编程
本文摘自阿里云操作系统团队的林演(林生)关于操作系统智能助手创新产品的分享,围绕“OS Copilot的高效运维与编程”展开,主要包括以下几方面的内容: 1. 行业痛点击及背景 2. 产品与架构 3. 典型应用场景 4. 实验及反馈渠道
375 1
|
人工智能 弹性计算 运维
云端问道7期方案教学-使用操作系统智能助手OS Copilot轻松运维与编程
本文介绍了阿里云基础软件团队推出的操作系统智能助手 OS Copilot,旨在解决 Linux 开发与运维中的痛点。OS Copilot 基于大模型和操作系统领域知识构建,支持自然语言问答、命令辅助执行、系统运维优化及代码生成等功能,极大降低了学习成本和工作量。文章详细阐述了其产品架构、典型应用场景以及实验反馈渠道,帮助用户更高效地进行系统管理和编程。目前该产品处于公测阶段,免费提供给阿里云 ECS 实例和 Alinux 3 系统用户使用。
246 1
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
前言 最近开始接触到基于DDS的这个系统,是在稚晖君的机器人项目中了解和认识到。于是便开始自己买书学习起来,感觉挺有意思的,但是只是单纯的看书籍,总会显得枯燥无味,于是自己又开始在网上找了一些视频教程结合书籍一起来看,便让我对ROS系统有了更深的认识和理解。 ROS的发展历程 ROS诞生于2007年的斯坦福大学,这是早期PR2机器人的原型,这个项目很快被一家商业公司Willow Garage看中,类似现在的风险投资一样,他们投了一大笔钱给这群年轻人,PR2机器人在资本的助推下成功诞生。 2010年,随着PR2机器人的发布,其中的软件正式确定了名称,就叫做机器人操作系统,Robot Op
769 14
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
【11月更文挑战第4天】ROS2的学习过程和应用,介绍DDS系统的框架和知识。
1581 1
|
IDE 开发工具 Android开发
探索移动应用开发之旅:理解移动操作系统与编程实践
【9月更文挑战第36天】在数字化时代的浪潮中,移动应用成为连接用户与数字世界的桥梁。本文将深入探讨移动应用开发的精髓,从移动操作系统的工作原理到实际编程实践,旨在为读者提供一条清晰的道路,以理解和掌握移动应用的开发过程。我们将通过具体示例,揭示如何在不断变化的技术环境中保持应用的性能、安全性和用户体验。无论你是初学者还是有经验的开发者,本文都将为你打开一扇窗,让你一窥移动应用开发的精彩世界。
|
安全 测试技术 数据库
Python编程--sys模块及OS模块简单用例
Python编程--sys模块及OS模块简单用例
254 1
|
算法 调度 UED
探索操作系统中的多线程编程
【8月更文挑战第78天】在数字世界的复杂迷宫中,操作系统扮演着至关重要的角色。本文旨在揭开操作系统中多线程编程的神秘面纱,引导读者理解其概念、实现及应用。通过深入浅出的方式,我们将探讨如何在程序设计中运用多线程,以及这一技术如何优化软件性能和提升用户体验。文章将结合具体代码示例,展示多线程在实际应用中的魔力。无论你是编程新手还是资深开发者,这篇文章都将为你提供新的视角和思考路径。

热门文章

最新文章