ROS機器人程序設計 | 期末知識點大總結

  1. 工作空間的框架是怎么樣的?有幾個文件夾?

一個包含功能包、可編輯源文件或編譯包的文件夾。
同時編譯不同的功能包時非常有用,并且可以用來保存本地開發(fā)包。



  1. 編譯命令是什么?
    用catkin編譯功能包
 $ cmake package/       #使用標準Cmake工作流程,一次編譯一個包
  $ make

  $ cd workspace          # 編譯工作空間內的所有包
  $ catkin_make
  1. Source是干什么?為什么要source?
    用來刷新工作環(huán)境;
    如果不刷新,系統(tǒng)可能無法識別編譯后(如Catkin_make之后)的工作環(huán)境(里面的新文件);

  2. 什么是功能包?
    功能包是ROS軟件中的基本單元,包含ROS節(jié)點、庫、配置文件。


    一個功能包文件結構

這些文件夾的主要功能如下:
config:放置功能包中的配置文件,由用戶創(chuàng)建,文件名可以不同。
include:放置功能包中需要用到的文件。
scripts:放置可以直接運行的Python腳本。
src:程序源文件。
launch:放置功能包自定義的消息類型。
msg:放置功能包自定義的服務類型。
srv:放置功能包的定義的服務類型。
action:放置功能包自定義的動作指令。
CMakeLists.txt:Cmake的生成文件,編譯器編譯功能包的規(guī)則。
package.xml:功能包清單。

  1. 功能包里至少會包含什么文件?


    新建一個工作空間

    新建一個功能包

(剛剛新建的功能包,包含以下幾個東西)
一個include文件夾——里面包含著一個與包名同名的空文件夾;
一個空src文件夾
一個CMakeLists.txt文件
一個package.xml文件


  1. build目錄下是保存什么的?
    編譯空間(build文件夾):CMake和catkin為功能包和項目保存緩存信息、配置和其他中間文件

  2. devel目錄下是保存什么的?
    開發(fā)空間(devel文件夾):保存編譯后的程序(無需安裝就能用來測試的程序)

  3. ros操作系統(tǒng)的通訊方式有幾種?分別是什么?
    ros操作系統(tǒng)的通訊方式有三種

話題通訊機制

服務通訊機制

參數通訊機制

拓展:
自定義通信格式有三種:

  • 消息( msg)
  • 服務(srv)
  • 動作(action)


  1. 解釋一下launch的作用?
    作用:運行啟動文件
    在ROS中一個節(jié)點程序一般只能完成功能單一的任務,但是一個完整的ROS機器人一般由很多個節(jié)點程序同 時運行、相互協作才能完成復雜的任務,因此這就要求在啟動機器人時就必須要啟動很多個節(jié)點程序,一般的
    ROS機器人由十幾個節(jié)點程序組成,復雜的幾十個都有可能。
    這就要求我們必須高效率的啟動很多節(jié)點,而不是通過rosrun命令來依次啟動十幾個節(jié)點程序,launch文件 就是為解決這個需求而生,launch文件就是一個xml格式的腳本文件,我們把需要啟動的節(jié)點都寫進launch文件 中,這樣我們就可以通過roslaunch工具來調用launch文件,執(zhí)行這個腳本文件就一次性啟動所有的節(jié)點程序。

  2. 簡述topic

  • 主題是節(jié)點間用來傳輸數據的總線。
  • 通過主題進行消息路由不需要節(jié)點之間直接連接——發(fā)布者和訂閱者之間不需要知道彼此是否存在。
  • 一個主題可以有多個訂閱者,也可以有多個發(fā)布者。
  • ROS的主題可以使用TCP/IP和UDP傳輸:TCPROS(默認),UDPROS(低延遲高效率,數據丟失,遠程操作)



話題通訊機制

  1. 簡述service
  • 發(fā)布/訂閱模型是一種靈活的通訊機制,但是其多對多、單向傳輸的方式不適合于分布式系統(tǒng)通常要求的請求/應答交互方式。
  • 請求/應答通過服務實現。服務由一對消息定義:一個用于請求,一個用于應答。
  • 一個節(jié)點提供服務名稱,客戶通過發(fā)送請求消息并等待應答來使用服務。


