ROS 時間の概念の概要: ros::Time、ros::Duration

ROSでよく使われる変数は時間で、時間と制御量からロボットの移動距離を計算したり、プログラムの待ち時間やサイクルタイムを設定したり、タイマーを設定したりするなどです。この記事では、roscpp によって提供される時間関連の操作を要約します。具体的には、roscpp には時間 (ros::Time) と継続時間 (ros::Duration) の 2 つの時間表現方法があります。期間には負の数を指定できます。Time と Duration には同じメンバーが含まれています。

int32 sec
int32 nsec

通常の状況では、ここでの時刻はプラットフォーム (システム) の時刻に関連しますが、ROS はアナログ クロックである ROS クロック時刻を提供しており、対応する設定が行われると、ここでの時刻が ROS クロック時刻になります。

基本的な使い方

時間と継続時間を使用するには、それぞれ #include <ros/time.h> と #include <ros/duration.h> を使用します。
よく使用される関数は次のとおりです。

//获取当前时间
ros::Time begin=ros::Time::now();   
 
//定义类对象
ros::Time::Time(uint32_t _sec, uint32_t _nsec)
ros::Time::Time(double t)
 
ros::Duration::Duration(uint32_t _sec, uint32_t _nsec)
ros::Duration::Duration(double t)
//_sec是秒,_nsec是纳秒
//故ros::Time a_little_after_the_beginning(0, 1000000);等价于ros::Time a_little_after_the_beginning(0.001);
 
//实列
ros::Time at_some_time1(5,20000000);    //逗号之前表示 second,逗号之后表示 nanosecond
ros::Time at_some_time2(5.2)    //同上,重载了float类型和两个uint类型的构造函数
ros::Duration one_hour(60*60,0); //1h
double secs1=at_some_time1.toSec();//将 Time 转为 double 型时间
double secs2=one_hour.toSec();//将 Duration 转为 double 型时间

Time と Duration は異なる概念を表します。Time は特定の瞬間を指し、Duration は特定の期間を指します。データ構造は同じですが、異なるシナリオで使用する必要があります。ROS は、Time 型と Duration 型の間の加算および減算演算をオーバーロードし、変換の問題を回避します。
例えば:

ros::Time t1=ros::Time::now()-ros::Duration(5.5);//t1是5.5s前的时刻,Time加减Duration返回Time
ros::Time t2=ros::Time::now()+ros::Duration(3.3);//t2是当前时刻往后推3.3s的时刻
ros::Duration d1=t2-t1;//从t1到t2的时长,两个Time相减返回Duration类型
ros::Duration d2=d1-ros::Duration(0,300);//两个Duration相减,返回Duration
uint64_t     toNSec () const
double     toSec () const

これら 2 つの関数を使用して、時間と継続時間を変換できます。上記は時間と継続時間の間の加算と減算の演算です。時間 + 時間の演算はないことに注意してください。

おすすめ

転載: blog.csdn.net/qq_39523365/article/details/131191935