4. 話題通信 ---- 發布方和訂閱方cpp文件編寫

本節對應趙虛左ROS書籍的2.1.2

以10hz,發布消息和消息的訂閱

1) 在功能包的src文件夾下,新建cpp文件,并且寫入

#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char *argv[])
{setlocale(LC_ALL,"");ros::init(argc,argv,"talker");ros::NodeHandle nh;ros::Publisher pub =nh.advertise<std_msgs::String>("chatter",100);std_msgs::String msg;std::string msg_front ="hello,你好!";int count =0;ros::Rate r(10);while(ros::ok()){std::stringstream ss;ss << msg_front << count;msg.data=ss.str();pub.publish(msg);ROS_INFO("發送消息為%s",msg.data.c_str());r.sleep();count++;ros::spinOnce();}return 0;
}

代碼解釋? ? ? ??

1.1)包含ros頭文件? ?

#include "ros/ros.h"

? ? ? ? 包含消息類型頭文件

#include "std_msgs/String.h"

1.2) 在主函數中

加入語句,防止中文亂碼

setlocale(LC_ALL,"");

初始化節點

ros::init(argc,argv,"talker");

"talker"為節點名

實例化句柄

ros::NodeHandle nh;

實例化發布對象

ros::Publisher pub =nh.advertise<std_msgs::String>("chatter",10);

“chatter”為話題名,10為隊列長度

組織數據

std_msgs::String msg;
std::string msg_front ="hello,你好!";
int count=0;
ros::Rate r(10);

循環發布數據

while(ros::ok())//節點不死
{std::stringstream ss;//用于拼接數據ss << msg_front << count;//拼接數據msg.data=ss.str();pub.publish(msg);//發布數據ROS_INFO("發送數據為 %s",msg.data.c_str());rate.sleep();count++;ros::spinOnce();}

2)在功能包的src文件夾下,新建cpp文件,并且寫入

#include "ros/ros.h"
#include "std_msgs/String.h"
void doMsg(const std_msgs::String::ConstPtr& msg_p)
{ROS_INFO("我接受到:%s",msg_p->data.c_str());
}
int main(int argc, char *argv[])
{setlocale(LC_ALL,"");ros::init(argc,argv,"listener");ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe<std_msgs::String>("chatter",100,doMsg);ros::spin();return 0;
}

代碼解釋:

實例化訂閱對象

ros::Subscribe sub=nh.subscribe<std_msgs::String>("chatter",100,doMsg);

話題‘‘chatter’’ 必須與發布方的話題相同

100 :隊列長度

doMsg :回調函數

有回調函數必須有回調循環函數

ros::spin();//回調循環函數ros::spinOnce();//在循環體中用的回調循環函數

doMsg回調函數具體寫入

void doMsg(const std_msgs::String::ConstPtr& msg_p)
{ROS_INFO("接受到消息:%s",msg_p->data.c_str());
}

3) 配置CMakeLists文件

136行,149行

4)運行rosrun

rosrun <包名> <節點名>

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

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

相關文章

有哪些哲學流派適合創業二

好的&#xff0c;讓我們更深入地探討如何將?哲學與數學?深度融合&#xff0c;構建一套可落地的創業操作系統。以下從?認知框架、決策引擎、執行算法?三個維度展開&#xff0c;包含具體工具和黑箱拆解&#xff1a; ?一、認知框架&#xff1a;用哲學重構商業本質? 1. ?本體…

【后端】【python】Python 爬蟲常用的框架解析

一、總結 Python 爬蟲常用的框架主要分為 三類&#xff1a; 輕量級請求庫&#xff1a;如 requests、httpx&#xff0c;用于快速發請求。解析與處理庫&#xff1a;如 BeautifulSoup、lxml、pyquery。爬蟲框架系統&#xff1a;如 Scrapy、pyspider、Selenium、Playwright 等&am…

力扣-hot100(無重復字符的最長子串)

3. 無重復字符的最長子串 中等 給定一個字符串 s &#xff0c;請你找出其中不含有重復字符的 最長 子串 的長度。 示例 1: 輸入: s "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子串是 "abc"&#xff0c;所以其長度為 3。暴力直觀解法一&#xff1…

六邊形棋盤格(Hexagonal Grids)的坐標

1. 二位坐標轉六邊形棋盤的方式 1-1這是“波動式”的 這種就是把【方格子坐標】“左右各錯開半個格子”做到的 具體來說有如下幾種情況 具體到廟算平臺上&#xff0c;是很巧妙的用一個4位整數&#xff0c;前兩位為x、后兩位為y來進行表示 附上計算距離的代碼 def get_hex_di…

C++之虛函數 Virtual Function

1. 普通虛函數&#xff08;Virtual Function&#xff09; 定義&#xff1a;基類中用 virtual 聲明&#xff0c;允許派生類 覆蓋&#xff08;Override&#xff09;。特點&#xff1a; 基類可提供默認實現。派生類可選擇性覆蓋&#xff08;若不覆蓋&#xff0c;則調用基類版本&a…

基于尚硅谷FreeRTOS視頻筆記——15—系統配制文件說明與數據規范

目錄 配置函數 INCLUDE函數 config函數 數據類型 命名規范 函數與宏 配置函數 官網上可以查找 最核心的就是 config和INCLUDE INCLUDE函數 這些就是裁剪的函數 它們使用一個ifndef。如果定義了&#xff0c;就如果定義了這個宏定義&#xff0c;那么代碼就生效。 通過ifn…

HAL庫配置RS485+DMA+空閑中斷收發數據

