>、= ==等運(yùn)算符。 成員變量uint32_t sec, nsec其實(shí)就是時(shí)間的秒和納秒兩部分,它們合起來(lái)構(gòu)成一個(gè)完整的時(shí)刻。 至于為啥要分成兩部分而不是用一個(gè)來(lái)定義,可能是考慮到整數(shù)表示精度的問(wèn)題。 因?yàn)?2位整數(shù)最大表示的數(shù)字是2147483647。如果我們要用納秒這個(gè)范圍估計(jì)是不夠的。 你可能會(huì)問(wèn),機(jī)器人系統(tǒng)怎" />

99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ROS文件間的依賴關(guān)系

麥辣雞腿堡 ? 來(lái)源:古月居 ? 作者:古月居 ? 2023-09-14 18:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

** TimeBase基類**

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

成員變量uint32_t sec, nsec其實(shí)就是時(shí)間的秒和納秒兩部分,它們合起來(lái)構(gòu)成一個(gè)完整的時(shí)刻。

至于為啥要分成兩部分而不是用一個(gè)來(lái)定義,可能是考慮到整數(shù)表示精度的問(wèn)題。

因?yàn)?2位整數(shù)最大表示的數(shù)字是2147483647。如果我們要用納秒這個(gè)范圍估計(jì)是不夠的。

你可能會(huì)問(wèn),機(jī)器人系統(tǒng)怎么會(huì)使用到納秒這么高精度的時(shí)間分辨率,畢竟控制器定時(shí)器最高精度可能也只能到微秒?

如果你做過(guò)自動(dòng)駕駛項(xiàng)目,有使用過(guò)GPS和激光雷達(dá)傳感器的經(jīng)驗(yàn),就會(huì)發(fā)現(xiàn)GPS的時(shí)鐘精度就是納秒級(jí)的,它可以同步激光雷達(dá)每個(gè)激光點(diǎn)的時(shí)間戳。

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

因?yàn)樵诔绦蚶铮瑫r(shí)間本質(zhì)上就是一個(gè)數(shù)字而已,數(shù)字系統(tǒng)的序關(guān)系(能比較大小)和運(yùn)算(加減乘除)也同樣適用于時(shí)間這個(gè)東西。

當(dāng)然,這里只有加減沒(méi)有乘除,因?yàn)闀r(shí)間的乘除沒(méi)有意義。

Time類

緊接著TimeBase類的是Time類,它是TimeBase的子類。我們做機(jī)器人應(yīng)用程序開發(fā)時(shí)用不到TimeBase基類,但是Time類會(huì)經(jīng)常使用。

now()函數(shù)

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

ros::Time begin = ros::Time::now(); //獲取當(dāng)前時(shí)間

now()函數(shù)的定義在rostimesrctime.cpp里,因?yàn)樗艹S煤苤匾P者就把代碼粘貼在這里,如下。

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

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里,時(shí)間分成兩類,一種叫仿真時(shí)間,一種叫墻上時(shí)間。

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

仿真時(shí)間則是可以由你控制的,讓它快它就快。之所以多了一個(gè)仿真時(shí)間,是因?yàn)橛袝r(shí)我們?cè)诜抡鏅C(jī)器人希望可以自己控制時(shí)間,例如為了提高驗(yàn)證算法的效率,讓它按我們的期望速度推進(jìn)。

在使用墻上時(shí)間的情況下,now()函數(shù)調(diào)用了ros_walltime函數(shù),這個(gè)函數(shù)也在rostimesrctime.cpp里。

剝開層層洋蔥皮,最后發(fā)現(xiàn),這個(gè)ros_walltime函數(shù)才是真正調(diào)用操作系統(tǒng)時(shí)間函數(shù)的地方,而且它還是個(gè)跨平臺(tái)的實(shí)現(xiàn)(Windows和Linux)。

如果操作系統(tǒng)是Linux,那它會(huì)使用clock_gettime函數(shù),在筆者使用的Ubuntu 18.04系統(tǒng)中這個(gè)函數(shù)在usrinclude路徑下。

但是萬(wàn)一缺少這個(gè)函數(shù),那么ROS會(huì)使用gettimeofday函數(shù),但是gettimeofday沒(méi)有clock_gettime精確,clock_gettime能提供納秒的精確度。

如果操作系統(tǒng)是Windows,那它會(huì)使用標(biāo)準(zhǔn)庫(kù)STL的chrono庫(kù)獲取當(dāng)前的時(shí)刻,要用這個(gè)庫(kù)只需要引用它的頭文件,所以在time.cpp中引用了#include。

具體使用的函數(shù)就是

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

當(dāng)然,時(shí)間得是秒和納秒的形式,所以用了count方法:

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

