- 工作空間的框架是怎么樣的?有幾個文件夾?
一個包含功能包、可編輯源文件或編譯包的文件夾。
同時編譯不同的功能包時非常有用,并且可以用來保存本地開發(fā)包。


- 編譯命令是什么?
用catkin編譯功能包
$ cmake package/ #使用標準Cmake工作流程,一次編譯一個包
$ make
$ cd workspace # 編譯工作空間內的所有包
$ catkin_make
Source是干什么?為什么要source?
用來刷新工作環(huán)境;
如果不刷新,系統(tǒng)可能無法識別編譯后(如Catkin_make之后)的工作環(huán)境(里面的新文件);-
什么是功能包?
功能包是ROS軟件中的基本單元,包含ROS節(jié)點、庫、配置文件。
一個功能包文件結構
這些文件夾的主要功能如下:
config:放置功能包中的配置文件,由用戶創(chuàng)建,文件名可以不同。
include:放置功能包中需要用到的文件。
scripts:放置可以直接運行的Python腳本。
src:程序源文件。
launch:放置功能包自定義的消息類型。
msg:放置功能包自定義的服務類型。
srv:放置功能包的定義的服務類型。
action:放置功能包自定義的動作指令。
CMakeLists.txt:Cmake的生成文件,編譯器編譯功能包的規(guī)則。
package.xml:功能包清單。
-
功能包里至少會包含什么文件?
新建一個工作空間
新建一個功能包
(剛剛新建的功能包,包含以下幾個東西)
一個include文件夾——里面包含著一個與包名同名的空文件夾;
一個空src文件夾
一個CMakeLists.txt文件
一個package.xml文件



build目錄下是保存什么的?
編譯空間(build文件夾):CMake和catkin為功能包和項目保存緩存信息、配置和其他中間文件devel目錄下是保存什么的?
開發(fā)空間(devel文件夾):保存編譯后的程序(無需安裝就能用來測試的程序)ros操作系統(tǒng)的通訊方式有幾種?分別是什么?
ros操作系統(tǒng)的通訊方式有三種
話題通訊機制

服務通訊機制

參數通訊機制

拓展:
自定義通信格式有三種:
- 消息( msg)
- 服務(srv)
-
動作(action)
解釋一下launch的作用?
作用:運行啟動文件
在ROS中一個節(jié)點程序一般只能完成功能單一的任務,但是一個完整的ROS機器人一般由很多個節(jié)點程序同 時運行、相互協作才能完成復雜的任務,因此這就要求在啟動機器人時就必須要啟動很多個節(jié)點程序,一般的
ROS機器人由十幾個節(jié)點程序組成,復雜的幾十個都有可能。
這就要求我們必須高效率的啟動很多節(jié)點,而不是通過rosrun命令來依次啟動十幾個節(jié)點程序,launch文件 就是為解決這個需求而生,launch文件就是一個xml格式的腳本文件,我們把需要啟動的節(jié)點都寫進launch文件 中,這樣我們就可以通過roslaunch工具來調用launch文件,執(zhí)行這個腳本文件就一次性啟動所有的節(jié)點程序。簡述topic
- 主題是節(jié)點間用來傳輸數據的總線。
- 通過主題進行消息路由不需要節(jié)點之間直接連接——發(fā)布者和訂閱者之間不需要知道彼此是否存在。
- 一個主題可以有多個訂閱者,也可以有多個發(fā)布者。
-
ROS的主題可以使用TCP/IP和UDP傳輸:TCPROS(默認),UDPROS(低延遲高效率,數據丟失,遠程操作)
話題通訊機制

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

