一、编写话题发布者
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即可,然后以相同的步骤编译运行节点代码。