- 工作空間的架構是怎麼樣的?有幾個檔案夾?
一個包含功能包、可編輯源檔案或編譯包的檔案夾。
同時編譯不同的功能包時非常有用,并且可以用來儲存本地開發包。

-
編譯指令是什麼?
用catkin編譯功能包
$ cmake package/ #使用标準Cmake工作流程,一次編譯一個包
$ make
$ cd workspace # 編譯工作空間内的所有包
$ catkin_make
-
Source是幹什麼?為什麼要source?
用來重新整理工作環境;
如果不重新整理,系統可能無法識别編譯後(如Catkin_make之後)的工作環境(裡面的新檔案);
-
什麼是功能包?
功能包是ROS軟體中的基本單元,包含ROS節點、庫、配置檔案。
一個功能封包件結構ROS機器人程式設計 | 期末知識點大總結
這些檔案夾的主要功能如下:
config:放置功能包中的配置檔案,由使用者建立,檔案名可以不同。
include:放置功能包中需要用到的檔案。
scripts:放置可以直接運作的Python腳本。
src:程式源檔案。
launch:放置功能包自定義的消息類型。
msg:放置功能包自定義的服務類型。
srv:放置功能包的定義的服務類型。
action:放置功能包自定義的動作指令。
CMakeLists.txt:Cmake的生成檔案,編譯器編譯功能包的規則。
package.xml:功能包清單。
- 功能包裡至少會包含什麼檔案? 建立一個工作空間
ROS機器人程式設計 | 期末知識點大總結 建立一個功能包ROS機器人程式設計 | 期末知識點大總結
(剛剛建立的功能包,包含以下幾個東西)
一個include檔案夾——裡面包含着一個與包名同名的空檔案夾;
一個空src檔案夾
一個CMakeLists.txt檔案
一個package.xml檔案
-
build目錄下是儲存什麼的?
編譯空間(build檔案夾):CMake和catkin為功能包和項目儲存緩存資訊、配置和其他中間檔案
-
devel目錄下是儲存什麼的?
開發空間(devel檔案夾):儲存編譯後的程式(無需安裝就能用來測試的程式)
-
ros作業系統的通訊方式有幾種?分别是什麼?
ros作業系統的通訊方式有三種
話題通訊機制
服務通訊機制
參數通訊機制
拓展:
自定義通信格式有三種:
- 消息( msg)
- 服務(srv)
- 動作(action)
ROS機器人程式設計 | 期末知識點大總結
-
解釋一下launch的作用?
作用:運作啟動檔案
在ROS中一個節點程式一般隻能完成功能單一的任務,但是一個完整的ROS機器人一般由很多個節點程式同 時運作、互相協作才能完成複雜的任務,是以這就要求在啟動機器人時就必須要啟動很多個節點程式,一般的
ROS機器人由十幾個節點程式組成,複雜的幾十個都有可能。
這就要求我們必須高效率的啟動很多節點,而不是通過rosrun指令來依次啟動十幾個節點程式,launch檔案 就是為解決這個需求而生,launch檔案就是一個xml格式的腳本檔案,我們把需要啟動的節點都寫進launch檔案 中,這樣我們就可以通過roslaunch工具來調用launch檔案,執行這個腳本檔案就一次性啟動所有的節點程式。
- 簡述topic
- 主題是節點間用來傳輸資料的總線。
- 通過主題進行消息路由不需要節點之間直接連接配接——釋出者和訂閱者之間不需要知道彼此是否存在。
- 一個主題可以有多個訂閱者,也可以有多個釋出者。
- ROS的主題可以使用TCP/IP和UDP傳輸:TCPROS(預設),UDPROS(低延遲高效率,資料丢失,遠端操作)
ROS機器人程式設計 | 期末知識點大總結 ROS機器人程式設計 | 期末知識點大總結
- 簡述service
- 釋出/訂閱模型是一種靈活的通訊機制,但是其多對多、單向傳輸的方式不适合于分布式系統通常要求的請求/應答互動方式。
- 請求/應答通過服務實作。服務由一對消息定義:一個用于請求,一個用于應答。
- 一個節點提供服務名稱,客戶通過發送請求消息并等待應答來使用服務。
ROS機器人程式設計 | 期末知識點大總結
-
簡述action
在ros中,如果想要發送一個request給一個節點該節點完成一些任務,并且給出一個回複,這樣可以使用ros中的service完成。但是有一些應用中任務執行的時間很長,使用者需要檢視執行的進度如何,以及或者取消該任務,ros中提供了一個actionlib package來建立服務,執行一個長時間運作的可搶占目标。
可以道是“更新版的service”,算是對service在某些情況下能力不足的一種補充。
ROS機器人程式設計 | 期末知識點大總結 在一個複雜的ROS系統中我們會需要各種各有的服務要求,向某個節點發送請求執行某一個任務, 并傳回相應的執行結果,這種用ROS的服務(services)完成。然而有一些情況服務執行的時間很長, 在執行中想要獲得任務處理的進度,或可能取消執行任務,actionlib就能實作這樣的功能,它是ROS的一個非常重要的庫,算是對service在某些情況下能力不足的一種補充。
在前面介紹過服務,因為它在執行的過程中是阻塞的,會阻止程式進一步執行,必須等待伺服器 傳回結果才會繼續執行後面的程式,對于一些計算量較輕的任務使用服務是可以滿足的。但是對于一 些伏在的任務,例如讓機器人從房間的某一點A運動到指定的地點B,在此運動過程中需要花費的時間 未定,任務時間較長而且中途會遇到各種情況,例如機器人電量不足時,這就需要取消或暫停目前任 務等待機器人充滿電再繼續該任務。
-
什麼是節點?如何啟動一個節點?
節點(Nodes)
- 節點是執行計算的程序。
- 一個機器人控制系統通常包括很多節點:節點1控制一個雷射測距儀,節點2控制電機,節點3進行定位,節點4進行路徑規劃,節點5提供系統的圖形視圖(每個節點應具有特定的單一功能、且名稱唯一)。
- 節點使用roscpp和rospy等ROS用戶端庫進行編寫。
ROS機器人程式設計 | 期末知識點大總結
rosrun單個啟動;
roslaunch批量啟動;
-
什麼是節點管理器?
節點管理器(Master)
- 用于節點的注冊和查找。
- 沒有節點管理器,節點之間無法發現對方、交換消息或者調用服務。
- ROS是一個分布式網絡系統,可以在一台計算機上運作節點管理器,在該管理器或其他計算機上運作節點。
- 簡述話題與服務的差別?(8點)
ROS機器人程式設計 | 期末知識點大總結 - 建立一個功能包的指令是什麼?
catkin_create_pkg [package_name] [depend1] [depend2] [depend3]
-
rqt_console工具的功能是什麼?
ROS提供了一系列的基于QT的可視化圖形調試工具,能夠幫助我們快速開發機器人。
rqt_console屬于ROS日志架構(logging framework)的一部分,用來顯示節點的輸出資訊。
rqt_logger_level允許我們修改節點運作時輸出資訊的日志等級(logger levels)(包括 DEBUG、WARN、INFO和ERROR)。
-
什麼是節點重生屬性?
節點重生屬性(respawn)
當roslaunch開啟所有nodes後,roslaunch會監視每個node,記錄那些仍然活動的nodes。對于每個node,當其終止後,我們可以要求roslaunch重新開機該node,通過使用respawn屬性。
-
什麼是節點必要屬性?
當一個節點被聲明為必要節點即 required="true"終止的時候,roslaunch 會終止所有其他活躍節點并退出。比如 在依賴雷射雷達的機器人導航中,若雷射雷達節點意外退出時,roslaunch将會終止其他節點然後退出。
- 從控制的角度簡述一下機器人的組成?
ROS機器人程式設計 | 期末知識點大總結 - 簡述一下傳感系統的組成,及常用的裝置
ROS機器人程式設計 | 期末知識點大總結 -
什麼是URDF?由哪幾部分标簽組成?
URDF是機器人模型描述檔案;
ROS機器人程式設計 | 期末知識點大總結 urdf描述機器人模型問題所在?
模型冗長,重複多;
修改參數麻煩,不便于二次開發;
沒有參數計算功能;
……….
- 什麼是xacro模型檔案?相比URDF有什麼優勢?
xacro模型檔案是urdf模型的進化版本;
優勢:
精簡模型代碼
建立宏定義;
檔案包含;
提供可程式設計接口
常量;
變量;
條件語句;
數學計算。
-
什麼是tf?為什麼要有tf?
坐标轉換(TransForm:位置和姿态)
坐标變換是空間實體的位置描述,是從一種坐标系統變換到另一種坐标系統的過程。通過建立兩個坐标系統之間一一對應關系來實作。
為什麼要有tf:
(個人課堂總結筆記)一個機器人項目一般都是會有許許多多個元件和關節、部位等等,那麼整個機器人諸多部件之間是不可能隻有一個坐标系的,事實上它們每一個元件每一個部位都有它們自己的坐标系,是以當我們要描述一個坐标系中的物體處在另外一個坐标系的狀态是什麼樣的時候,這時候參數間的轉化就需要tf了。
(機器人系統通常具有許多随時間變化的3D坐标系,例如世界坐标系,車體坐标系,手抓坐标系,頭部坐标系等。随着時間的推移如何跟蹤這些坐标系的變化,提出以下幾個問題:
5秒前,頭部坐标系相對于世界坐标系在哪裡?
機器人手抓中的物體相對于機器人本體基座的姿态是什麼?
地圖坐标系中機器人的基座目前的姿态是什麼?)
tf是一個使用者随時間跟蹤多個坐标系的包,機器人不同部位和世界的坐标系以 tree structure 的形式存儲起來,tf管理一系列的樹狀結構坐标系之間的關系。允許使用者在各個坐标系中進行點、向量的變換。通俗的說tf可以幫助我們實時的在各個坐标系中進行坐标轉換。
-
什麼是slam?
SLAM (simultaneous localization and mapping),也稱為CML (Concurrent Mapping and Localization), 即時定位與地圖建構,或并發建圖與定位。
問題可以描述為:将一個機器人放入未知環境中的未知位置,是否有辦法讓機器人一邊逐漸描繪出此環境完全的地圖,所謂完全的地圖(a consistent map)是指不受障礙行進到房間可進入的每個角落。
slam解決的問題是:“我在哪裡,我所處的環境是什麼樣子?”
- 在ros裡實作slam,對于機器人的硬體要求有什麼?為什麼?
ROS機器人程式設計 | 期末知識點大總結 - Twist速度控制指令包括哪幾個方面?
ROS機器人程式設計 | 期末知識點大總結
- gmapping 算法功能包的輸入資訊包含什麼?
ROS機器人程式設計 | 期末知識點大總結 - gmapping 輸出的是什麼?
ROS機器人程式設計 | 期末知識點大總結 ROS機器人程式設計 | 期末知識點大總結 ROS機器人程式設計 | 期末知識點大總結
- gmapping 訂閱了什麼話題?
ROS機器人程式設計 | 期末知識點大總結 - 簡述一下gmapping 算法中的TF變換。
ROS機器人程式設計 | 期末知識點大總結 - Move_base功能包裡由ros提供的部分的核心是什麼?(unsure)
ROS機器人程式設計 | 期末知識點大總結 ROS機器人程式設計 | 期末知識點大總結 ROS機器人程式設計 | 期末知識點大總結
- acml是什麼意思?實作原理是什麼?
ROS機器人程式設計 | 期末知識點大總結 -
Move_base的配置檔案有幾個?(強化彌補33)
1)
ROS機器人程式設計 | 期末知識點大總結 2)base_local_planner_params.yaml
該配置檔案裡面配置了局部路徑規劃相關的配置。
3)costmap_common_params.yaml
該配置檔案裡面配置了代價地圖共用的參數。
4)global_costmap_params.yaml
該配置檔案裡面配置了全局代價地圖相關參數。
5)local_costmap_params.yaml
該配置檔案裡面配置了局部代價地圖共用的參數。
35.什麼是全局代價地圖?什麼是局部代價地圖?
全局代價地圖用于全局路徑規劃,局部代價地圖用于本地路徑規劃和實時避障。
- 簡述一下PR2機器人
ROS機器人程式設計 | 期末知識點大總結 -
簡述一下什麼是tf樹
機器人不同部位和世界的坐标系以 tree structure 的形式存儲起來,tf管理一系列的樹狀結構坐标系之間的關系。
- 檢視功能包路徑的指令是什麼?
rospack find [package_name]
- CMakeLists.txt的作用是什麼?
40.package.xml的作用是什麼?
package.xml:功能包清單。定義有關包的屬性,例如包名稱,版本号,作者,維護者以及其他catkin包的依賴關系。
- 功能包目錄跳轉指令是什麼?
roscd
-
什麼是gazebo?
Gazebo是一個自主機器人3D仿真環境。 它可以與ROS配套用于完整的機器人仿真,也可以單獨使用。能夠進行動力學仿真等,模拟機器人以及機器人所處的複雜的實體環境。
-
什麼是rviz?
rviz是ros的一個可視化工具,用于可視化傳感器的資料和狀态資訊。rviz支援豐富的資料類型,通過加載不同的Dispalys類型來可視化,每一個Dispaly都有一個獨特的名字。
-
gazebo和rviz的差別是什麼?
gazebo側重于機器人模型的實體特性以及動力學仿真等和實體環境的模拟,rviz則側重于傳感器的資料和狀态資訊的可視化,并沒有像gazebo那樣模拟出形象的實體環境。
gazebo和rviz的差別ROS機器人程式設計 | 期末知識點大總結