- 簡述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ù)該任務。
- 什么是節(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批量啟動;
- 什么是節(jié)點管理器?
節(jié)點管理器(Master)
- 用于節(jié)點的注冊和查找。
- 沒有節(jié)點管理器,節(jié)點之間無法發(fā)現對方、交換消息或者調用服務。
- ROS是一個分布式網絡系統(tǒng),可以在一臺計算機上運行節(jié)點管理器,在該管理器或其他計算機上運行節(jié)點。
-
簡述話題與服務的區(qū)別?(8點)
新建一個功能包的命令是什么?
catkin_create_pkg [package_name] [depend1] [depend2] [depend3]
- rqt_console工具的功能是什么?
ROS提供了一系列的基于QT的可視化圖形調試工具,能夠幫助我們快速開發(fā)機器人。
rqt_console屬于ROS日志框架(logging framework)的一部分,用來顯示節(jié)點的輸出信息。
rqt_logger_level允許我們修改節(jié)點運行時輸出信息的日志等級(logger levels)(包括 DEBUG、WARN、INFO和ERROR)。


- 什么是節(jié)點重生屬性?
節(jié)點重生屬性(respawn)
當roslaunch開啟所有nodes后,roslaunch會監(jiān)視每個node,記錄那些仍然活動的nodes。對于每個node,當其終止后,我們可以要求roslaunch重啟該node,通過使用respawn屬性。

- 什么是節(jié)點必要屬性?
當一個節(jié)點被聲明為必要節(jié)點即 required="true"終止的時候,roslaunch 會終止所有其他活躍節(jié)點并退出。比如 在依賴激光雷達的機器人導航中,若激光雷達節(jié)點意外退出時,roslaunch將會終止其他節(jié)點然后退出。

-
從控制的角度簡述一下機器人的組成?
-
簡述一下傳感系統(tǒng)的組成,及常用的設備
-
什么是URDF?由哪幾部分標簽組成?
URDF是機器人模型描述文件;
urdf描述機器人模型問題所在?
模型冗長,重復多;
修改參數麻煩,不便于二次開發(fā);
沒有參數計算功能;
………. 什么是xacro模型文件?相比URDF有什么優(yōu)勢?
URDF是機器人模型描述文件;
xacro模型文件是urdf模型的進化版本;
優(yōu)勢:
精簡模型代碼
創(chuàng)建宏定義;
文件包含;
提供可編程接口
常量;
變量;
條件語句;
數學計算。
- 什么是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可以幫助我們實時的在各個坐標系中進行坐標轉換。

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

-
gmapping 算法功能包的輸入信息包含什么?
-
gmapping 輸出的是什么?
-
gmapping 訂閱了什么話題?
-
簡述一下gmapping 算法中的TF變換。
-
Move_base功能包里由ros提供的部分的核心是什么?(unsure)
-
acml是什么意思?實現原理是什么?
-
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ī)劃和實時避障。

-
簡述一下PR2機器人
簡述一下什么是tf樹
機器人不同部位和世界的坐標系以 tree structure 的形式存儲起來,tf管理一系列的樹狀結構坐標系之間的關系。查看功能包路徑的命令是什么?
rospack find [package_name]
- CMakeLists.txt的作用是什么?
CMakeLists.txt:Cmake的生成文件,編譯器編譯功能包的規(guī)則。
40.package.xml的作用是什么?
package.xml:功能包清單。定義有關包的屬性,例如包名稱,版本號,作者,維護者以及其他catkin包的依賴關系。
- 功能包目錄跳轉命令是什么?
roscd

什么是gazebo?
Gazebo是一個自主機器人3D仿真環(huán)境。 它可以與ROS配套用于完整的機器人仿真,也可以單獨使用。能夠進行動力學仿真等,模擬機器人以及機器人所處的復雜的物理環(huán)境。什么是rviz?
rviz是ros的一個可視化工具,用于可視化傳感器的數據和狀態(tài)信息。rviz支持豐富的數據類型,通過加載不同的Dispalys類型來可視化,每一個Dispaly都有一個獨特的名字。-
gazebo和rviz的區(qū)別是什么?
gazebo側重于機器人模型的物理特性以及動力學仿真等和物理環(huán)境的模擬,rviz則側重于傳感器的數據和狀態(tài)信息的可視化,并沒有像gazebo那樣模擬出形象的物理環(huán)境。
gazebo和rviz的區(qū)別



























