6. 話題通信 ---- 使用自定義msg,發布方和訂閱方cpp,python文件編寫

1)在功能包下新建msg目錄,在msg目錄下新建Person.msg,在Person.msg文件寫入:

string name
uint16 age
float64 height

2)修改配置文件

? ? ? ? 2.1) 功能包下package.xml文件修改

  <build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend><!-- exce_depend 以前對應的是 run_depend 現在非法-->

? ? ? ? 2.2)功能包下CMakeLists.txt 文件修改(4處)

find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation
)
# 需要加入 message_generation,必須有 std_msgs
## 配置 msg 源文件
add_message_files(FILESPerson.msg
)
# 生成消息時依賴于 std_msgs
generate_messages(DEPENDENCIESstd_msgs
)
#執行時依賴
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES demo02_talker_listenerCATKIN_DEPENDS roscpp rospy std_msgs message_runtime
#  DEPENDS system_lib
)

3)編譯Ctrl+shift+B

查看Person.h的C++路徑和python路徑,后續調用相關msg時,是從這些中間文件中調用的

c_cpp_properties.json修改如下:

settings.json修改如下:

?

發布方的cpp和python源文件編寫如下:

#include "ros/ros.h"
#include "topic_com/Person.h"int main(int argc, char *argv[])
{setlocale(LC_ALL,"");ros::init(argc,argv,"talker");ros::NodeHandle nh;ros::Publisher pub = nh.advertise<topic_com::Person>("chatter",1000);topic_com::Person p;p.name ="wu";p.age =20;p.height =1.75;ros::Rate r(10);while(ros::ok()){pub.publish(p);ROS_INFO("發送數據%s %d %.2f",p.name.c_str(),p.age,p.height);p.age += 1;r.sleep();ros::spinOnce();}return 0;
}

?

#! /usr/bin/env pythonfrom topic_com.msg import Personimport rospyif __name__ == "__main__":rospy.init_node("talker_p")pub = rospy.Publisher("chatt",Person,queue_size=1000)p=Person()p.name="wu"p.age =20p.height =1.75rate = rospy.Rate(10)while not rospy.is_shutdown():pub.publish(p)  #發布消息rate.sleep()  #休眠rospy.loginfo("姓名:%s, 年齡:%d, 身高:%.2f",p.name, p.age, p.height)

訂閱方的cpp和python源文件編寫如下:

#include "ros/ros.h"
#include "topic_com/Person.h"
void doMsg(const topic_com::Person::ConstPtr& msg_p)
{ROS_INFO("I heard : %s %d %.2f",msg_p->name.c_str(),msg_p->age,msg_p->height);
}
int main(int argc, char *argv[])
{ros::init(argc,argv,"listener");ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe<topic_com::Person>("chatter",1000,doMsg);ros::spin();return 0;
}
#! /usr/bin/env pythonfrom topic_com.msg import Person
import rospy
def doMsg(p):rospy.loginfo("I heard %s %d %.2f",p.name,p.age,p.height)
if __name__ == "__main__":rospy.init_node("listener_p")sub =rospy.Subscriber("chatt",Person,doMsg,queue_size=1000)rospy.spin()

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

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

相關文章

多線程使用——線程安全、線程同步

一、線程安全 &#xff08;一&#xff09;什么是線程安全問題 多個線程&#xff0c;同時操作同一個共享資源的時候&#xff0c;可能會出現業務安全的問題。 &#xff08;二&#xff09;用程序摹擬線程安全問題 二、線程同步 &#xff08;一&#xff09;同步思想概述 解決線…

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

本節對應趙虛左ROS書籍的2.1.2 以10hz,發布消息和消息的訂閱 1) 在功能包的src文件夾下&#xff0c;新建cpp文件&#xff0c;并且寫入 #include "ros/ros.h" #include "std_msgs/String.h" int main(int argc, char *argv[]) {setlocale(LC_ALL,"&…

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

好的&#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;該服務允許基于項目…