【ROS2】rclcpp::Node 常用 API

在這里插入圖片描述

ROS 系列學習教程(總目錄)
ROS2 系列學習教程(總目錄)

目錄

    • 1. 構造函數
    • 2. 節點名稱相關
    • 3. 獲取log對象句柄
    • 4. 回調組相關
    • 5. Topic發布與訂閱
    • 6. Service服務端與客戶端

1. 構造函數

public:Node(const std::string & node_name, const NodeOptions & options = NodeOptions());Node(const std::string & node_name, const std::string & namespace_, const NodeOptions & options = NodeOptions());
protected:Node(const Node & other, const std::string & sub_namespace);

2. 節點名稱相關

獲取節點名稱

const char *get_name() const;

獲取節點名空間

const char *get_namespace() const;

獲取包含名空間和名稱的全名

const char *get_fully_qualified_name() const;

獲取當前 ROS 2 系統中所有活躍節點的名稱列表

std::vector<std::string> get_node_names() const;

獲取 ROS 2 系統中當前活躍的 主題(Topic)和 服務(Service)的名稱及其關聯的消息或服務類型

std::map<std::string, std::vector<std::string>> get_topic_names_and_types() const;
std::map<std::string, std::vector<std::string>> get_service_names_and_types() const;

獲取指定節點提供的所有服務名稱及其對應的服務類型列表

std::map<std::string, std::vector<std::string>>
get_service_names_and_types_by_node(const std::string & node_name,const std::string & namespace_) const;

3. 獲取log對象句柄

rclcpp::Logger get_logger() const;

4. 回調組相關

回調組是ROS 2中管理回調函數執行的重要機制,它允許開發者控制不同回調之間的執行關系。(后面會詳細介紹)

創建并返回一個回調組指針

