Ros2话题通信使用步骤

ROS2开发入门:逐步指南,
本文详细介绍了如何在ROS2中进行开发,包括导入消息类型、配置依赖、创建node类实例并初始化、添加订阅器和发布器功能,以及最终的编译过程。

ros2使用步骤

1.导入消息类型

2.配置依赖文件

3.创建一个node类的实例(就是本人打算建立的节点)

4.对实例的属性初始化

5.在实例中加入订阅器,发布器等等能力。

6.编译使用

 

### ROS 2话题通信使用方法 在 ROS 2 中,话题Topic通信是节点之间进行数据交换的主要方式之一。通过话题,一个节点可以发布消息,而另一个节点可以订阅这些消息[^1]。以下是一个完整的示例,展示如何实现两个节点之间的通信。 #### 创建工作空间和功能包 首先,需要创建一个 ROS 2 工作空间,并在其中生成一个新的功能包。以下是具体步骤: 1. **创建工作空间** 在终端中运行以下命令以创建一个新的 ROS 2 工作空间: ```bash mkdir -p ~/ros2_ws/src cd ~/ros2_ws/src ``` 2. **创建功能包** 使用 `ros2 pkg create` 命令创建一个新的功能包: ```bash ros2 pkg create --build-type ament_cmake topic_example ``` #### 编写发布者和订阅者代码 接下来,编写发布者和订阅者的代码。以下是一个简单的 C++ 和 Python 示例。 ##### 发布者代码 (C++) 将以下代码保存为 `topic_helloworld_pub.cpp` 文件: ```cpp #include "rclcpp/rclcpp.hpp" #include "std_msgs/msg/string.hpp" using namespace std::chrono_literals; class PublisherNode : public rclcpp::Node { public: PublisherNode() : Node("helloworld_pub") { publisher_ = this->create_publisher<std_msgs::msg::String>("hello", 10); timer_ = this->create_wall_timer(500ms, std::bind(&PublisherNode::publish_message, this)); } private: void publish_message() { auto message = std_msgs::msg::String(); message.data = "Hello, World!"; RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", message.data.c_str()); publisher_->publish(message); } rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_; rclcpp::TimerBase::SharedPtr timer_; }; int main(int argc, char *argv[]) { rclcpp::init(argc, argv); rclcpp::spin(std::make_shared<PublisherNode>()); rclcpp::shutdown(); return 0; } ``` ##### 订阅者代码 (Python) 将以下代码保存为 `topic_helloworld_sub.py` 文件: ```python #!/usr/bin/env python3 # -*- coding: utf-8 -*- import rclpy from rclpy.node import Node from std_msgs.msg import String class SubscriberNode(Node): def __init__(self): super().__init__('helloworld_sub') self.sub = self.create_subscription(String, "hello", self.listener_callback, 10) def listener_callback(self, msg): self.get_logger().info('I heard: "%s"' % msg.data) def main(args=None): rclpy.init(args=args) node = SubscriberNode() rclcpp.spin(node) node.destroy_node() rclpy.shutdown() if __name__ == '__main__': main() ``` #### 配置 `CMakeLists.txt` 确保在 `CMakeLists.txt` 文件中添加以下内容以编译发布者代码: ```cmake find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) add_executable(topic_helloworld_pub src/topic_helloworld_pub.cpp) ament_target_dependencies(topic_helloworld_pub rclcpp std_msgs) install(TARGETS topic_helloworld_pub DESTINATION lib/${PROJECT_NAME}) ``` #### 编译和运行 完成上述步骤后,编译并运行代码: ```bash colcon build --packages-select topic_example source ~/ros2_ws/install/setup.bash ros2 run topic_example topic_helloworld_pub ros2 run topic_example topic_helloworld_sub ``` 此时,发布者会每 500 毫秒发送一次消息,而订阅者会接收到这些消息并打印到终端[^4]。 ### 常用命令 在 ROS 2 中,可以使用以下命令查看和调试话题通信: - 查看所有话题:`ros2 topic list`[^2] - 查看特定话题的信息:`ros2 topic info <topic_name>` - 查看话题发布频率:`ros2 topic hz <topic_name>` - 查看话题数据:`ros2 topic echo <topic_name>`[^2] ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值