costmap_common_params.yaml參數解析和修改要點
該文件中表明了機器人底盤的尺寸參數和障礙物的膨脹參數

對于具體的機器人來說,要把相應的參數修改成機器人車體一致。
#傳感器讀數的最大有效高度,單位為 meters;
通常設置為略高于機器人的實際高度,高度是指包含機械臂打直情況下的最大高度。
max_obstacle_height: 0.60 ?# assume something like an arm is mounted on top of the robot
robot_radius對一個圓形的機器人來說,這是機器人的半徑,單位是米;對一個非圓形的機器人來說,
你可以用接下來說到的 footprint參數。這里用到的值是 Turtle的原始數據。
robot_radius: 0.15 ?# distance a circular robot should be clear of the obstacle (kobuki: 0.18)
footprint: [[x0, y0], [x1, y1], ... [xn, yn]] ?# if the robot is not circular
在列表中的每一個坐標代表機器人的邊上的一點,機器人的中心設為[0,0]。測量單位是米。
這在機器人周長上的點要不按照順時針排列,要不按照逆時針排列。
當機器人非圓形時,先找機器人的旋轉中心,即兩個輪的中心點設置成(0,0),然后確定機器人擺放方向,x,y為每個robot幾何型的每條邊的每個頂點。將所有頂點都列到其中。就完成了robot的footprint
footprint: [[0.55, 0.375], [0.55, -0.375],[-0.55, -0.375], [-0.55, 0.375]]
圖類型,這里為voxel(體素地圖)。另一種地圖類型為costmap(代價地圖)。
這兩者之間的區別是前者是世界的3D表示,后者為世界的2D表示。
map_type: voxel
障礙物層參數
obstacle_layer:
enabled: ? ? ? ? ? ? ?true ?#啟用
傳感器讀數的最大有效高度(單位:m)。 通常設置為略高于機器人的高度。 此參數設置為大于全局max_obstacle_height參數的值將會失效。
設置為小于全局max_obstacle_height的值將過濾掉傳感器上大于該高度以的點。
max_obstacle_height: ?0.6
min_obstacle_height: ?0.0
combination_method: 處理obstacle_laye之外的其他層傳入數據的行為方式,
枚舉型(enum)??赡艿娜≈涤校焊采w已有值"Overwrite" (0), 取最大值"Maximum" (1), 什么也不干"Nothing" (99)?!案采w”僅是“覆蓋”其他層的數據,例如使得它們沒有生效。 “取最大值”是多數時候需要的。 它提取obstacle_layer或輸入數據中提供的數據的最大值。 “Nothing”根本不會改變傳入的數據。
# ?請注意,這會極大地影響costmap的行為方式,具體取決于您對track_unkown_space的設置。
combination_method: ? 1
track_unknown_space 如果為false,每個像素具有兩種狀態之一:
致命障礙(lethal)或自由(free)。 如果為true,則每個像素具有3種狀態之一:
致命障礙(lethal),自由(free)或未知(unknown)。
track_unknown_space: ?true ? ?#true needed for disabling global path planning through unknown space
這兩個參數用來設置代價地圖的障礙信息的閾值。
“obstacle_range”更新以機器人為中心,按此數值為半徑內的障礙物信息。
將障礙物插入代價地圖的最大范圍,單位為 meters。
obstacle_range: 2.0
“raytrace_range”更新以機器人為中心,按此數值為半徑內的自由空間。
從地圖中掃描出障礙物的最大范圍,單位為 meters 。
raytrace_range: 5.0
#現在未使用
origin_z z原點,單位為米,僅對voxel地圖
#origin_z: 0.0
#z_resolution z分辨率,單位meters/cell;
#z_resolution: 0.2
#z_voxels 每個垂直列中的體素數目,ROS Nav功能包的默認值為10。
#z_voxels: 2
# ? unknown_threshold: 15 當整列的voxel是“已知”(``known’’)的時候,含有的未知單元(“unknown”)的最大數量
mark_threshold: 0 整列voxel是“自由”(“free”)的時候,含有的已標記的cell(“marked”)的最大數目。
publish_voxel_map: ?是否發布底層的體素柵格地圖,其主要用于可視化。
publish_voxel_map: false
“observation_sources”參數定義了一系列傳遞空間信息給代價地圖的傳感器。每個傳感器定義在下一行。
觀察源,我們這里是激光數據(scan)和凸點數據(bump)。觀察源列表以空格分割表示,定義了下面參數中每一個
observation_sources: ?scan
scan:
data_type: LaserScan
topic: "/scan"
“marking”和“clearing”參數確定傳感器是否用于向代價地圖添加障礙物信息,
#或從代價地圖清除障礙信息,或兩者都有。
marking: true
clearing: true
expected_update_rate: 0
注:關于Marking and Clearing:
marking和clearing參數用來表示是否需要使用傳感器的實時信息來添加或清除代價地圖中的障礙物信息)
代價地圖自動訂閱傳感器主題并自動更新。
每個傳感器用于標記操作(將障礙物信息插入到代價地圖中),清除操作(從代價地圖中刪除障礙物信息)或兩者操作都執行。
如果使用的是體素層,每一列上的障礙信息需要先進行投影轉化成二維之后才能放入代價地圖中。
#cost_scaling_factor and inflation_radius were now moved to the inflation_layer ns
#膨脹層參數
inflation_layer:
enabled: ? ? ? ? ? ? ?true #啟用膨脹地圖
# ? cost_scaling_factor 在膨脹期間應用于代價值的尺度因子。默認值:10。對在內接半徑之外的cells、以及在內接半徑之內的cells這兩種不同的cells, 代價函數的計算公式為:
exp(-1.0 * cost_scaling_factor * (distance_from_obstacle - inscribed_radius)) * (costmap_2d::INSCRIBED_INFLATED_OBSTACLE - 1)
cost_scaling_factor: ?10.0 ?# exponential rate at which the obstacle cost drops off (default: 10)
這里我們設置機器人的占用面積,按機器人坐標設置填入“footprint” 指定的footprint時,機器人的中心被認為是在(0.0,0.0),順時針和逆時針規范都支持。
robot_radius :是機器人的占用面積為圓形,直接設置半徑即可
inflation_radius:設置代價地圖膨脹半徑。可以理解以機器人為中心膨脹半徑為此數值內不能有障礙物出現。
地圖上的障礙物的半徑,單位為米。如果你的機器人不能很好地通過窄門或其他狹窄的地方,
則稍微減小這個值。相反的,如果機器人不斷地撞到東西,則嘗試增大這個值。
inflation_radius: ? ? 0.1 # max. distance from an obstacle at which costs are incurred for planning paths.
static_layer:
enabled: ? ? ? ? ? ? ?true
map_topic: ? ? ? ? ? ?"/map"
# ?附錄:
bump:觀察源之二:凸點數據。定義了:觀察源的數據類型,發布話題,標記和添加障礙物功能及定義傳感器源數值的有效范圍
data_type: PointCloud2 數據類型為點云
topic: mobile_base/sensors/bumper_pointcloud Topic為mobile_base/sensors/bumper_pointcloud
marking: true 啟用標記障礙物功能
clearing: false 關閉清除障礙物功能
min_obstacle_height: 0.0 傳感器最低有效讀數,以米為單位。
max_obstacle_height: 0.15 傳感器讀數的最大有效高度,以米為單位。
機器人 硬件開發
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。