WallTime類

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    17113

    瀏覽量

    184336
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3298

    瀏覽量

    118963
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    579

    瀏覽量

    25373
  • ROS
    ROS
    +關(guān)注

    關(guān)注

    1

    文章

    288

    瀏覽量

    17752
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    怎么解決依賴關(guān)系中vi沖突?

    沖突項(xiàng)是Error Cluster From Error Code.vi。如果不在依賴關(guān)系中可以放進(jìn)項(xiàng)目庫(kù)中來(lái)解決同名沖突。在依賴關(guān)系中怎么解決?大神指教
    發(fā)表于 09-25 21:14

    【Toybrick RK3399Pro AI開發(fā)板試用體驗(yàn)】Fedora系統(tǒng)安裝ROS

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

    ROS是否適用于工業(yè)?

    于主機(jī),而是將消息層替換為依賴DDS(數(shù)據(jù)分發(fā)服務(wù))。實(shí)時(shí)系統(tǒng):我們希望在ROS中直接支持實(shí)時(shí)控制,包括進(jìn)程和機(jī)器的通信(假設(shè)適當(dāng)?shù)牟僮飨到y(tǒng)和/或硬件支持)。雖然
    發(fā)表于 10-17 13:24

    在Android中使用ROS

    使用Android Studio. 其ROS相關(guān)的配置方式可以有兩種。一種是在ROS環(huán)境中使用,另一種是給普通的Android App添加上ROS依賴庫(kù)。第二種方式可以在開發(fā)機(jī)器沒(méi)有
    發(fā)表于 05-16 19:16

    ROS與STM32之間的聯(lián)系

    ROS與STM32之間的聯(lián)系簡(jiǎn)介ROS主要實(shí)現(xiàn)的功能STM32主要實(shí)現(xiàn)的功能兩者之間的關(guān)系兩者之間的通信簡(jiǎn)介1、如何實(shí)現(xiàn)ROS與stm32之間的通信,
    發(fā)表于 06-28 07:49

    怎樣去使用ROS中的launch啟動(dòng)文件

    怎樣去使用ROS中的launch啟動(dòng)文件呢?ROS中的launch啟動(dòng)文件該怎樣去使用呢?
    發(fā)表于 02-14 07:23

    在FirePrime開發(fā)板上編譯安裝ROS jade

    ,底層設(shè)備控制,常用功能實(shí)現(xiàn),進(jìn)程消息以及數(shù)據(jù)包管理。ROS是基于一種圖狀架構(gòu),從而不同節(jié)點(diǎn)的進(jìn)程能接受,發(fā)布,聚合各種信息(例如傳感,控制,狀態(tài),規(guī)劃等等)。感興趣的可以去ROS Wiki,那里有
    發(fā)表于 07-07 11:21

    ROS教程之ROS機(jī)器人操作系統(tǒng)基礎(chǔ)知識(shí)概述資料免費(fèi)下載

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

    如何在IDEA中查看依賴關(guān)系

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

    ROS是如何設(shè)計(jì)的 ROS客戶端庫(kù)

    實(shí)現(xiàn)通信的代碼在ros_comm包中,如下。 其中clients文件夾一共有127個(gè)文件,看來(lái)是最大的包了。 現(xiàn)在我們來(lái)到了ROS最核心的地帶。 客戶端這個(gè)名詞出現(xiàn)的有些突然,一個(gè)機(jī)器
    的頭像 發(fā)表于 09-14 17:29 ?1123次閱讀
    <b class='flag-5'>ROS</b>是如何設(shè)計(jì)的 <b class='flag-5'>ROS</b>客戶端庫(kù)

    Unity與ROS鏈接介紹

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

    ROS Motion Planning運(yùn)動(dòng)規(guī)劃庫(kù)如何安裝相關(guān)依賴

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

    ros的基本概念是什么

    基本概念: ROS是一個(gè)用于在不同進(jìn)程匿名的發(fā)布、訂閱、傳遞信息的中間件。 ROS2系統(tǒng)的核心部分是ROS網(wǎng)絡(luò)(ROS Graph)。
    的頭像 發(fā)表于 11-27 11:21 ?2330次閱讀

    ros怎么設(shè)置環(huán)境變量

    可以使用的動(dòng)態(tài)的值,用于影響運(yùn)行程序的行為。環(huán)境變量通常包含一些關(guān)鍵信息,如路徑、用戶名、顏色選項(xiàng)等。 在ROS中,環(huán)境變量是重要的,因?yàn)樗鼈冇糜诖_定ROS如何運(yùn)行和找到相關(guān)文件和程序。 為什么要設(shè)置
    的頭像 發(fā)表于 12-28 13:52 ?3078次閱讀

    如何將python文件導(dǎo)入到ROS系統(tǒng)中

    本文通過(guò)使用myCobot機(jī)械臂進(jìn)行QR碼視覺(jué)追蹤的實(shí)踐案例分析,介紹如何將 python 文件導(dǎo)入到 ROS 系統(tǒng)中。
    的頭像 發(fā)表于 02-11 11:08 ?806次閱讀
    如何將python<b class='flag-5'>文件</b>導(dǎo)入到<b class='flag-5'>ROS</b>系統(tǒng)中