Ros2_学习梳理_1_话题通信(赵虚左老师)

一、话题通信

1、话题通信核心实现

1-1 、C++实现

发布方

1-1.创建发布方;

publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10);
API:(创建发布方对象)

create_publisher ()
/*
模板: std_msgs::msg::String(被发布的消息类型 )
参数:
1、话题名称
2、Qos(消息队列长度)
返回值:
发布对象指针(rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_😉
*/

1-2.创建定时器;

timer_ = this->create_wall_timer(500ms, std::bind(&MinimalPublisher::timer_callback, this));
API: 创建定时器

create_wall_timer ()
/*
参数:
1、时间间隔(此处可以使用using namespace std::chrono_literals)
2、CallBack(回调函数)
返回值:
定时器对象指针(rclcpp::TimeBase::SharedPtr timer_)
*/

1-3.组织消息并发布。

publisher_->publish(message);
API:发布消息

publish()
/*
参数:
1、发布的消息
*/

订阅者

1-1.创建订阅方;

subscription_ = this->create_subscription<std_msgs::msg::String>("topic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));
API:(创建订阅者)

create_subscription()
/*
模板:std_msgs::msg::String (消息类型)
参数:
1、话题名称
2、Qos(消息队列长度)
3、CallBack(回调函数(对订阅的消息进行处理))
返回值:订阅对象指针( rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscription_;)
*/

1-2.处理订阅到的消息。

回调函数(void topic_callback(const std_msgs::msg::String & msg))

1-2、Python实现

发布方

1.创建发布方

self.publisher_ = rclpy.create_publiser(String, 'topic', 10)
API: (创建发布方)

create_publisher()
/*
参数:
1、消息类型
2、话题名称
3、Qos(消息队列长度)
返回值:self.publisher_ (发布对象)
*/

2.创建定时器;

self.timer = self.create_timer(timer_period, self.timer_callback)
API: (创建定时器)

create_timer ()
/*
参数:
1、时间间隔
2、回调函数(处理订阅到的消息)
*/

3.组织消息并发布。

API:回调函数(self.publisher_.publish(message)

publish()
/*
参数:
1、订阅到的消息
*/

订阅者

1.创建订阅方;

self.subscription = self.create_subscription(String,'topic',self.listener_callback,10)
API:(创建订阅者)

create_subscripition ()
/*
参数:
1、消息类型
2、话题名称
3、CallBack(回调函数)
4、Qos(消息队列长度)
返回值:self.subscripition(订阅对象)
*/

2.处理订阅到的消息。

listener_callbak(self,msg)
/*
处理订阅到的消息
*/

1-3、自定义消息

1、新建msg文件夹
2、配置package.xml文件

编译依赖
<build_depend>rosidl_default_generators</build_depend>
执行依赖
<exec_depend>rosidl_default_runtime</exec_depend>
声明当前包所属的功能包组
<member_of_group>rosidl_interface_packages</member_of_group>

3、配置CMakeLists.txt文件

find_package(rosidl_default_generators REQUIRED)
为接口文件生成源码
rosidl_generate_interfaces(${PROJECT_NAME}
“msg/Student.msg”
)

C++文件包含自定义消息头文件时需要配置Vscode中俄c__cpp_properties.json文件,在文件中的includePath属性下添加一行:

“{workspaceFolder}/install/base_interfaces_demo/include/**”

  • 24
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ROS2的源码是指ROS2软件框架的实现源代码,其中包含了ROS2的核心功能实现及相关库和工具的源代码。 赵虚C是指赵虚所编写的ROS2 C语言版本的源码。赵虚C源码是一种使用C语言实现ROS2框架源码,它基于ROS2的设计理念和规范,实现ROS2的核心功能。 在赵虚C源码中,可以看到ROS2中的许多重要概念和组件的实现,包括节点(Node)、话题(Topic)、服务(Service)和参数(Parameter)等。通过阅读这些源码,可以深入理解ROS2的工作原理和实现细节,以便于进行二次开发和定制化。 此外,赵虚C源码还包含了ROS2的通信机制、消息传输和序列化等关键部分的实现。通过分析这些源码,可以了解ROS2是如何处理节点之间的通信、数据的传输和消息的序列化与反序列化的过程。 总之,赵虚C源码是ROS2的一种具体实现,通过对它的研究和理解,可以深入了解ROS2的内部机制和工作原理,为ROS2的应用开发和定制提供参考和基础。 ### 回答2: ROS 2(Robot Operating System 2)是一个用于开发机器人机器人系统的开源框架。而"赵虚 c"是一个源码工程师,可能是ROS 2框架的贡献者之一,他在其中的C++源码方面进行了贡献。 ROS 2是ROS框架的下一代版本,它提供了更强大、更灵活的功能,使得开发机器人应用更加简单和高效。与ROS 1相比,ROS 2在可扩展性、实时性、安全性和分布式系统方面有了进一步的改进。 "赵虚 c"可能是一个开发者,他在ROS 2源码中使用了C++语言来为框架做出贡献。C++是一种通用的、高级的编程语言,常用于开发复杂的系统和应用。在ROS 2中,C++用于编写框架的核心功能、通信模块、节点等。 作为一个源码工程师,"赵虚 c"可能参与了ROS 2的开发过程,贡献了自己的代码和思想。他可能在ROS 2的源码中实现了一些功能模块、优化了代码结构、提高了系统的性能,或者修复了一些bug。 通过贡献C++源码,"赵虚 c"可能帮助改进了ROS 2框架,使得它更加稳定、高效、易用。源码工程师的工作是为了让软件系统能够更好地满足用户需求,提供良好的开发体验和性能。 总结来说,"ros2 赵虚 c"源码可能指的是ROS 2框架中贡献者赵虚C++源码。他通过自己的工作,为ROS 2框架的发展和改进做出了贡献。 ### 回答3: ROS 2是Robot Operating System(机器人操作系统)的第二个主要版本。相比于ROS 1,ROS 2在一些方面进行了改进和优化。其中ROS 2的核心部分就是ROS 2的源码,它包含了ROS 2系统的各个模块和功能的实现赵虚C是ROS 2中的一个模块,它是基于C语言编写的。赵虚C的作用是提供一些ROS 2系统中常用的功能,比如节点节点的创建与运行、消息的发布与订阅等。赵虚C的源码中包含了一些函数和数据结构,通过这些函数和数据结构,开发者可以在自己的ROS 2应用程序中调用和使用这些功能。 赵虚C源码的结构比较清晰,它按照模块和功能进行了组织。赵虚C的源码中使用了一些ROS 2的API和库函数,这些函数通过ROS 2的底层实现来完成特定的功能。在理解赵虚C源码时,需要对ROS 2的相关概念和机制有所了解,比如节点的概念、消息的定义与传输、话题的订阅与发布等。 通过阅读赵虚C源码,可以更深入地理解ROS 2系统的运行原理和实现细节。同时,开发者也可以基于赵虚C的源码进行二次开发,实现自己的ROS 2应用程序,以满足特定的需求。 总之,赵虚C是ROS 2中的一个重要模块,通过阅读其源码可以更好地理解和使用ROS 2系统。对于ROS 2开发者来说,熟悉赵虚C源码是提高开发效率和质量的一种有效途径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值