ros創建工作空間配置運行狀態機

ROS
一、創建工作空間目錄
/home/wict/workspace/hudahua/ros/catkin_ws

#初始化工作空間(僅需一次)
catkin_init_workspace

二:回到根目錄編譯

#創建正確的工作空間結構(如果尚未創建)
mkdir -p ~/workspace/hudahua/ros/catkin_ws/src
cd ~/workspace/hudahua/ros/catkin_ws/src
#將你的源碼包包移動到src目錄下(假設原包在上級目錄)
mv ../../my_state_machine .
# 進入工作空間根目錄
cd ~/workspace/hudahua/ros/catkin_ws# 編譯所有包
catkin_make# 編譯后更新環境變量
source devel/setup.bash

驗證包是否被識別

# 檢查ROS能否找到你的包
rospack find my_state_machine
# 應輸出路徑:/home/wict/.../catkin_ws/src/my_state_machine

三、創建ROS包
創建一個新的ROS包并添加依賴:

catkin_create_pkg my_state_machine rospy smach smach_ros std_msgs
cd my_state_machine
mkdir scripts

編寫狀態機代碼
在scripts目錄下創建Python腳本(如state_machine.py),示例代碼如下:

#!/usr/bin/env python3
import rospy
from smach import State, StateMachine
from smach_ros import IntrospectionServer# 定義狀態類
class StateA(State):def __init__(self):State.__init__(self, outcomes=['succeeded', 'failed'])def execute(self, userdata):rospy.loginfo("Executing State A")rospy.sleep(2)return 'succeeded'  # 或 'failed' 測試不同轉移class StateB(State):def __init__(self):State.__init__(self, outcomes=['succeeded'])def execute(self, userdata):rospy.loginfo("Executing State B")rospy.sleep(1)return 'succeeded'def main():rospy.init_node('my_state_machine')# 創建狀態機sm = StateMachine(outcomes=['exit'])with sm:# 添加狀態并定義轉移StateMachine.add('STATE_A', StateA(),transitions={'succeeded': 'STATE_B', 'failed': 'exit'})StateMachine.add('STATE_B', StateB(),transitions={'succeeded': 'STATE_A'})# 啟動可視化服務器(可選)sis = IntrospectionServer('smach_server', sm, '/SM_ROOT')sis.start()# 執行狀態機outcome = sm.execute()rospy.spin()sis.stop()if __name__ == '__main__':main()

確保腳本位于正確目錄
根據你的目錄結構,腳本應放在 my_state_machine/scripts 而非 src 目錄下:

chmod +x scripts/state_machine.py

配置CMakeLists.txt
在 my_state_machine/CMakeLists.txt 末尾添加以下內容,確保ROS能識別Python腳本:

