ROS開發 之 資料通訊(活動)

2021-09-02 18:13:21 字數 2506 閱讀 7032

ros中通訊方式有三種,分別為話題(msg)、服務(srv)和活動(action),其中話題屬於基本的發布/訂閱通訊方式,適用於單個節點發布訊息,乙個或多個節點接受訊息的情況;服務屬於實時獲取結果的情況,應用於請求/響應式的應用環境,類似於乙個函式呼叫關係,適用於基本功能的呼叫或者狀態的檢視;活動屬於無阻塞的執行方式,也應用於請求/響應式的環境,具有比服務更靈活的控制形式,並且在執 行的過程中可以對狀態的反饋,適用於執行需要較長時間的情況。

建立目錄:

mkdir action

目錄中建立檔案:

pushup.action # goal uint32 push_up_count --- # result duration time_used --- #feedback duration time_elapsed uint32 finish_count uint32 remain_count

為構建增加編譯庫:

pakage.xml actionlib_msgs actionlib_msgs

為構建增加庫說明:

cmakelists.txt find_package(#

約在第10

行 **** actionlib_msgs  #

新增 ) catkin_package(#

約在第105

行 **** catkin_depends actionlib_msgs #

新增 ) add_action_files(#

約在第66

行,此處不同於訊息和服務

**** directory action   #

新增 files pushup.action  #

新增 ) generate_messages(#

約在第71

行 dependencies actionlib_msgs    #

新增 ) #

去掉注釋以啟用

進入catkin

根目錄:

cd ~/catkin_ws

編譯生成:

catkin_make

檢視訊息:

catkin_make編譯之後,會在vejoe_slam包中新生成多個訊息檔案,這些訊息檔案用於實現活動的互動協議,在呼叫action時,系統會用到對應的訊息,從這裡可以基本看出活動是基於訊息實現的。

pushupaction.msg

pushupactiongoal.msg

pushupactionresult.msg

pushupactionfeedback.msg

pushupgoal.msg

pushupresult.msg

pushupfeedback.msg

本實用活動的示例為乙個做俯臥撐的功能,活動本身用於實現做俯臥撐的功能,並反饋當前已經做了多少個,用時多久,在呼叫端可以指定要做多少個,並隨時檢視當前已經做的個數和狀態。

拷貝程式到

src目錄:

demo_action.py

,demo_action_client.py

檔案執行授權:

chmod +x demo_action.py demo_action_client.py

啟動主節點:

roscore

啟動活動:

rosrun vejoe_slam demo_action.py

呼叫服務:

左側為主節點,右上為活動啟動(服務端),右下為活動呼叫(客戶端)

if __name__ == '__main__':

rospy.init_node('pushup_action_client')

client = pushupactionclient(rospy.get_name())

print '**********==='

client.showwork()

print '#############'

client.showcancel()

print '*************'

client.showinvalid()

rospy.spin()

客戶端主函式如上,其執行結果如上圖所示,當正常執行時會順序執行完所有任務,對於第二種取消的情況認為是中斷了活動,第三種非正常資料資料活動裡面任務的一部分,可以進行判斷和響應。

歡迎感興趣的朋友一起加qq**流學習。

ROS開發 之 資料通訊(服務)

ros中通訊方式有三種,分別為話題 msg 服務 srv 和活動 action 其中話題屬於基本的發布 訂閱通訊方式,適用於單個節點發布訊息,乙個或多個節點接受訊息的情況 服務屬於實時獲取結果的情況,應用於請求 響應式的應用環境,類似於乙個函式呼叫關係,適用於基本功能的呼叫或者狀態的檢視 活動屬於無...

Android開發之USB資料通訊

android開發中usb串列埠通訊開發主要涉及到以下幾個類及相應的方法 1 usbmanager 負責管理usb裝置的類,你可以在相應 中通過以下方法獲得 獲取usbmanager例項方法 usbmanager manager usbmanager getsystemservice context...

Activity資料通訊

若要從子activity獲取返回資訊時,可呼叫以下activity方法 public void startactivityforresult intent intent,int requestcode 該方法的第乙個引數為intent,第二個引數是請求 請求碼是先傳送給子activity,然後再返回...