服務通訊機制

  1. 簡述action
    在ros中,如果想要發(fā)送一個request給一個節(jié)點該節(jié)點完成一些任務,并且給出一個回復,這樣可以使用ros中的service完成。但是有一些應用中任務執(zhí)行的時間很長,用戶需要查看執(zhí)行的進度如何,以及或者取消該任務,ros中提供了一個actionlib package來建立服務,執(zhí)行一個長時間運行的可搶占目標。
    可以道是“升級版的service”,算是對service在某些情況下能力不足的一種補充。

    在一個復雜的ROS系統(tǒng)中我們會需要各種各有的服務要求,向某個節(jié)點發(fā)送請求執(zhí)行某一個任務, 并返回相應的執(zhí)行結果,這種用ROS的服務(services)完成。然而有一些情況服務執(zhí)行的時間很長, 在執(zhí)行中想要獲得任務處理的進度,或可能取消執(zhí)行任務,actionlib就能實現這樣的功能,它是ROS的一個非常重要的庫,算是對service在某些情況下能力不足的一種補充。
    在前面介紹過服務,因為它在執(zhí)行的過程中是阻塞的,會阻止程序進一步執(zhí)行,必須等待服務器 返回結果才會繼續(xù)執(zhí)行后面的程序,對于一些計算量較輕的任務使用服務是可以滿足的。但是對于一 些伏在的任務,例如讓機器人從房間的某一點A運動到指定的地點B,在此運動過程中需要花費的時間 未定,任務時間較長而且中途會遇到各種情況,例如機器人電量不足時,這就需要取消或暫停當前任 務等待機器人充滿電再繼續(xù)該任務。
  1. 什么是節(jié)點?如何啟動一個節(jié)點?
    節(jié)點(Nodes)
  • 節(jié)點是執(zhí)行計算的進程。
  • 一個機器人控制系統(tǒng)通常包括很多節(jié)點:節(jié)點1控制一個激光測距儀,節(jié)點2控制電機,節(jié)點3進行定位,節(jié)點4進行路徑規(guī)劃,節(jié)點5提供系統(tǒng)的圖形視圖(每個節(jié)點應具有特定的單一功能、且名稱唯一)。
  • 節(jié)點使用roscpp和rospy等ROS客戶端庫進行編寫。


rosrun單個啟動;
roslaunch批量啟動;

  1. 什么是節(jié)點管理器?
    節(jié)點管理器(Master)
  • 用于節(jié)點的注冊和查找。
  • 沒有節(jié)點管理器,節(jié)點之間無法發(fā)現對方、交換消息或者調用服務。
  • ROS是一個分布式網絡系統(tǒng),可以在一臺計算機上運行節(jié)點管理器,在該管理器或其他計算機上運行節(jié)點。
  1. 簡述話題與服務的區(qū)別?(8點)


  2. 新建一個功能包的命令是什么?

catkin_create_pkg [package_name] [depend1] [depend2] [depend3]
  1. rqt_console工具的功能是什么?
    ROS提供了一系列的基于QT的可視化圖形調試工具,能夠幫助我們快速開發(fā)機器人。

rqt_console屬于ROS日志框架(logging framework)的一部分,用來顯示節(jié)點的輸出信息。

rqt_logger_level允許我們修改節(jié)點運行時輸出信息的日志等級(logger levels)(包括 DEBUG、WARN、INFO和ERROR)。



  1. 什么是節(jié)點重生屬性?
    節(jié)點重生屬性(respawn)
    當roslaunch開啟所有nodes后,roslaunch會監(jiān)視每個node,記錄那些仍然活動的nodes。對于每個node,當其終止后,我們可以要求roslaunch重啟該node,通過使用respawn屬性。
  1. 什么是節(jié)點必要屬性?
    當一個節(jié)點被聲明為必要節(jié)點即 required="true"終止的時候,roslaunch 會終止所有其他活躍節(jié)點并退出。比如 在依賴激光雷達的機器人導航中,若激光雷達節(jié)點意外退出時,roslaunch將會終止其他節(jié)點然后退出。
  1. 從控制的角度簡述一下機器人的組成?


  2. 簡述一下傳感系統(tǒng)的組成,及常用的設備


  3. 什么是URDF?由哪幾部分標簽組成?
    URDF是機器人模型描述文件;



    urdf描述機器人模型問題所在?
    模型冗長,重復多;
    修改參數麻煩,不便于二次開發(fā);
    沒有參數計算功能;
    ……….

  4. 什么是xacro模型文件?相比URDF有什么優(yōu)勢?

URDF是機器人模型描述文件;
xacro模型文件是urdf模型的進化版本;
優(yōu)勢:
精簡模型代碼
  創(chuàng)建宏定義;
  文件包含;
