>、= ==等運算符。 成員變量uint32_t sec, nsec其實就是時間的秒和納秒兩部分,它們合起來構成一個完整的時刻。 至于為啥要分成兩部分而不是用一個來定義,可能是考慮到整數表示精度的問題。 因為32位整數最大表示的數字是2147483647。如果我們要用納秒這個范圍估計是不夠的。 你可能會問,機器人系統怎" />

色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ROS文件間的依賴關系

麥辣雞腿堡 ? 來源:古月居 ? 作者:古月居 ? 2023-09-14 18:17 ? 次閱讀

** TimeBase基類**

首先看time.h文件,它定義了一個叫TimeBase的類。注釋中說,TimeBase是個基類,定義了兩個成員變量uint32_t sec, nsec,還重載了+ ++、? -?、< <<、> >>、= ==等運算符。

成員變量uint32_t sec, nsec其實就是時間的秒和納秒兩部分,它們合起來構成一個完整的時刻。

至于為啥要分成兩部分而不是用一個來定義,可能是考慮到整數表示精度的問題。

因為32位整數最大表示的數字是2147483647。如果我們要用納秒這個范圍估計是不夠的。

你可能會問,機器人系統怎么會使用到納秒這么高精度的時間分辨率,畢竟控制器定時器最高精度可能也只能到微秒?

如果你做過自動駕駛項目,有使用過GPS和激光雷達傳感器的經驗,就會發現GPS的時鐘精度就是納秒級的,它可以同步激光雷達每個激光點的時間戳。

還有,為什么定義TimeBase這個基類,原因大家很容易就能猜到。

因為在程序里,時間本質上就是一個數字而已,數字系統的序關系(能比較大小)和運算(加減乘除)也同樣適用于時間這個東西。

當然,這里只有加減沒有乘除,因為時間的乘除沒有意義。

Time類

緊接著TimeBase類的是Time類,它是TimeBase的子類。我們做機器人應用程序開發時用不到TimeBase基類,但是Time類會經常使用。

now()函數

Time類比TimeBase類多了now()函數,它是我們的老熟人了。在開發應用的時候,我們直接用下面的代碼就能得到當前的時間戳:

ros::Time begin = ros::Time::now(); //獲取當前時間

now()函數的定義在rostimesrctime.cpp里,因為它很常用很重要,筆者就把代碼粘貼在這里,如下。

函數很簡單,可以看到,如果定義了使用仿真時間(g_use_sim_time為true),那就使用仿真時間,否則就使用墻上時間。

Time Time::now()
{
    if (!g_initialized)
        throw TimeNotInitializedException();
    if (g_use_sim_time)
      {
        boost::mutex::scoped_lock lock(g_sim_time_mutex);
        Time t = g_sim_time;
        return t;
      }
    Time t;
    ros_walltime(t.sec, t.nsec);
    return t;
  }

在ROS里,時間分成兩類,一種叫仿真時間,一種叫墻上時間。

顧名思義,墻上時間就是實際的客觀世界的時間,它一秒一秒地流逝,誰都不能改變它,讓它快一點慢一點都不可能,除非你有超能力。

仿真時間則是可以由你控制的,讓它快它就快。之所以多了一個仿真時間,是因為有時我們在仿真機器人希望可以自己控制時間,例如為了提高驗證算法的效率,讓它按我們的期望速度推進。

在使用墻上時間的情況下,now()函數調用了ros_walltime函數,這個函數也在rostimesrctime.cpp里。

剝開層層洋蔥皮,最后發現,這個ros_walltime函數才是真正調用操作系統時間函數的地方,而且它還是個跨平臺的實現(Windows和Linux)。

如果操作系統是Linux,那它會使用clock_gettime函數,在筆者使用的Ubuntu 18.04系統中這個函數在usrinclude路徑下。

但是萬一缺少這個函數,那么ROS會使用gettimeofday函數,但是gettimeofday沒有clock_gettime精確,clock_gettime能提供納秒的精確度。

如果操作系統是Windows,那它會使用標準庫STL的chrono庫獲取當前的時刻,要用這個庫只需要引用它的頭文件,所以在time.cpp中引用了#include。

具體使用的函數就是

std::chrono::system_clock::now().time_since_epoch()。

當然,時間得是秒和納秒的形式,所以用了count方法:

uint64_t now_ns = std::chrono::duration_cast< std::chrono::nanoseconds >
                  (std::chrono::system_clock::now().time_since_epoch()).count();

WallTime類

后面又接著聲明了WallTime類和SteadyTime類。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    16398

    瀏覽量

    178544
  • 定時器
    +關注

    關注

    23

    文章

    3251

    瀏覽量

    115013
  • 文件
    +關注

    關注

    1

    文章

    569

    瀏覽量

    24769
  • ROS
    ROS
    +關注

    關注

    1

    文章

    278

    瀏覽量

    17035
