ROS time stamp and sync


1.

https://answers.ros.org/question/189867/what-is-the-timestamp/

 

In ROS messages timestamp is taken from your system, which is unix epoch time.

Check Unix epoch time here.

For synchronisation look message_filters

Documentaiton of the datatypes are at: http://wiki.ros.org/rospy/Overview/Time and http://wiki.ros.org/rospy/Overview/Time

link

Comments

Also, if the workstation and the device are significantly off, you can sync the two with chrony. Just mentioning because it took me too long to figure out...

 

2.

The Unix epoch (or Unix time or POSIX time or Unix timestamp) is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT), not counting leap seconds (in ISO 8601: 1970-01-01T00:00:00Z).

Literally speaking the epoch is Unix time 0 (midnight 1/1/1970), but 'epoch' is often used as a synonym for 'Unix time'. Many Unix systems store epoch dates as a signed 32-bit integer, which might cause problems on January 19, 2038 (known as the Year 2038 problem or Y2038).

 

3.

https://blog.csdn.net/zyh821351004/article/details/47758433

最近做ekfslam,有兩個數據輸入/odom 與/ img信息,剛開始這兩個都是通過rosbag包回放,分別有兩個toptic訂閱回調函數觸發不同的處理.

這在后面處理的時候又需要對這兩數據進行相應的時間同步,我之前采用的是odom建立vector向量表存儲(頻率比圖像快),后面以img數據為准,

從img的時間戳搜索最近的odom. 然后再將這兩數據傳入ekfslam進行預測與更新. 而我這種處理方式又必須得考慮類成員與多線程(topic消息機制)

存在成員變量在過程中強行覆蓋的問題.

    今天與根哥討論,建議我用消息同步的方式進行回調同步處理. 我這就參考wiki試着開干了.

    通過對多輸入通道的輸入topic的時間戳分析,進行同步,將同步的所有消息以一個回調的方式觸發,

方式一: 全局變量形式  : TimeSynchronizer

步驟:

     1.   message_filter ::subscriber 分別訂閱不同的輸入topic

     2.  TimeSynchronizer<Image,CameraInfo>   定義時間同步器;

    3.  sync.registerCallback      同步回調

     4.  void callback(const ImageConstPtr&image,const CameraInfoConstPtr& cam_info)     帶多消息的消息同步自定義回調函數

相應的API  message_filters::TimeSynchronizer

 

4

https://blog.csdn.net/bluewhalerobot/article/details/80429714

這里的程序tf時間戳用的是當前時間,也就是處理這個位置信息時的時間。但是如果我們的機器人性能比較弱,可能處理這個位置信息的時間和位置信息實際產生的時間差挺多。這樣當其他數據需要坐標系轉換的時候,就會采用錯誤的tf數據從而產生誤差。我們以具體的數字為例
比如我們現在在1s的時刻得到小海龜的位置是(0,0), 小海龜在以1m/s的速度沿X軸直線運動。我們的小海龜性能很弱。消息處理的時間和實際位置消息產生的時間差了1s。我們現在通過超聲波測量到了小海龜前面1m處有一個障礙物。我們想知道這個障礙物在world坐標系下的坐標。我們首先找到當前時刻附近的tf變換,但是這個tf變換實際上是根據1s之前小海龜的位置計算的,當時小海龜的位置是(-1,0)。所以根據這個tf變換我們計算出這個障礙物的位置坐標是(0,0)。如果用這個數據去做路徑規划,肯定出現的是錯誤的結果。

當然上面是一個誇張的例子,但是實際確實會因此引入誤差。那么正確的做法是什么呢?
以消息產生的時間戳作為tf變換的時間戳。因為坐標變換是根據消息計算出來的,所以其有效的時刻就應該是消息有效的時刻。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM