尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ros2 从零开始19 使用 Node Interfaces 模板类(C++)

ros2 从零开始19 使用 Node Interfaces 模板类(C++) ros2 从零开始19 使用 Node Interfaces 模板类(C++)前言背景并非所有ROS节点都一样! 就像类rclcpp::Node和类rclcpp_lifecycle::LifecycleNode不是来源同一个继承者,这意味着 ROS 开发者在编写一个以 ROS 节点指针为参数的函数时,可能会遇到类型的问题。 为解决这个问题,rclcpp包含应作为传统节点和生命周期节点传递函数的首选约定的模板类型rclcpp::NodeInterfaces。 这场ROS Con 2023闪电演讲简明扼要地总结了问题并解决了问题。 以下教程将教你如何将rclcpp::NodeInterfaces作为所有ROS节点类型提供可靠且紧凑的接口。模板类rclcpp::NodeInterfaces为管理 ROS 2 中的节点接口提供了一种简洁高效的方式。 这在处理不同类型的 ,如rclcpp::Node和rclcpp_lifecycle::LifecycleNode,它们不共享同一继承树时尤其有用。编者话,这个模板类将允许我们编写函数时,不用给不同的ROS节点入参编写不同的函数实现,即便它们的实现一样。1. 利用SharedPtr访问节点信息下面的例子,我们创建一个简单的节点SimpleNode和一个函数node_info,函数接收一个指针rclcpp::Node::SharedPtr作为入参,打印节点名称。#include memory #include "rclcpp/rclcpp.hpp" void node_info(rclcpp::Node::SharedPtr node) { RCLCPP_INFO(node-get_logger(), "Node name: %s", node-get_name()); } class SimpleNode : public rclcpp::Node { public: SimpleNode(const std::string node_name) : Node(node_name) { } }; int main(int argc, char * argv[]) { rclcpp::init(argc, argv); auto node = std::make_sharedSimpleNode("Simple_Node"); node_info(node); }输出:[INFO][Simple_Node]: Node name: Simple_Node
返回列表