<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 6.6 時鐘 ## 6.6.1 Time 與 Duration ROS里經常用到的一個功能就是時鐘,比如計算機器人移動距離、設定一些程序的等待時間、設定計時器等等。roscpp同樣給我們提供了時鐘方面的操作。 具體來說,roscpp里有兩種時間的表示方法,一種是時刻(ros::Time),一種是時長(ros::Duration)。無論是Time還是Duration都具有相同的表示方法: ··· int32 sec int32 nsec ··· Time/Duration都由秒和納秒組成。 要使用Time和Duration,需要`#include <ros/time.h>`和`#include <ros/duration.h>` ```cpp ros::Time begin = ros::Time::now(); //獲取當前時間 ros::Time at_some_time1(5,20000000); //5.2s 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類型之間的加減運算,比如: ```cpp 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 ``` 以上是Time、Duration之間的加減運算,要注意沒有Time+Time的做法。 ## 6.6.2 sleep 通常在機器人任務執行中可能有需要等待的場景,這時就要用到sleep功能,roscpp中提供了兩種sleep的方法: ```cpp ros::Duration(0.5).sleep(); //用Duration對象的sleep方法休眠 ros::Rate r(10); //10HZ while(ros::ok()) { r.sleep(); //定義好sleep的頻率,Rate對象會自動讓整個循環以10hz休眠,即使有任務執行占用了時間 } ``` ## 6.6.3 Timer Rate的功能是指定一個頻率,讓某些動作按照這個頻率來循環執行。與之類似的是ROS中的定時器Timer,它是通過設定回調函數和觸發時間來實現某些動作的反復執行,創建方法和topic中的subscriber很像。 ```cpp void callback1(const ros::TimerEvent&) { ROS_INFO("Callback 1 triggered"); } void callback2(const ros::TimerEvent&) { ROS_INFO("Callback 2 triggered"); } int main(int argc, char **argv) { ros::init(argc, argv, "talker"); ros::NodeHandle n; ros::Timer timer1 = n.createTimer(ros::Duration(0.1), callback1); //timer1每0.1s觸發一次callback1函數 ros::Timer timer2 = n.createTimer(ros::Duration(1.0), callback2); //timer2每1.0s觸發一次callback2函數 ros::spin(); //千萬別忘了spin,只有spin了才能真正去觸發回調函數 return 0; } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看