# 安裝Python腳本到ROS的包路徑
catkin_install_python(PROGRAMS scripts/state_machine.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

確認工作空間結構
Catkin工作空間的標準結構如下:

catkin_ws/ # 工作空間根目錄(必須在此運行catkin_make)
├── build/ # 自動生成
├── devel/ # 自動生成
└── src/ # 用戶代碼目錄
└── my_state_machine/ # 你的ROS包(必須在此!)
├── CMakeLists.txt
├── package.xml
└── scripts/

四、編譯并更新環境

# 回到工作空間根目錄
cd ~/workspace/hudahua/ros/catkin_ws# 清理舊編譯緩存(可選)
rm -rf build/ devel/# 重新編譯
catkin_make# 更新環境變量
source devel/setup.bash

五、驗證運行

啟動狀態機

roscore

運行狀態機節點

rosrun my_state_machine state_machine.py

可視化狀態機(可選)
新終端中啟動smach_viewer:

rosrun smach_viewer smach_viewer.py

訪問localhost:8080查看狀態機實時狀態。

在這里插入圖片描述

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

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

相關文章

【看到哪里寫到哪里】C的“數組指針”

C里面,數組指針,不是基本類型。顧名思義,數組指針,是指針,是指向數組的指針; 1.它的基本定義樣子是 type (*ptr)[size]; 這個指針,指向的數組的;這里要注意,要定義數組…

深度相機的日常學習

文章目錄 一、深度相機的概念二、深度相機的工作原理三、深度相機的應用領域 一、深度相機的概念 深度相機(Depth Camera)是一種能夠捕捉場景中物體距離信息的設備,與傳統的 RGB 相機不同,深度相機不僅可以獲取場景的二維圖像信息…

elasticsearch基本操作筆記

1.通過kibana查看elasticsearch版本信息 a.左上角三道橫->Management->Dev Tools b.GET / 執行 c.執行結果 { “name” : “xxxx”, “cluster_name” : “xxxxxxx”, “cluster_uuid” : “vl1UudAoQp-aHWAzyPoMyw”, “version” : { “number” : “7.15.1”, “build…

兩種Https正向代理的實現原理

正向代理 HTTPS 主要有兩種方案,分別是基于證書的解密與再加密方案和基于 HTTP CONNECT 隧道的方案,以下是這兩種方案的具體信息: 一、基于證書的解密與再加密方案 原理 工作原理:代理服務器擁有自己的證書,客戶端需…

服務器健康摩爾斯電碼:深度解讀S0-S5狀態指示燈

當服務器機柜中閃爍起神秘的琥珀色燈光,運維人員的神經瞬間繃緊——這些看似簡單的Sx指示燈,實則是服務器用硬件語言發出的求救信號。掌握這套"摩爾斯電碼",等于擁有了預判故障的透視眼。 一、狀態指示燈:服務器的生命體…

Java高級 | 【實驗七】Springboot 過濾器和攔截器

隸屬文章:Java高級 | (二十二)Java常用類庫-CSDN博客 系列文章:Java高級 | 【實驗一】Springboot安裝及測試 |最新-CSDN博客 Java高級 | 【實驗二】Springboot 控制器類相關注解知識-CSDN博客 Java高級 | 【實驗三】Springboot 靜…

【圖片識別改名】如何批量將圖片按圖片上文字重命名?自動批量識別圖片文字并命名,基于圖片文字內容改名,WPF和京東ocr識別的解決方案

應用場景 在日常工作和生活中,我們經常會遇到需要對大量圖片進行重命名的情況。例如,設計師可能需要根據圖片內容為設計素材命名,文檔管理人員可能需要根據掃描文檔中的文字對圖片進行分類命名。傳統的手動重命名方式效率低下且容易出錯&…

防火墻iptables項目實戰

目錄 一、網絡規劃 三、環境準備與檢測 1、firewall (1)配置防火墻各大網卡ip并禁用firewalld和selinux (2)打開firewall路由轉發 2、PC1(內網) (1)配置ip并禁用firewalld和s…

阿里云域名怎么綁定

阿里云服務器綁定域名全攻略:一步步輕松實現網站“零”障礙上線! 域名,您網站在云端的“身份證”! 在數字化浪潮中,擁有一個屬于自己的網站或應用,是個人展示、企業運營不可或缺的一環。而云服務器&#x…

從仿射矩陣得到旋轉量平移量縮放量

仿射變換原理 仿射變換是一種線性變換,可以包括平移、旋轉、縮放和剪切等操作。其一般公式可以表示為: $$\mathbf{x’} = A \mathbf{x} + \mathbf{b} ] 其中: (\mathbf{x}) 是輸入向量,通常表示一個點在二維或三維空間中的坐標。(\mathbf{x’}) 是輸出向量,表示經過仿射變…

C++課設:通訊錄管理系統(vector、map協作實現)

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 專欄介紹:《編程項目實戰》 目錄 一、為什么選擇C++開發通訊錄系統?1. C++的現狀2. STL標準模板庫的威力二、系統架構設計與STL容器選型1. 三層架構…

Spring Boot 常用注解面試題深度解析

🤟致敬讀者 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺 📘博主相關 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息 文章目錄 Spring Boot 常用注解面試題深度解析一、核心…

黃曉明新劇《潛淵》定檔 失憶三面間諜開啟諜戰新維度

據悉,黃曉明領銜主演的諜戰劇《潛淵》已于近日正式定檔6月9日,該劇以“失憶三面間諜”梁朔為核心,打破傳統諜戰劇的框架和固有角度,以一種特別的視角將懸疑感推向極致。劇中,梁朔因頭部受傷失去記憶,陷入身…

【自動駕駛避障開發】如何讓障礙物在 RViz 中‘顯形’?呈現感知數據轉 Polygon 全流程

【自動駕駛避障開發】如何讓障礙物在 RViz 中"顯形"?呈現感知數據轉 Polygon 全流程 自動駕駛系統中的障礙物可視化是開發調試過程中至關重要的一環。本文將詳細介紹如何將自動駕駛感知模塊檢測到的障礙物數據轉換為RViz可顯示的Polygon(多邊形)形式,實現障礙物…

#16 學習日志軟件測試

#16 #13布置的任務都沒有wanc 反思一下 一個是貪玩 一個是懶 還有一個原因是學習方式 單看視頻容易困 然后是一個進度寶貝 java ai 編程 完 挑著看的 廖雪峰教程 完 速看 很多過時 javaweb ai筆記 見到13.aop 小林coding 看到4.并發 java guide 還沒開始 若依框架 筆…

在Linux查看電腦的GPU型號

VGA 是指 Video Graphics Array,這是 IBM 于 1987 年推出的一種視頻顯示標準。 lspci | grep vga 📌 lspci | grep -i vga 的含義 lspci:列出所有連接到 PCI 總線的設備。 grep -i vga:過濾輸出,僅顯示包含“VGA”字…

daz3d + PBRSkin (MDL)+ SSS

好的,我們來解釋一下 Daz3D 中的 PBRSkin (MDL) Shader。 簡單來說,PBRSkin (MDL) 是 Daz Studio 中一種基于物理渲染(PBR)技術、專門用于創建高度逼真人物皮膚效果的著色器(Shader)。 它利用 NVIDIA 的材…

會計 - 合并1- 業務、控制、合并日

一、業務 1.1 業務的定義以及構成要素 業務,是指企業內部某些生產經營活動或資產的組合,該組合一般具有投入、加工處理過程和產出能力,能夠獨立計算其成本費用或所產生的收入。 (1)投入,指原材料、人工、必要的生產技術等無形資產以及構成產出能力的機器設備等其他長期資…

uni-app 項目支持 vue 3.0 詳解及版本升級方案?

uni-app 支持 Vue 3.0 詳解及升級方案 一、uni-app 對 Vue 3.0 的支持現狀 uni-app 從 3.0 版本 開始支持 Vue 3.0,主要變化包括: 核心框架升級: 基于 Vue 3.0 的 Composition API 和 Options API 雙模式支持提供 vueuse/core 等組合式 API…

Java高級 | 【實驗三】Springboot 靜態資源訪問

隸屬文章: Java高級 | (二十二)Java常用類庫-CSDN博客 系列文章: Java高級 | 【實驗一】Spring Boot安裝及測試 最新-CSDN博客 Java高級 | 【實驗二】Springboot 控制器類相關注解知識-CSDN博客 目錄 一、Thymeleaf 1.1 是什么&…