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,然後再返回...