1. 程式人生 > >四 Gazebo學習總結之Gazebo的某些設定屬性和主題訂閱

四 Gazebo學習總結之Gazebo的某些設定屬性和主題訂閱

1.對於Gazebo的圖形使用者介面(GUI)的使用與說明,由於比較簡單,請參考:

2.Gazebo的隨機數:Gazebo製造了一個隨機數生成器的使用,預設情況下,隨機種子被設定為正在執行的Gazebo程序的處理識別符(PID),隨機數種子能手動設定,該特徵的好處是獲取了一串確定性的隨機數序列,有利於測試重複性。Gazebo能通過使用--seed的命令列被隨機數種子初始化,語句:

gazebo --seed <integer>
Gazebo訂閱一個要求是msgs::WorldControl型別訊息的~/world_control主題,那麼,world控制訊息可能包含一個隨機數種子。

3.主題訂閱

Gazebo的交流是在TCP/IP介面上,允許獨立的程式與Gazebo介面通訊。Boost ASIO被Gazebo用於管理交流層,Google Protobufs被用於訊息的傳遞和庫的序列化,通過publisher將訊息傳送到一個通道上,該通道稱為主題(Topic的解釋請參見ROS官網教程),在主題的另一邊,則是subscribers,訊息被訂閱、接收,總之,為了釋出和接收訊息,必須使用到主題。

通過TCP/CP介面與Gazebo通訊的最容易方法是連結Gazebo庫,使用其提供的函式。

使用gztopic list命令可發現一個正在執行中的所有主題。

舉例:

該例子訂閱了一個在~/world_stats主題上的WorldStatistics訊息,並輸出到控制檯。該訊息被Gazebo以1Hz的頻率輸出,包含了模擬時間和中斷狀態資訊,這個例子被包含在

examples/stand_alone/listener/的gazebo源分佈中,假定能連結到Gazebo。

從以上連線中下載listener.cc和CMakeLists.txt,將兩檔案放入名為listener的資料夾中,編譯例子:

cd ~/listener
    mkdir build
    cd build
    cmake ..
    make
listener應該被編譯到build目錄下,當在Gazebo下執行listener時,會輸出如下內容:
# Starting in ~/listener/build/
    ./listener
    Msg Waiting for master
    Msg Connected to gazebo master @ http://127.0.0.1:11345
    Msg Publicized address: 192.168.1.67
    sim_time {
      sec: 1104
      nsec: 855000000
    }
    pause_time {
      sec: 0
      nsec: 0
    }
    real_time {
      sec: 1108
      nsec: 263362269
    }
    paused: false
    iterations: 1104855
    sim_time {
      sec: 1105
      nsec: 55000000
    }
    pause_time {
      sec: 0
      nsec: 0
    }
    real_time {
      sec: 1108
      nsec: 464165998
    }
    paused: false
    iterations: 1105055
程式碼解釋:

/*載入Gazebo,執行傳輸系統*/

gazebo::load(_argc, _argv);
    gazebo::run();

/*建立節點,提供的功能是建立publisher和subscribers,並初始化節點*/

gazebo::transport::NodePtr node(new gazebo::transport::Node());
    node->Init();
/*在world_stats主題上建立一個訂閱者,Gazebo釋出一系列的資料在這個主題上*/
 gazebo::transport::SubscriberPtr sub = node->Subscribe("~/world_stats", cb);
/*為了反饋訊息給控制器,需要建立一個回饋函式,程式中定義為cb*/
void cb(ConstWorldStatisticsPtr &_msg)
    {
      std::cout << _msg->DebugString();
    }
/*最後,必須有等待迴圈函式或做一些其他的程序,等待訊息的到來*/
while (true)
      gazebo::common::Time::MSleep(10);
/*程式執行完畢後,要結束傳輸系統*/
gazebo::transport::fini();
4.摩擦:在Gazebo的每一個物理引擎(例如ODE,Bullet,Simbody,DART)有不同的摩擦模型,請參考SDF parameters文件,關於摩擦引數的完整清單。兩個物件碰撞,例如一個球在地面滾動,一對摩擦力就產生了,在ODE中,由兩部分組成,稱為mu和mu2。mu是第一摩擦方向的庫侖摩擦係數;mu2是第二摩擦方向的庫侖係數(相對於第一摩擦係數)。

Gazebo將從碰撞物件中選擇最小的mu和mu2,mu和mu2的有效範圍是在0到1之間,0表示摩擦很小,1表示摩擦無線大。

部分程式如下:

<surface>
        <friction>
          <ode>
            <mu>0.01</mu>
            <mu2>0.01</mu2>
          </ode>
        </friction>
      </surface>

本文靠自己理解,翻譯而來,錯誤之處望不吝指教!!!

相關推薦

Gazebo學習總結Gazebo某些設定屬性主題訂閱

1.對於Gazebo的圖形使用者介面(GUI)的使用與說明,由於比較簡單,請參考: 2.Gazebo的隨機數:Gazebo製造了一個隨機數生成器的使用,預設情況下,隨機種子被設定為正在執行的Gazebo程序的處理識別符(PID),隨機數種子能手動設定,該特徵的好處是獲取了

Gazebo學習總結建立一個小車

SDF(Simulator Description format)是用於描述Gazebo模擬環境中所有元素的一種XML檔案格式,包括機器人。 1.建立模型目錄 mkdir -p ~/.gazebo/models/my_robot 2.建立模型配置檔案 gedit ~

javascript學習總結物件的深拷貝淺拷貝