提供可編程接口
   常量;
   變量;
   條件語句;
   數學計算。

  1. 什么是tf?為什么要有tf?
    坐標轉換(TransForm:位置和姿態(tài))
    坐標變換是空間實體的位置描述,是從一種坐標系統(tǒng)變換到另一種坐標系統(tǒng)的過程。通過建立兩個坐標系統(tǒng)之間一一對應關系來實現。

    為什么要有tf:
    (個人課堂總結筆記)一個機器人項目一般都是會有許許多多個組件和關節(jié)、部位等等,那么整個機器人諸多部件之間是不可能只有一個坐標系的,事實上它們每一個組件每一個部位都有它們自己的坐標系,所以當我們要描述一個坐標系中的物體處在另外一個坐標系的狀態(tài)是什么樣的時候,這時候參數間的轉化就需要tf了。

(機器人系統(tǒng)通常具有許多隨時間變化的3D坐標系,例如世界坐標系,車體坐標系,手抓坐標系,頭部坐標系等。隨著時間的推移如何跟蹤這些坐標系的變化,提出以下幾個問題:
5秒前,頭部坐標系相對于世界坐標系在哪里?
機器人手抓中的物體相對于機器人本體基座的姿態(tài)是什么?
地圖坐標系中機器人的基座當前的姿態(tài)是什么?)

tf是一個用戶隨時間跟蹤多個坐標系的包,機器人不同部位和世界的坐標系以 tree structure 的形式存儲起來,tf管理一系列的樹狀結構坐標系之間的關系。允許用戶在各個坐標系中進行點、向量的變換。通俗的說tf可以幫助我們實時的在各個坐標系中進行坐標轉換。

  1. 什么是slam?
    SLAM (simultaneous localization and mapping),也稱為CML (Concurrent Mapping and Localization), 即時定位與地圖構建,或并發(fā)建圖與定位。
    問題可以描述為:將一個機器人放入未知環(huán)境中的未知位置,是否有辦法讓機器人一邊逐步描繪出此環(huán)境完全的地圖,所謂完全的地圖(a consistent map)是指不受障礙行進到房間可進入的每個角落。
    slam解決的問題是:“我在哪里,我所處的環(huán)境是什么樣子?”

  2. 在ros里實現slam,對于機器人的硬件要求有什么?為什么?


  3. Twist速度控制指令包括哪幾個方面?


  1. gmapping 算法功能包的輸入信息包含什么?


  2. gmapping 輸出的是什么?




  1. gmapping 訂閱了什么話題?


  2. 簡述一下gmapping 算法中的TF變換。


  3. Move_base功能包里由ros提供的部分的核心是什么?(unsure)




  1. acml是什么意思?實現原理是什么?


  2. Move_base的配置文件有幾個?(強化彌補33)

    1)

    2)base_local_planner_params.yaml

    該配置文件里面配置了局部路徑規(guī)劃相關的配置。
    3)costmap_common_params.yaml
    該配置文件里面配置了代價地圖共用的參數。
    4)global_costmap_params.yaml
    該配置文件里面配置了全局代價地圖相關參數。
    5)local_costmap_params.yaml
    該配置文件里面配置了局部代價地圖共用的參數。

35.什么是全局代價地圖?什么是局部代價地圖?
全局代價地圖用于全局路徑規(guī)劃,局部代價地圖用于本地路徑規(guī)劃和實時避障。


  1. 簡述一下PR2機器人


  2. 簡述一下什么是tf樹
    機器人不同部位和世界的坐標系以 tree structure 的形式存儲起來,tf管理一系列的樹狀結構坐標系之間的關系。

  3. 查看功能包路徑的命令是什么?

rospack find [package_name]
  1. CMakeLists.txt的作用是什么?
    CMakeLists.txt:Cmake的生成文件,編譯器編譯功能包的規(guī)則。

40.package.xml的作用是什么?
package.xml:功能包清單。定義有關包的屬性,例如包名稱,版本號,作者,維護者以及其他catkin包的依賴關系。

  1. 功能包目錄跳轉命令是什么?
roscd
  1. 什么是gazebo?
    Gazebo是一個自主機器人3D仿真環(huán)境。 它可以與ROS配套用于完整的機器人仿真,也可以單獨使用。能夠進行動力學仿真等,模擬機器人以及機器人所處的復雜的物理環(huán)境。

  2. 什么是rviz?
    rviz是ros的一個可視化工具,用于可視化傳感器的數據和狀態(tài)信息。rviz支持豐富的數據類型,通過加載不同的Dispalys類型來可視化,每一個Dispaly都有一個獨特的名字。

  3. gazebo和rviz的區(qū)別是什么?
    gazebo側重于機器人模型的物理特性以及動力學仿真等和物理環(huán)境的模擬,rviz則側重于傳感器的數據和狀態(tài)信息的可視化,并沒有像gazebo那樣模擬出形象的物理環(huán)境。


    gazebo和rviz的區(qū)別
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容