1. 前言
好多初創公司公布出來的視頻明顯都是尋跡的效果,不是說尋跡不好,相反可以證明,尋跡是自動技術開始的第一步。
自動駕駛尋跡:一種能夠自動按照給定的路線(通常是采用不同顏色或者其他信號標記來引導)進行移動的汽車。
本章內容有和No. 1、No. 2與No. 3重復的內容,為了方便自己調試,我將重復的內容也貼出來。
注意:所有需要在 [Simulation] 菜單下加載的數據,都需要在所有操作之前操作,否則在RViz顯示時,會出現frame_id錯誤。
采用尋跡方式,首先要做的就是要確定汽車離航跡點集上的那個點最近,然后通過control算法將車輛移動到該航跡點上。所以尋跡尋跡方法最核心的操作同樣是定位。
本節尋跡我們同樣仿真數據與真車實測兩個方式來介紹
2. 仿真數據尋跡
2.1 打開runtime manager
2.2 打開地圖要定位的數據(在百度網盤中有,這是我們錄制的用於定位的數據)
進入 [Simulaton] 頁面,點擊界面右上方 [Ref] 按鈕,加載錄制用於定位的 bag 文件。

點擊 [Play] 然后點擊 [Pause]暫停。
2.3 加載地圖,加載world到map以及base_link到velodyne的TF變化
(1) 設置從base_link到velodyne坐標系的TF(與No. 1重復)
在 [Setup] 菜單中,確保 [Localizer] 下選項為 [Velodyne],在 [Baselink to Localizer] 中設置好各個參數之后點擊 TF 按鈕,其中x、y、z、yaw、pitch、roll表示真車雷達中心點與車身后軸中心點的相對位置關系(右手坐標系,真車后車軸為原點),此時可以點擊[Vehicle Model],如果[Vehicle Model]為空,那么會加載一個默認模型(在rviz顯示時,如果有激光雷達數據,車輛會顯示為黑色)。如下所示。

(2)設置從world到map轉換(與No. 1重復)
點擊 [Map] 頁面,點擊 [TF] 的 [ref] 選擇 autoware/ros/src/.config/tf/tf_local.launch 文件,這是加載默認world到map的坐標轉換,打開tf_local.launch文件如下:
<launch>
<node pkg="tf" type="static_transform_publisher" name="world_to_map" args="0 0 0 0 0 0 /world /map 10" />
</launch>
args的參數“0 0 0 0 0 0 /world /map 10”表示:從/world坐標系轉換到/map坐標系的x, y, z, roll, pitch, yaw轉換,且頻率為10Hz。
點擊 [TF] 按鈕,如下圖:

(2)加載地圖
選擇runtime manager的 [Map] 菜單,點擊 [Point Cloud] 按鈕的 [ref],加載培訓筆記 No. 1產生的.pcd文件(點雲地圖),並點擊 [Point Cloud] 按鈕,進度條顯示OK,則加載完畢,如下所示:

2.4 設置相關濾波器
選擇 [Sensing] 頁面,點擊 [Points Downsampler] 下 [voxel_grid_filter] 的 app,設置一些參數,[voxel_grid_filter] 是一種將采樣方法,將點雲數據用質心近似(用於降采用),如下圖:

這里,[Voxel Leaf Size] 參數值為2,意義是2米的立方體內的全部點近似用1個質心代替。[Measurement Range]的參數值為2,意義是點雲的有效的距離為200米。
在[Sensing] 菜單下的 [Points Preprocesser] 下 [ring_ground_filter],[app]設置如下:

[ring_ground_filter]用於區分地面與障礙物。參數描述如下:
[Sensor Model]參數為激光雷達的線掃條數,我們項目用的是16線激光雷達,這里我們選16;
[Sensor Height]參數表示傳感器距離地面高度;
[Max Slope]表示最大的坡度,根據Alex如果不給出好坡度,容易將坡識別為障礙物;
[Vertical Thres]表示障礙物和地面的差異度,如果大於這個值則被認為是障礙。(這里還要看代碼)
我們場地大約有一個5度的坡,所以需要設置這個參數。
[Points Downsampler] 下的四個濾波器都可以選,但我只看了 [voxel_grid_filter] 濾波器,其他三個暫時沒看,后續會陸續補充。
[ring_filter] 與 [ring_ground_filter] 聯合來用,才會過濾掉地面,如果大家去看 [computing] 菜單下的 [astar planner] 下的 [velocity set] 選項下的 [app] 設置會發現這個選項要接收的topic為points_no_ground 只有這兩個選項都開啟時,這個選項才會生效。 [velocity set] 實際上就是跟斑馬線及障礙物相關的速度設置。
所以 [ring_filter] 與 [ring_ground_filter] 也要勾選。
如果采用非velodyne的激光雷達,勾選 [ring_filter] Failed to find match for field 'ring' 的錯誤,問題沒有解決,如果哪位大神知道是什么問題,歡迎在下面留言告訴我。
2.5 設置導航
(1)在 [Computing] 菜單欄右側 [Mission Planning] 中勾選 [lane_rule],[lane_stop],[lane_select] 三個選項,如下圖所示:




