遭遇した事例
- 研究室がお盆休みで停電したとき、PCやロボット周りの主電源を落とすのを忘れた
- (先生や諸先輩方にバレたら
自主規制されてしまう大失態)
- (先生や諸先輩方にバレたら
- 研究で使用しているサービスロボットが動かなくなった
- JointTrajectoryを介した制御が全くできなくなる
- ロボットの姿勢(?)を取ろうとしたときに、表題にも記した以下のエラーを吐く
ExtrapolationException: Lookup would require extrapolation Xs into the future. Requested time XX but the latest data is at time XX, when looking up transform from frame [hoge] to frame [hoge]
原因
- 停電した関係でロボットの中の時計が狂ってた(こっそりSSHで忍び込んで確認)
- JSTにしてあったLocal TimeがUTCに戻ってた(JSTのままだった制御PCと噛み合わない)
- 確認方法:
timedatectl
- 確認方法:
- そもそものRTC TIMEも狂ってた(多分)
- 確認方法:同上
- JSTにしてあったLocal TimeがUTCに戻ってた(JSTのままだった制御PCと噛み合わない)
対処法1
- Local TimeをJSTに戻す
- 時間も合わせちゃう
てことで以下を実行(stop, startでそれぞれpasswordを要求されるので1行ずつ実行する)
/etc/init.d/chrony stop
sudo ntpdate ntp.nict.jp
/etc/init.d/chrony start
対処法2
import tf2_ros
tf_buffer = tf2_ros.Buffer()
tf_listener = tf2_ros.TransformListener(tf_buffer)
tf_buffer.clear()
TFのバッファをリセットするコード。こっちのほうが確実?
参考文献
- http://wiki.ros.org/ROS/NetworkSetup#Timing_issues.2C_TF_complaining_about_extrapolation_into_the_future.3F:~:text=on%20common%20problems.-,Timing%20issues%2C%20TF%20complaining%20about%20extrapolation%20into%20the%20future%3F,expected%20round%2Dtrip%20delay).%20For%20isolated%20networks%20look%20here.,-Wiki%3A%20ROS/NetworkSetup
- https://zenn.dev/karaage0703/articles/47838858dd3107
- https://s-port.shinwart.com/tech-column/kawatama05/