前言&#xff1a; &#xff08;1&#xff09;DMA是單片機集成在芯片內部的一個數據搬運工&#xff0c;它可以代替單片機對數據進行傳輸、存儲&#xff0c;節約CPU資源。一般應用場景&#xff0c;ADC多通道采集&#xff0c;串口收發&#xff08;頻繁進入接收中斷&#xff09;&a…

從零開始解剖Spring Boot啟動流程:一個Java小白的奇幻冒險之旅

大家好呀&#xff01;今天我們要一起探索一個神奇的話題——Spring Boot的啟動流程。我知道很多小伙伴一聽到"啟動流程"四個字就開始頭疼&#xff0c;別擔心&#xff01;我會用最通俗易懂的方式&#xff0c;帶你從main()方法開始&#xff0c;一步步揭開Spring Boot的…

下載HBuilder X,使用uniapp編寫微信小程序

到官網下載HBuilder X 地址&#xff1a;HBuilderX-高效極客技巧 下載完成后解壓 打開解壓后的文件夾找到HBuilderX.exe 打開顯示更多&#xff0c;發送到桌面快捷方式 到桌面上啟動HBuilderX.exe啟動應用 在工具點擊插件安裝 選擇安裝Vue3編譯器 點擊新建創建Vue3項目 編寫項目…

詳解與HTTP服務器相關操作

HTTP 服務器是一種遵循超文本傳輸協議&#xff08;HTTP&#xff09;的服務器&#xff0c;用于在網絡上傳輸和處理網頁及其他相關資源。以下是關于它的詳細介紹&#xff1a; 工作原理 HTTP 服務器監聽指定端口&#xff08;通常是 80 端口用于 HTTP&#xff0c;443 端口用于 HT…

2. ubuntu20.04 和VS Code實現 ros的輸出 (C++,Python)

本節對應趙虛左ROS書籍的1.4.2 1)創建工作空間 mkdir -p catkin_ws/src cd catkin_ws catkin_make 2) 終端進入VS Code code . 3) vscoe 的基本配置 3.1&#xff09;修改.vscode/tasks.json ,修改內容如下&#xff1a; { // 有關 tasks.json 格式的文檔&#xff0c;請參見…

SAP系統中MD01與MD02區別

知識點普及&#xff0d;MD01與MD02區別 1、從日常業務中&#xff0c;我們都容易知道MD01是運行全部物料&#xff0c;MD02是運行單個物料 2、在做配置測試中&#xff0c;也出現過MD02可以跑出物料&#xff0c;但是MD01跑不出的情況。 3、MD01與MD02的差異: 3.1、只要在物料主數…

快速迭代收縮-閾值算法(FISTA)

文章目錄 1. 數學與優化基礎2. FISTA 算法的原理、推導與機制3. Matlab 實現4. FISTA 在圖像處理與壓縮感知中的應用4.1. 基于小波稀疏先驗的圖像去噪4.2 壓縮感知圖像重建 1. 數學與優化基礎 在許多信號處理與機器學習問題中&#xff0c;我們希望獲得稀疏解&#xff0c;即解向…

微服務之間打通用戶上下文

微服務之間打通用戶上下文 打通上下文步驟需求&#xff1a;1、gateway網關登錄攔截器&#xff1a;【LoginFilter】解釋&#xff1a;代碼 2、SpringMVC全局處理&#xff1a;【GlobalConfig】解釋&#xff1a;代碼&#xff1a; 3、自定義登錄攔截器&#xff1a;【LoginIntercepto…

Hutool之DateUtil:讓Java日期處理變得更加簡單

前言 在Java開發中&#xff0c;日期和時間的處理是一個常見問題。為了簡化這個過程&#xff0c;許多開發者會使用第三方工具包&#xff0c;如Hutool。Hutool是一個Java工具包&#xff0c;提供了許多實用的功能&#xff0c;其中之一就是日期處理。日期時間工具類是Hutool的核心包…

ES中常用的Query和查詢作用,以及SpringBoot使用實例

ES中常用的Query和查詢作用&#xff0c;以及 SpringBoot 使用實例 文章目錄 ES中常用的Query和查詢作用&#xff0c;以及 SpringBoot 使用實例MatchAllQueryTermQueryBoolQueryRangeQueryMatchQueryMultiMatchQueryTermsQueryPrefixQueryWildcardQueryRegexpQueryFuzzyQueryDis…

Flutter 自定義插件基礎

1、Flutter插件是什么&#xff1f;官方插件庫 在開發Flutter應用過程中會涉及到平臺相關接口調用&#xff0c;例如數據庫操作、相機調用、外部瀏覽器跳轉等業務場景。其實Flutter自身并不支持直接在平臺上實現這些功能&#xff0c;而是通過插件包接口去調用指定平臺API從而實現…

極狐GitLab 外部授權控制機制是怎樣的?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 外部授權控制 (BASIC SELF) 在高度控制的環境中&#xff0c;訪問策略可能需要由外部服務控制&#xff0c;該服務允許基于項目…

Linux系統之----馮諾依曼結構

1.簡要描述 馮諾依曼體系結構是現代計算機的基本設計思想&#xff0c;其核心理念是將計算機的硬件和軟件統一為一個整體&#xff0c;通過存儲程序的方式實現計算。馮諾依曼體系結構的核心思想是通過存儲程序實現自動計算&#xff0c;其五大部件協同工作&#xff0c;奠定了現代…

【八股】計算機網絡

1 概述 1.1 網絡的網絡 網絡把主機連接起來,而互連網(internet)是把多種不同的網絡連接起來,因此互連網是網絡的網絡。而互聯網(Internet)是全球范圍的互連網。 1.2 ISP 互聯網服務提供商 ISP 可以從互聯網管理機構獲得許多 IP 地址,同時擁有通信線路以及路由器等聯…