ROS-Industrial 之 MoveIt —— 讀取實際機器人的狀態

每天不調點BUG,感覺渾身不自在。不過接下來要記錄的這個問題,可能是由於個人編程習慣的原因導致的,致使自己會遇到這種問題。如果有良好的編程習慣,可能這都不是一個問題,畢竟隨手多敲幾行代碼就消除了隱患。

1. 問題描述

在利用ROS-I控制實體機器人的過程中,需要讀取實際機器人當前位姿等信息,但在利會MoveIt提供的函數getCurrentPose()獲取信息時,會報錯:

[ INFO] [1590636099.040013320]: Didn't received robot state (joint angles) with recent timestamp within 1 seconds.
Check clock synchronization if your are running ROS across multiple machines!
[ERROR] [1590636099.040116649]: Failed to fetch current robot state

但在執行getJointNames()時,能夠正常獲取結果。

2. 解決方法

在類的變量中加入ros::AsyncSpinner變量spinner,並在執行數據獲得函數之前對其進行初始化,並啓動spinner.start()。至於在什麼地方結束spinner.stop(),則看各自的程序需要。

3. 原因分析

初步分析的結果就是,MoveIt裏的信息獲取函數是基於對相關topic信息的接收進而計算或是查詢得到的,所以需要spinner來啓動節點對應信息獲取函數的回調進程。更加詳細的介紹可以參考第四部分的鏈接內容。

4. 參考資料

[1] roscpp/Overview/Callbacks and Spinning

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章