rclcpp::CallbackGroup::SharedPtr create_callback_group(// 指定回調組的類型,枚舉值,決定回調組如何被調度執行rclcpp::CallbackGroupType group_type,// 決定是否自動將這個回調組添加到與節點關聯的執行器(executor)中bool automatically_add_to_executor_with_node = true);

遍歷節點中的所有回調組,并對每個有效的回調組執行給定的函數

void for_each_callback_group(const  node_interfaces::NodeBaseInterface::CallbackGroupFunction & func);

5. Topic發布與訂閱

創建并返回一個發布者指針

std::shared_ptr<PublisherT>
create_publisher(const std::string & topic_name,const rclcpp::QoS & qos,const PublisherOptionsWithAllocator<AllocatorT> & options =PublisherOptionsWithAllocator<AllocatorT>()
);

參數說明:

topic_name 是topic的名字

qos 是服務質量策略設置(后面會詳細介紹)

options 高級選項配置。(高級應用場景)

使用示例:

auto node = std::make_shared<rclcpp::Node>("my_node");
// 創建一個發布者,發布 String 類型消息到 "/chatter" 主題
auto publisher = node->create_publisher<std_msgs::msg::String>("/chatter",rclcpp::QoS(10).reliable()  // QoS 配置// 使用默認的 options
);

創建并返回一個訂閱者指針

std::shared_ptr<SubscriptionT>
create_subscription(const std::string & topic_name,const rclcpp::QoS & qos,CallbackT && callback,const SubscriptionOptionsWithAllocator<AllocatorT> & options =SubscriptionOptionsWithAllocator<AllocatorT>(),typename MessageMemoryStrategyT::SharedPtr msg_mem_strat = (MessageMemoryStrategyT::create_default())
);

參數說明:

topic_name 是topic的名字

qos 是服務質量策略設置(后面會詳細介紹)

callback 是回調函數。

options 高級選項配置。(高級應用場景)

msg_mem_strat 用于設置消息內存策略。(高級應用場景)

使用示例:

auto node = std::make_shared<rclcpp::Node>("subscriber_node");
auto callback = [](const std_msgs::msg::String::SharedPtr msg) {  // Lambda 回調RCLCPP_INFO(node->get_logger(), "Received: %s", msg->data.c_str());
};// 創建一個訂閱者,接收 String 類型消息
auto subscription = node->create_subscription<std_msgs::msg::String>("/chatter",rclcpp::QoS(10),callback// 使用默認的 options 和 msg_mem_strat
);

統計當前訂閱到指定主題(Topic)的發布者(Publisher)數量

size_t count_publishers(const std::string & topic_name) const;

使用場景

  1. 動態拓撲監控

    • 檢查某個主題是否有發布者,避免訂閱“無人發布”的主題。
    • 示例:機器人傳感器主題 /lidar/data 的發布者是否在線。
  2. 條件性邏輯

    • 根據發布者數量決定是否啟用某些功能。
    if (node->count_publishers("/cmd_vel") > 0) {// 安全地訂閱 /cmd_vel,因為有發布者存在
    }
    
  3. 調試與日志

    • 記錄主題的發布者數量變化,診斷通信問題。

統計當前有多少訂閱者(Subscribers)正在訂閱指定的主題(Topic)

size_t count_subscribers(const std::string & topic_name) const;

使用場景

  1. 動態發布決策

    • 檢查是否有訂閱者,避免無意義的數據發布(節省資源)
    if (node->count_subscribers("/sensor_data") > 0) {publisher->publish(data);  // 只在有訂閱者時發布
    }
    
  2. 調試與監控

    • 診斷通信問題(例如訂閱者未正確連接)。
    • 日志記錄訂閱者數量變化。
  3. 條件性初始化

    • 延遲初始化資源密集型組件,直到有訂閱者存在。

6. Service服務端與客戶端

創建Service客戶端

template<typename ServiceT>
typename rclcpp::Client<ServiceT>::SharedPtr
create_client(const std::string & service_name,const rmw_qos_profile_t & qos_profile = rmw_qos_profile_services_default,rclcpp::CallbackGroup::SharedPtr group = nullptr);

參數說明:

service_name :服務名稱

qos_profile :服務質量(QoS)配置,默認值為 rmw_qos_profile_services_default(ROS 2 默認的服務 QoS)

group:回調組的智能指針,默認值為 nullptr

使用示例:

// 假設有一個服務類型:example_interfaces::srv::AddTwoInts
auto client = node->create_client<example_interfaces::srv::AddTwoInts>("/add_two_ints");// 發送請求
auto request = std::make_shared<example_interfaces::srv::AddTwoInts::Request>();
request->a = 2;
request->b = 3;
auto future = client->async_send_request(request);

創建Service服務端

template<typename ServiceT, typename CallbackT>
typename rclcpp::Service<ServiceT>::SharedPtr
create_service(const std::string & service_name,CallbackT && callback,const rmw_qos_profile_t & qos_profile = rmw_qos_profile_services_default,rclcpp::CallbackGroup::SharedPtr group = nullptr);

參數說明:

service_name :服務名稱

callback:Service的處理函數

qos_profile :服務質量(QoS)配置,默認值為 rmw_qos_profile_services_default(ROS 2 默認的服務 QoS)

group:回調組的智能指針,默認值為 nullptr

使用示例:

auto node = std::make_shared<rclcpp::Node>("my_node");// 定義回調函數
auto callback = [](const std::shared_ptr<example_interfaces::srv::AddTwoInts::Request> request,std::shared_ptr<example_interfaces::srv::AddTwoInts::Response> response
) {response->sum = request->a + request->b;
};// 創建服務
auto service = node->create_service<example_interfaces::srv::AddTwoInts>("/add_two_ints", callback);

歡迎大家加QQ群,一起討論學習:894013891

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917472.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自動駕駛:技術、應用與未來展望——從開創到全面革新交通出行

一、引言1.1 研究背景與意義在過去的幾十年里&#xff0c;隨著科技的飛速發展&#xff0c;自動駕駛技術逐漸從科幻小說中的概念走進了現實生活。從最初簡單的輔助駕駛功能&#xff0c;到如今高度自動化的自動駕駛系統&#xff0c;這一領域的進步正深刻地改變著我們的出行方式和…

【gradle】插件那些事

文章目錄 1. 前言 2. 插件相關介紹 2.1 gradle插件的apply 2.2 引入自定義插件 2.3 常見構建任務 2.4 gradle生命周期 2.5 gradle的惰性屬性&可注入的服務 2.6 常見命令 檢查依賴樹 查看tasks 構建掃描 查看多項目構建的結構 顯示所選項目的構建腳本依賴項 指定控制臺模式來…

測試平臺如何重塑CI/CD流程中的質量協作新范式

測試平臺如何重塑CI/CD流程中的質量協作新范式 在DevOps革命席卷全球軟件行業的今天&#xff0c;測試的角色正在經歷前所未有的轉變。傳統的"測試最后"模式正在被"測試全程"的新理念所取代&#xff0c;這一轉變背后是測試平臺與CI/CD流程深度融合帶來的質量…

node.js不同環境安裝配置

node.js不同環境安裝配置 Windows環境安裝配置 一、Node.js是什么&#xff1f; ? Node.js是一個基于Chrome V8引擎的[JavaScript運行環境]。 Node.js使用了一個事件驅動、非阻塞式I/O 的模型&#xff0c;Node.js是一個讓JavaScript運行在服務端的開發平臺&#xff0c;它讓J…

深度學習-讀寫模型網絡文件

模型網絡文件是深度學習模型的存儲形式&#xff0c;保存了模型的架構、參數等信息。讀寫模型網絡文件是深度學習流程中的關鍵環節&#xff0c;方便模型的訓練、測試、部署與共享。1. 主流框架讀寫方法&#xff08;一&#xff09;TensorFlow保存模型可以使用 tf.saved_model.sav…

智慧能源管理平臺的多層協同控制架構研究

摘要&#xff1a;針對微電網多源異構設備協同難題&#xff0c;提出一種“云-邊-端”三層智慧能源管理架構。平臺集成數據采集、策略優化與全景分析功能&#xff0c;支持光伏、儲能、充電樁等設備的動態調度&#xff0c;通過自適應算法實現防逆流、需量控制及峰谷套利等策略組合…

MySQL面試題及詳細答案 155道(021-040)

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

2025年IntelliJ IDEA最新下載、安裝教程,附詳細圖文

文章目錄下載與安裝IDEA大家好&#xff0c;今天為大家帶來的是IntelliJ IDEA的下載、安裝教程&#xff0c;親測可用&#xff0c;喜歡的朋友可以點贊收藏哦下載與安裝IDEA 首先先到官網下載最新版的IntelliJ IDEA, 下載后傻瓜式安裝就好了 1、下載完后在本地找到該文件&#xf…

深入解析 Apache Tomcat 配置文件

前言 Apache Tomcat 作為最流行的開源 Java Web 應用服務器之一&#xff0c;其強大功能的背后離不開一系列精心設計的配置文件。正確理解和配置這些文件&#xff0c;是部署、管理和優化 Web 應用的關鍵。本篇博客將深入探討 Tomcat 的核心配置文件&#xff0c;涵蓋其結構、關鍵…

ThinkPHP8學習篇(一):安裝與配置

ThinkPHP有非常多的功能庫&#xff0c;我的學習策略很明確&#xff1a;不貪多求全&#xff0c;只掌握最核心的20%功能&#xff0c;解決80%的業務需求。所有學習都圍繞一個目標&#xff1a;夠用就行。遇到復雜問題時&#xff0c;再具體學習對應的內容。 作為ThinkPHP學習的第一…

【Python練習】075. 編寫一個函數,實現簡單的語音識別功能

075. 編寫一個函數,實現簡單的語音識別功能 075. 編寫一個函數,實現簡單的語音識別功能 安裝依賴庫 示例代碼 代碼說明 示例輸出 注意事項 使用 PocketSphinx 進行離線語音識別 注意事項 實現方法 使用SpeechRecognition庫實現語音識別 使用PyAudio和深度學習模型 使用Vosk離…

chrome的數據采集插件chat4data的使用

簡介&#xff1a; Chat4Data是一款Chrome擴展插件&#xff0c;支持AI網頁數據采集與分析。用戶可通過Chrome應用商店安裝后&#xff0c;在網頁上選擇區塊和字段進行數據抓取&#xff0c;設置采集頁數后導出結果。該工具適用于結構化數據提取&#xff0c;操作簡便&#xff0c;為…

《人形機器人的覺醒:技術革命與碳基未來》——類人關節設計:人工肌肉研發進展及一款超生物肌肉Hypermusclet的設計與制造

目錄&#xff1a;一、人工股肉的不同種類及工作原理和比較優勢二、人工肌肉研發的重點難點及成果進展和趨勢三、人工肌肉主要研發機構及其研發成果四、人工肌肉主要性能檢測表征能力及標準體系建設五、人工肌肉主要制造商及其產品性能優勢和供應能力六、人工肌肉在機器人市場應…

【人工智能】AI代理的倫理迷局:自主智能體的責任歸屬之謎

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 在人工智能時代,AI代理作為自主決策的代表,正深刻改變著人類社會。然而,其倫理困境日益凸顯:當AI代理做出自主決策時,誰應為其后果負責…

C語言數據結構(6)貪吃蛇項目1.貪吃蛇項目介紹

1. 游戲背景 貪吃蛇是久負盛名的游戲&#xff0c;它也和俄羅斯方塊&#xff0c;掃雷等游戲位列經典游戲的行列。 在編程語言的教學中&#xff0c;我們以貪吃蛇為例&#xff0c;從設計到代碼實現來提升學生的編程能力和邏輯能力。 2. 游戲效果演示 3. 項目目標 使用C語言…

神經網絡的并行計算與加速技術

神經網絡的并行計算與加速技術一、引言隨著人工智能技術的飛速發展&#xff0c;神經網絡在眾多領域展現出了巨大的潛力和廣泛的應用前景。然而&#xff0c;神經網絡模型的復雜度和規模也在不斷增加&#xff0c;這使得傳統的串行計算方式面臨著巨大的挑戰&#xff0c;如計算速度…

工廠方法模式:從基礎到C++實現

引言 在軟件開發中&#xff0c;設計模式是解決常見問題的經過驗證的方案。其中&#xff0c;工廠方法模式是一種創建型設計模式&#xff0c;廣泛應用于需要動態創建對象的場景。本文將詳細介紹工廠方法模式的核心概念、應用場景&#xff0c;并通過C代碼示例展示其具體實現。 核心…

我的世界進階模組開發教程——傷害(2)

上一篇文章簡要的講述了傷害,這一篇文章就來講一下機械動力的傷害 機械動力源碼 DamageTypeBuilder 類定義與成員變量 public class DamageTypeBuilder {protected final ResourceKey<DamageType> key; // 傷害類型的唯一資源標識符

web前端第一次作業

一、用戶注冊界面作業要求: 1.用戶名為文本框&#xff0c;名稱為 UserName&#xff0c;長度為 15&#xff0c;最大字符數為 20 2.密碼為密碼框&#xff0c;名稱為 UserPass&#xff0c;長度為 15&#xff0c;最大字符數為 20 3.性別為兩個單選按鈕&#xff0c;名稱為 sex&#…

Jenkins 節點連接故障定位及解決方案總結 - PKIX path validation failed

一、故障現象 Jenkins 節點通過 Java Web 方式連接時&#xff0c;報錯&#xff1a; java.io.IOException: Failed to connect to https://xxxx.zte.com.cn/yyyy/tcpSlaveAgentListener/: PKIX path validation failed: java.security.cert.CertPathValidatorException: validit…