前言 最近在寫ES6的文章的時候發現重複遇到關於javascript深拷貝和淺拷貝的問題,然後查找了一些資料,根據資料和自己的理解做了以下筆記,畢竟javascript關於深拷貝和淺拷貝的問題在一些面試的時候有些面試官可能會進行提問,一起來看看吧! 資料型別 在瞭解淺拷貝和深拷貝之前,我們先回顧一下ja

oracle逐步學習總結oracle數字函式日期函式(基礎

  原創作品,轉自請註明出處:https://www.cnblogs.com/sunshine5683/p/10140716.html 繼上篇總結,繼續進行總結: 以下下數字函式: 1、abs(n):返回數字n的絕對值 2、acos(n):返回數字的反餘弦值 3、asin(n):返回數字

Lucene學習總結:Lucene索引過程分析

3、將文件加入IndexWriter 程式碼: writer.addDocument(doc);  -->IndexWriter.addDocument(Document doc, Analyzer analyzer)       -->doFlush = docWrite

Lucene學習總結:Lucene索引過程分析(1)

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

算法(第版)學習筆記java實現可以動態調整數組大小的棧

length pub move sta gen font -c @override lifo 下壓(LIFO)棧:可以動態調整數組大小的實現 import java.util.Iterator; public class ResizingArrayStack&l

Lucene學習總結二:Lucene的總體架構

api 要點 iter 不同 blank 應用 文件 score image Lucene總的來說是: 一個高效的,可擴展的,全文檢索庫。 全部用Java實現,無須配置。 僅支持純文本文件的索引(Indexing)和搜索(Search)。 不負責由其他格式的文件抽取純文

201621123047《java程序設計》第十學習總結

如何 2.6 util 連接 mysql mar 參考 喜歡 參考資料 參考資料 本次作業參考文件 MySql操作視頻與數據庫相關jar文件請參考QQ群文件。 1. 本周學習總結 1.1 以你喜歡的方式(思維導圖或其他)歸納總結與數據庫相關內容。 2. 使用數據庫技術改造你

機器學習總結第一章緒論

分享 概率 都是 ack 學習 包含 png 分類 post 機器學習總結之第一章緒論 http://www.cnblogs.com/kuotian/p/6141728.html 1.2基本術語 特征向量:即示例,反映事件或對象在某方面的性質。例如,西瓜的色澤,敲聲。

機器學習總結第二章模型評估與選擇

概率密度函數 列聯表 ext 5.1 ima 其中 bsp 泛化能力 分解 機器學習總結之第二章模型評估與選擇 2.1經驗誤差與過擬合 錯誤率 = a個樣本分類錯誤/m個樣本 精度 = 1 - 錯誤率 誤差:學習器實際預測輸出與樣本的真是輸出之間的差異。 訓練誤差:即

2018.3.29學習總結如何運行一個最簡單的Servlet程序

ati get png aid 父類 eclips 網上 自己 nco 1,我編寫了我的第一個Servlet程序。HelloServlet 繼承自HttpServlet。因此需要導入javax.servlet開頭的一系列包,那麽這些包來自哪裏呢?答案是Tomcat安裝目錄下

馬哥教育第三十一天至三十學習總結

內核編譯、系統開機、系統進程管理、AWK馬哥M28三十一天、 進程管理和啟動流程、 CentOS6及其之前的操作系統根進程是/sbin/init , centos5及其之前使用的安裝管理工具是SysV ,CentOS6是upstart , CentOS7是systemd 單用戶方式啟動:修改root密碼或者

馬哥教育第十一至十三學習總結

自動化運維安裝、DNS第四十一天 cobbler1.安裝包yum install cobbler dhcpsystemctl enable cobblerdsystemctl start cobblerdsystemctl enable tftp.socketsystemctl start tftp.sock

多線程學習總結 線程池

code service pla ever pro olt def 原理圖 cte 前言:    本文基於jdk1.8。 前段時間換工作,面試時候每次都會問線程的問題,自己對多線程方面的知識沒有花時間研究過,所以一問到線程就懵了,最近特地買了方騰飛老師的《Java並發編程的

學習總結Linux基礎知識

基礎 bug 引用 hosts 個人版 boot -s 發布 分配 在經過了一段時間的學習之後,不但對之前較模糊的知識點有了一個比較清晰的認識,還學到了一些沒學到的東西。下面對這些知識點做一個總結,一是想對這一階段畫上一個比較完美的句號,二是想把這篇博客當做以後的一個筆記之

《Java程式設計》第學習總結

201711671111 《Java程式設計》第四章學習總結二 教材學習內容總結 1.方法過載是兩種多型的一種。意思是一類中可以有多個方法具有相同的名字,但這些方法的引數必須不同。 方法的返回型別和引數名字不參與比較,也就是說,如果兩個方法的名字相同,即使返回型別不同,也

學習總結---201711671206

1.類   class 類名{類體的內容}面嚮物件語言程式設計的三個特性:封裝性、繼承、多型。類宣告的變數被稱作物件變數,簡稱物件 類的定義包括類宣告和類體。class為關鍵字用來定義類。例如:class People和class 植物都是類宣告,類的名字要符合識別符號規定。(如果類名

oracle逐步學習總結oracle分頁查詢(基礎三)

  原創作品,轉載請在文章開頭明顯位置註明出處:https://www.cnblogs.com/sunshine5683/p/10087205.html oracle 的分頁有三種,下面將這三種方式一一列舉,進行分析:   一、根據rowid來分頁   二、根據分

201711671106《Java程式設計》第學習總結

教材學習內容總結 主要學習了第四章類與物件 一、java是一種面嚮物件語言,具有封裝、繼承、多型三種基本特性。 二、類 類是java的基本要素,被類所定義的變數為物件。 類的定義包括類宣告和方法定義,方法包括方法頭和體。 類宣告的變數分為成員變數和區域性變數,而成員變數又分為