ROS2学习笔记(话题和消息)

一、编写话题发布者

1、创建软件包

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
ros2 pkg create topic_pkg

 

2、编写节点代码

首先在topic_pkg功能包下面的src文件夹下面创建一个publish_node.cpp文件,在文件中编辑写节点代码

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"

int main(int argc,char* argv)
{
    rclcpp::init(argc,argv);
    auto node = std::make_shared<rclcpp::Node>("publisher_node");
    auto publisher = node->create_publisher<std_msgs::msg::String>("/my_topic",10);
    
    std_msgs::msg::String msg;
    msg.data = "Hellow_world";

    rclcpp::Rate loop_rate(10);
    while(rclcpp::ok())
    {
        publisher->publish(msg);
        loop_rate.sleep();
    }
    rclcpp::shutdown();
}

3、添加变异规则

在topic_pkg包中的CMakeList.txt文件中添加以下规则

#寻找节点源码中使用的依赖项
find_package(rclcpp REQUIRED)
find_package(std_msgs REQRIRED)
#添加节点源码编译规则
add_executable(publishser_node src/publisher_node.cpp)
ament_target_dependencies(publisher_node "rclcpp" "std_msgs")
#添加编译完成后的安装规则
install(TARGETS
        publisher_node
        DESTINATION lib/${PROJECT_NAME}
        )

4、编译运行代码

cd ~/ros2_ws/
colcon built
source install/setup.bash
ros2 run topic_pkg publisher_node

节点运行起来后终端没有提示,此时我们在终端查看话题情况 

ros2 topic list

发现话题/my_topic正常运行,故通过以下指令查看话题消息

ros2 topic echo /my_topic

二、 编写话题订阅者

直接在topic_pkg功能包下面的src文件夹下面创建一个subscriber_node.cpp文件,在文件中编辑写节点代码

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"

std::shared_ptr<rclcpp::Node> node;

void Callback(const std_msgs::msg::String::SharedPtr msg)
{
    RCLCPP_INFO(node->get_logger(), "Logging: '%s'", msg->data.c_str());
}
int main(int argc, char *argv[])
{
    rclcpp::init(argc, argv);
    node = std::make_shared<rclcpp::Node>("subscriber_node");
    auto subscriber = node->create_subscription<std_msgs::msg::String>("/my_topic",10,&Callback);
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

 与发布者相同添加编译规则,只需要将publisher_node替换成subscriber_node即可,然后以相同的步骤编译运行节点代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值