收藏 人收藏

    評論

    相關推薦

    如何在ROS中調用.so文件

    的是 liblibdaq-2.0.0.so這個文件,下面以ROS為例子怎么調用.so文件。 結合cmake的使用 新建工作空間,功能包等流程不再贅述,網上已經有很多教程了。著重講cmakelist的配置
    發表于 07-02 14:44

    怎么解決依賴關系中vi沖突?

    沖突項是Error Cluster From Error Code.vi。如果不在依賴關系中可以放進項目庫中來解決同名沖突。在依賴關系中怎么解決?大神指教
    發表于 09-25 21:14

    【Toybrick RK3399Pro AI開發板試用體驗】Fedora系統安裝ROS

    ; melodic-ros_comm.rosinstall$ wstool init -j8 src melodic-ros_comm.rosinstall解決依賴關系$ rosdep
    發表于 07-07 17:36

    ROS是否適用于工業?

    于主機,而是將消息層替換為依賴DDS(數據分發服務)。實時系統:我們希望在ROS中直接支持實時控制,包括進程和機器的通信(假設適當的操作系統和/或硬件支持)。雖然
    發表于 10-17 13:24

    在Android中使用ROS

    使用Android Studio. 其ROS相關的配置方式可以有兩種。一種是在ROS環境中使用,另一種是給普通的Android App添加上ROS依賴庫。第二種方式可以在開發機器沒有
    發表于 05-16 19:16

    ROS與STM32之間的聯系

    ROS與STM32之間的聯系簡介ROS主要實現的功能STM32主要實現的功能兩者之間的關系兩者之間的通信簡介1、如何實現ROS與stm32之間的通信,
    發表于 06-28 07:49

    怎樣去使用ROS中的launch啟動文件

    怎樣去使用ROS中的launch啟動文件呢?ROS中的launch啟動文件該怎樣去使用呢?
    發表于 02-14 07:23

    在FirePrime開發板上編譯安裝ROS jade

    ,底層設備控制,常用功能實現,進程消息以及數據包管理。ROS是基于一種圖狀架構,從而不同節點的進程能接受,發布,聚合各種信息(例如傳感,控制,狀態,規劃等等)。感興趣的可以去ROS Wiki,那里有
    發表于 07-07 11:21

    ROS教程之ROS機器人操作系統基礎知識概述資料免費下載

    ROS文件系統介紹 (1)快速了解ROS文件系統概念 ? 軟件包集(Stack):如果你將幾個具有某些功能的軟件包組織在一起,那么你將會獲得一個軟件包集。在
    發表于 10-15 08:00 ?20次下載
    <b class='flag-5'>ROS</b>教程之<b class='flag-5'>ROS</b>機器人操作系統基礎知識概述資料免費下載

    如何在IDEA中查看依賴關系

    Maven提供了mvn dependency:tree來查看依賴關系,而IDE往往提供了更加便利的方式,比如Eclipse或者IDEA都有類似的功能,這篇文章簡單說明一下如何在IDEA中查看依賴
    的頭像 發表于 10-17 09:48 ?1.9w次閱讀

    ROS是如何設計的 ROS客戶端庫

    實現通信的代碼在ros_comm包中,如下。 其中clients文件夾一共有127個文件,看來是最大的包了。 現在我們來到了ROS最核心的地帶。 客戶端這個名詞出現的有些突然,一個機器
    的頭像 發表于 09-14 17:29 ?879次閱讀
    <b class='flag-5'>ROS</b>是如何設計的 <b class='flag-5'>ROS</b>客戶端庫

    Unity與ROS鏈接介紹

    ROS鏈接 ROS方面的準備步驟如下,首先添加端口號“10000”“5005”,啟動Docker鏡像。 Unity和ROS之間的通信需要端口號“10000”“5005”。為了在Unity中導入消息
    的頭像 發表于 11-17 17:22 ?1028次閱讀
    Unity與<b class='flag-5'>ROS</b>鏈接介紹

    ROS Motion Planning運動規劃庫如何安裝相關依賴

    工作空間的src文件夾下,并解壓 安裝相關依賴 (1)關于Python 關于Python推薦使用Python3,對于Ubuntu20.04對應的ROS Noetic一般默認使用的都是Python3,可以在終端執行python指令
    的頭像 發表于 11-26 17:29 ?1198次閱讀

    ros的基本概念是什么

    基本概念: ROS是一個用于在不同進程匿名的發布、訂閱、傳遞信息的中間件。 ROS2系統的核心部分是ROS網絡(ROS Graph)。
    的頭像 發表于 11-27 11:21 ?1837次閱讀

    ros怎么設置環境變量

    可以使用的動態的值,用于影響運行程序的行為。環境變量通常包含一些關鍵信息,如路徑、用戶名、顏色選項等。 在ROS中,環境變量是重要的,因為它們用于確定ROS如何運行和找到相關文件和程序。 為什么要設置
    的頭像 發表于 12-28 13:52 ?2107次閱讀
    主站蜘蛛池模板: 国产成年人在线观看| 久久学生精品国产自在拍| 暖暖在线观看播放视频| 99久女女精品视频在线观看| 欧美激情精品久久久久| 钉钉女老师| 亚洲视频在线看| 欧美精品AV一区二区无码| 国产成人精品免费视频大| 亚洲午夜久久影院| 欧美一区二区日韩一区二区| 国产精品久久久久久精品... | 欧美牲交A欧美牲交VDO| 国产精品久久久久久亚洲毛片| 影音先锋2017av天堂| 热思思| 好男人在线视频| MELODY在线播放无删减| 亚洲精品蜜夜内射| 青草久久精品亚洲综合专区| 国模沟沟一区二区三区| 99久女女精品视频在线观看| 亚洲国产中文字幕新在线| 欧美末成年videos丨| 国语自产偷成人精品视频| SM脚奴调教丨踩踏贱奴| 亚洲日本va中文字幕久久| 日本视频中文字幕一区二区| 久九九精品免费视频| 国产AV电影区二区三区曰曰骚网| 伊人最新网址| 网红刘婷hd国产高清| 暖暖视频在线高清播放| 国产中的精品AV一区二区| 草莓视频在线看免费高清观看| 一本道无码字幕在线看| 我的奶头被客人吸的又肿又红| 欧美精品AV无码一区二区| 久久99热成人精品国产| 国产色精品VR一区二区| 成人毛片免费播放|