[lane_rule]表示設置當紅燈亮時,停止線之前與之后點的個數。具體參數如上圖:
[Acceleration]表示到達/通過停止線的加速度;
[Stopline Search Radius]表示搜索停止線圓心,半徑1m的waypoints;
[Number of zeros ahead]/[Number of zeros behind]表示停止線前/后的waypoints個數,用於修改停止線前后waypoints的速度/加速度;
[Number_of_smoothing_count]用於平滑waypoints。
[lane_stop]用於識別紅綠等,根據紅綠燈的結果將停止線的waypoints變為紅色(停止)或者綠色(繼續形式)。
[Traffic Light]下的Red Light與Green Light用與手動調整當前路徑處在紅燈狀態還是綠燈狀態;
[Lane Change]用於變道,[<<Left Lane]與[Right Lane>>]用於變道的按鈕。
[Current Lane]下的[Keep at]表示當前Lane保持的速度,[Stop in]表示停止時距離Stopline的最大距離。
[lane_select]用於將汽車行駛在可以選擇的Lane上,如果 [waypoint_loader] 僅有一條Lane可以選擇,那么選擇這條路徑。
[Distance threshold to neighbor lanes]表示表示檢測當前路徑周圍的有效通道的閾值。 超過此閾值的車道不會被識別為車道;
[Lane Change Interval After Lane merge]指示在更改車道后可以運行多少米的值,您可以再次更改車道;
[Lane Change Target Ratio](這個暫時還不太明白作用)
[Lane Change Target minimum(m)]表示講變道到目標車道上目標點的最小距離;
[Vector Length of Hermite Curve(m)]表示用Hermite曲線上waypoints的向量長度;
上述三個設置全部用默認值。
(2)在菜單欄 [Computing] 右側的 [astar_planner] 下的 [obstacle_avold], [velocity_set] 並勾選,如下所示:

[obstacle_avold]表示避障的相關參數;
[velocity_set]表示避障速度設置的相關參數。
上面 [app] 參數還在看代碼,日后補充
以上參數全部采用默認值。
(3)在菜單欄 [Computing] 右側的 [waypoint_maker] 下的 [waypoint_loader] 加載waypoints。

選擇 [Ref] 加載之前保存下來的路點文件,並點擊 [Close] 關閉頁面。勾選 [waypoint_loader] ,如下圖所示:

這里需要勾選[disable_decision_maker]。
(4)在 [Computing] 菜單欄,找到 [waypoint_follower] 下 [pure_pursuit] 與 [twist_filter] 的 [app] 進行設置。

[waypoint_follower] 的 [app] 在打開的菜單欄如上左圖所示,勾選 [Dlalog] 選項,確保 [Velocity]( 手動設置速度 ) 選項值不能太大,因為這里是路點跟隨中設置速度的地方,[Waypoint] 模式下速度即是制作路點文件中記錄的 bag 文件的車速,已經被寫入路點文件中,而 [Dlalog] 模式則可以手動設置車輛速度。
[waypoint_follower] (詳細參數還沒有看,日后補充)
PS:如果你希望車子檢測到障礙物會停下來,需要勾線[Sensing]菜單欄中的 [ray_ground_filter] ,同時在 [Computing]菜單欄中的[pure_pursuit] 的 [app] 下勾選 [Waypoint],這時車輛會按照你在No.3中記錄的航跡點速度在跑。如果你在No.3的2.7節中沒有勾選[Save/current_velocity] 那么需要你手動修改你錄制航跡點中的速度值。
2.6 運行仿真數據
打開 [Rviz], 在 [file] 菜單中的 [open config] 選擇路徑:autoware/ros/src/.config/rviz/default.rviz 的文件。這是回到runtime manager,進入 [Simulaton] 頁面,點擊 [Pause]開始。這時可以從RViz中看到一輛黑色的帶有激光雷達數據的汽車停在地圖的右下方,如下圖所示:

運行效果如下:
3. 真車尋跡
真車尋跡與仿真尋跡類似,差別在於仿真定位采用事先記錄的數據,真車定位采用實際的激光雷達。
3.1 打開runtime manager
3.2 啟動激光雷達(與No.1 重復內容)
(1)針對velodyne 多線lidar
如果你有velodyne激光可以啟動默認配置:[Sensing] 頁面下 [Lidars] 選項下針對你的velodyne選擇,velodyne激光對應的發布的點雲topic:/velodyne_packets,frame_id:velodyne,topic會被重映射成為/points_raw。
例如:假如你有16線激光,點選 [velodyne VLP-16] 的 [config],點選[ref],加載/home/pix/Autoware/ros/src/sensing/drivers/lid ar/packages/velodyne/velodyne_pointcloud/param s/VLP16db.yaml路徑下的配置文件(自己多線激光雷達可以針對這個配置改寫),退出 [config],勾選 [velodyne VLP-16] 選項(一般的操作都是先修改config或者app下的配置或參數文件,然后勾選選項)。

查看點雲輸出。
(2)針對其他品牌多線lidar
如果你有其他品牌的激光,他們發布的topic不是/velodyne_packets,且frame_id同樣不對應,這時可以自己寫個程序轉一下,參照:https://www.cnblogs.com/hgl0417/p/11067660.html。然后單獨運行你的lidar driver node,將你的點雲數據模擬成velodyne數據。此時,不需要點選runtime manager上的lidar配置文件(每個配置文件對應一個package或者node,意義在於將對應的topic發布,此時你已經發布了topic,所以不需要在點選上述配置文件)。
3.2 加載地圖,開啟相關設置
重復上述2.2~2.5的操作
3.3 啟動底盤連接
由於我們的車底盤的CAN已經做好了,所以在這里,我們只需點擊 [Interface] 菜單下的 [Gateway] 按鈕就可以鏈接底盤。

3.4 啟動汽車的自動駕駛
我們轎車為了安全,啟動環節比較復雜,感謝老司機每天重復這樣的操作
自動駕駛成功。
引用:
autoware.ai
dowson.live
原創文章,轉載請引用。
