每天不調點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
來啓動節點對應信息獲取函數的回調進程。更加詳細的介紹可以參考第四部分的鏈接內容。