kazunosuke1108
@kazunosuke1108 (和之介)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

rospy.Time.now()でタイムスリップが発生する

解決したいこと

rospy.Time.now()を実行したときに,時刻が1秒に1回未来方向に吹っ飛ぶ現象が出ています.
他に経験したことがある方がいれば,解決策を教えていただきたいです.

発生している問題・エラー

image.png
青がtime.time(), 赤がrospy.Time.now()です.

該当するソースコード

#!/usr/bin/python
# -*- coding: utf-8 -*-

import numpy as np
import rospy
import time

rospy.init_node('TimeStamp')

start_time=time.time()
start_rospy=rospy.Time.now()
timelist_time=[]
timelist_rospy=[]
while rospy.Time.now()-start_rospy<rospy.Duration(2):
    now=rospy.Time.now()
    timelist_rospy.append(float(str(now.secs)+"."+str(now.nsecs)))
    timelist_time.append(time.time())
plt.scatter(np.arange(len(timelist_time)),timelist_time,s=1)
plt.scatter(np.arange(len(timelist_rospy)),timelist_rospy,s=1)
plt.show()

よろしくお願いします.

0

1Answer

問題の発生はここでしょう。

timelist_rospy.append(float(str(now.secs)+"."+str(now.nsecs)))

時間が 0.000000001 秒 の場合
str(now.secs) は '0'
str(now.nsecs)は '1'
となります。

この場合でのプログラムの連結結果は ' 0.1' となります。
0.000000001秒 が 0.1秒になりますね。 (はい! タイムスリップしました)

原因は、str(now.nsecs) の頭に 0 が無いからです。

timelist_rospy.append(float(str(secs)+"."+format(nsecs,'09')))
にすればいかがでしょうか?

2Like

Comments

  1. @kazunosuke1108

    Questioner

    なるほど、たしかにそうですね!
    試したところ解決しました!ご回答頂きありがとうございました!!!

Your answer might help someone💌