范亞嫻, 陳衛東, 董凌峰, 王景川, 王鵬基
(1.上海交通大學電子信息與電氣工程學院, 上海 200240; 2.北京控制工程研究所, 北京 100190)
月球車在月面環境長時間、大范圍工作,月球車的定位是完成其工作的基礎,需要對定位性能進行大量測試。 由于月球探測任務的高風險和高價值,大規模還原月球環境成本太高,為了驗證月球車傳感器選型和算法,可行的替代方案是建立一個能夠反映真實月球表面地形特征的月面仿真系統。
月球車仿真系統主要包括月面三維環境、月球車以及傳感器3 個部分的模擬。 國內外研究人員對此開展了一系列的研究。
月面三維環境的模擬是月球車仿真系統的基礎。 Allan 等[1]提出了一種基于數字高程模型(Digital Evaluation Model, DEM)構建仿真月面環境的方法,仿照資源勘探者號月球車模擬了月球車和仿真月面之間的摩擦;謝圓等[2]模擬月海數字地形,用于月球車任務規劃仿真;Schuster 等[3]搭建了一個類月面的崎嶇地形并設計仿真環境;駱訓紀等[4]設計了基于組件對象模型(Component Object Model, COM)技術的月球漫游車分布式仿真系統,并提供了環境編輯器,以便利用預先創建的地形模塊搭建虛擬月面環境;Win等[5]介紹了一個用于驗證月球探測SLAM 系統實用性的系統,通過模擬安寧山坑口的現有環境數據進行了測試;Vassallo 等[6]提出了無基礎設施的視覺SLAM 算法,采用的月面仿真模型是利用月球勘測軌道器LRO 的數字高程數據與過濾器共同構建的。 但是,上述月面模型均缺乏多樣性,并且未模擬星空背景。 謝洪樂等[7]針對月面環境特有的恒星無窮遠點干擾問題,提出一種高效的恒星點剔除算法;尚天祥等[8]提出了一種針對月面環境的顯著特征點云提取方法。 但是,此前的仿真月面地形不可重構,月面場景多樣性不足,不能模擬光照變化。
對于月球車的研究,Tian 等[9]對六輪搖臂式月球車進行仿真建模,并建立月球車在崎嶇月面的動力學模型;Wang 等[10]對輪腿式月球車進行仿真,研究給出月球車運行的建議步幅和傾角;江磊等[11]基于Vortex 物理引擎,建立月球車車體動力學模型。 但以上研究未描述車體質量、車輪懸掛、輪地摩擦重配置的方法。
在傳感器方面,Bualat 等[12]利用雙目相機構建視覺里程計來跟蹤機器人(Astrobee)的運動,并使用深度相機構建用于路徑規劃的地圖;趙靜[13]利用視景仿真技術,在全局地圖已知的情況下執行路徑規劃任務。 但是,上述研究大多采用單一傳感器。
由于月面地形崎嶇,分布多種隕石坑和月面石塊,色彩單一,月面紋理信息缺乏,需要考慮采用同時定位與地圖創建(Simultaneous Localization and Mapping,SLAM)處理月球車的定位和地圖創建問題。 SLAM 指在未知環境中,根據傳感器觀測和已建立的部分地圖進行定位,在定位的基礎上增量式建造地圖。
本文基于開源機器人操作系統[14](Robot Operating System, ROS)和Gazebo 仿真器[15],創建一個月球車仿真系統,該系統加載月面的地形數據,并在該環境中創建月球車和傳感器的仿真原型,以驗證、評估不同的傳感器選型和不同的月球車算法。
系統框架如圖1 所示,主要由月面環境模型、月球車本體模型和傳感器模型組成。 模塊的功能如下:
1) 月面環境模型。 主要實現合成地形、光照陰影和星空背景的模擬。
2) 月球車本體模型。 包括月球車車體、車輪懸掛和輪地摩擦等的相關配置。
3) 傳感器模型。 主要模擬慣性測量單元(Inertial Measurement Unit,IMU)、三維激光雷達、雙目相機和亮度儀數據。
仿真系統可實現人機交互,允許用戶對月面環境進行重構,使用鼠標控制用戶觀察視角,通過鍵盤發送相關控制指令,控制月球車運動;為SLAM 算法模塊提供多種傳感器數據,并提供算法接口。
月球車在執行任務的過程中受到多種月面環境因素的影響。 月球車需要避開隕石坑、月面石塊、過于陡峭的月面凸起等。 地形是影響月球車運動的首要因素。 同時,由于月球車會搭載視覺傳感器,因此,月面紋理和光照也會影響月球車的任務。
本文的月面環境仿真針對上述問題,分別對月面地形、月面紋理、光照和陰影、星空背景4 部分進行模擬,生成一個可重構的月面環境。 基于基礎地形生成合成地形,經過紋理映射、光照和星空背景渲染,生成月面環境模型。 其中,星空背景的模擬調用Gazebo 中的星空模型。
合成地形是在月面基礎地形上添加隕石坑和月面石塊,形成一個包含多種月面場景的地形。其中,隕石坑和月面石塊均采用隨機分布。 對隕石坑和月面石塊的仿真不僅是月面仿真的關鍵,也對月球車相關算法如SLAM、路徑規劃等起到著至關重要的作用[16]。
3.1.1 基礎地形
地形原始數據來自月球偵察軌道衛星LRO,該地點位于阿波羅15 號著陸點以南3 km 處,包含不同坡度的起伏和深度超過20 m 深的環形山[17]。 在仿真月面中,月面范圍為1000 m×1000 m,基礎地形的俯視圖如圖2 所示。
基礎地形模擬場景較為單一,為了提高月面地形模擬的多樣性,使地形模擬更為真實,在基礎地形上進一步添加不同種類的隕石坑和月面石塊。 將原本固定的單一月面場景改進為可重構的多種月面場景。
3.1.2 月面隕石坑
通過高度圖變換添加月面隕石坑。 高度圖的每一個像素對應三維空間的一個頂點,一般0(黑色)表示最低點,255(白色)表示最高點。 高度圖由二維數組v構成,對于月球中的采樣點(x,y,z) 。 高度圖的二維坐標值v[x][y] 對應三維頂點(x,y) 值,亮度值對應頂點的z值的關系如式(1)所示:

式中,hMAX是月球表面的最大高度。v[x][y] 對應的亮度值為l。
Pike[18]對月球隕石坑進行了測量和計算,隕石坑的深度與直徑滿足經驗公式(2):

式中,H為隕石坑深度,D為隕石坑直徑。
月面高度圖轉換后的月面三維場景如圖3(a)所示。 將該高度圖作為地形模型加載到Gazebo 的.world 文件中,對月球環境進行渲染,生成月球車仿真環境,如圖3(b)所示。

圖3 月面仿真場景Fig.3 Lunar surface simulation scene
3.1.3 月面石塊
月面石塊形狀包括圓形、矩形、凹坑形等[19]。采用SketchUp 設計石塊的基礎模型,生成41 種不同的石塊模型,在建立石塊模型后,轉換為Gazebo 可識別的統一格式(.dae 格式),并將其導入到Gazebo 中,形成石塊模型數據庫。
由于石塊模型庫中的模型個數有限,實際月面分布的石塊遠遠超出模型庫中的石塊模型數。因此,為了避免月面環境中石塊過于單調,在石塊融合到月面過程中,通過隨機變換石塊在基礎地形上的角度和大小,從而達到不同的仿真結果。在月面環境中可以在線調整石塊的形狀、大小、數量和空間分布。
3.1.4 合成地形實例
合成地形選取3.1.1 節所述具有代表性月面地形特征的區域作為模擬場景。 合成地形的局部圖如圖4 所示,其中圖4(a)為合成地形俯視圖,紅色框選部分為新增隕石坑;圖4(b)上圖為月面凸起和月面石塊局部放大圖,下圖為隕石坑局部放大圖,該隕坑直徑約為60 m,深度為約為11 m。

圖4 合成地形Fig.4 Synthetic terrain
設置41 種不同類型的石塊,如圖5 所示,不同種類石塊在月面環境中的數目如圖6 所示,其中,每100 m×100 m 的范圍內,隨機分布的石塊總數為1056 塊,石塊直徑大于20 cm 的數目為23塊,石塊直徑在10~20 cm 之間的數目為160 塊,石塊直徑在5~10 cm 之間的數目為753 塊,石塊直徑在2~5 cm 之間的數目為120 塊。

圖5 月面石塊Fig.5 Lunar surface rocks

圖6 不同種類石塊的數目Fig.6 Number of different types of rocks
根據月面不同區域的紋理特征,選取3 種不同的紋理[20]對月面地形進行紋理映射。 本文在處理紋理映射時,可以簡單歸納為以下4 個步驟:
1)加載紋理圖像。
2)將紋理的坐標映射到三維空間坐標。
3)將紋理顏色與月面基礎地形、顏色和材質顏色融合。
4)采用最近鄰差值[21]進行紋理過濾,優化紋理映射的效果。
不同的紋理效果如圖7 所示。 其中,紋理1 為基礎地形紋理圖片,紋理2 中紋理特征較紋理1有所減少,紋理3 中紋理接近于灰色,特征最少。

圖7 不同月面紋理Fig.7 Different Lunar surface textures
在進行月面光照和陰影的模擬時,主要考慮月面是介于漫反射體和鏡面反射體之間的物體,在設計光照時需要考慮反射強度與光源之間的關系[16]。 因此,采用無限光源,即選用從無限遠處照射的光源,主要模擬太陽光照射效果,光線是互相平行的。
通過調整光源的方向角來調節光照角度,通過調節光源中心點與原面的距離調節月面亮度。同時,通過調節光照強度與角度可模擬月面不同時刻的光照。 本文僅考慮太陽光照本影的影響。光照顯示效果圖如圖8 所示。

圖8 光照效果圖Fig.8 Lighting effects
采用SolidWorks 設計月球車的三維模型,對月球車的車身、車輪、連桿等各部分進行設計。
4.1.1 車體模型
月球車的3D 建模主要利用SolidWorks 軟件生成Gazebo 可執行的URDF 文件,使用XACRO對URDF 文件模型進行優化。 其中,URDF 是ROS 中使用XML(可擴展標記語言)格式描述機器人(含月球車)模型的文件,包括外觀形狀、尺寸、顏色、物理屬性和關節類型等基本屬性。XACRO 是對URDF 文件進行優化后的模型文件。月球車模型文件導入的流程圖如圖9 所示。

圖9 月球車模型導入流程Fig.9 Import process of lunar rover model
月球車的車體質量為M,車身尺寸為(L,W,H),車輪直徑為D,車輪間距為B,用戶可配置上述參數。 月球車仿真模型、本體坐標系與傳感器坐標系如圖10 所示,月球車本體坐標系原點Ob位于月球車的質心,定義月球車前進方向為x軸方向。

圖10 月球車車體與傳感器配置Fig.10 Configuration of the lunar rover body and sensors
4.1.2 車輪懸掛
通過直接在Gazebo 中配置每一次仿真循環中的修正誤差ERP和物理引擎的全局混合約束力CFM模擬彈簧-阻尼約束[22],實現車輪懸掛模型。ERP表示在一次仿真循環中,系統所允許最大關節誤差,取值范圍為0~0.8;CFM反映了物體表面的柔軟程度,取值范圍為0~1,計算公式如式(3)、(4)所示:

式中,Kp為彈性系數,Kd減震系數,模擬步長h由Gazebo 仿真器生成。
設置CFM=1,ERP=0.2,添加懸掛系統前后的IMU 的z軸加速度曲線如圖11 所示。

圖11 IMU z 軸加速度曲線Fig.11 z-axis acceleration curve of IMU
利用libgazebo_ros_diff_drive.so 插件,將月球車簡化為雙輪差速模型。 通過式(5)將月球車的車體運行速度解算為各個車輪的轉速。

式中,vL和vR為左、右輪的線速度,v為車體線速度,w為車體角速度,d為前后輪間距。
為模擬地面摩擦,通過XACRO 文件配置開源動力引擎(Open Dynamic Engine,OpenDE)定義的摩擦系數μ,滿足庫倫定律[23]:

式中,fμ為車輪摩擦力,fN為車輪所受法向力,μ為表面摩擦系數。μ有效范圍是任意非負數,0 表示無摩擦。 設置μ為0.1。
為方便傳感器選型以及驗證月球車算法的有效性,月球車模型搭載多種傳感器,探測月球表面的障礙物和潛在危險,包括本體傳感器IMU 和外部傳感器雙目相機、三維激光雷達、亮度儀等。 其中,亮度儀為仿真中額外增加的虛擬傳感器,主要是為了定量測量環境中的亮度變化,其他傳感器的相關設置均參考現有月球車設置。
月球車的IMU、雙目相機、三維激光雷達傳感器坐標系相對于月球車本體坐標系Ob的位置和姿態關系如表1 所示。 車體傳感器的布局見圖10,根據各傳感器相對于車體坐標系的位姿,可獲得各傳感器之間的轉換關系,用戶可配置各傳感器的位姿。

表1 各傳感器坐標系相對于車體坐標系的位置關系Table 1 The positional relationship of each sensor coordinate system relative to the base coordinate system
IMU 使用libgazebo_ros_imu_sensor.so 插件模擬Analog Devices ADIS16495 IMU,發布月球車的速度和加速度數據,所使用的IMU 傳感器參數設置如表2 所示。

表2 IMU 傳感器參數Table 2 Parameters of IMU sensor
雙目相機采用libgazebo_ros_multicamera.so插件模擬FLIR BumbleBee2 雙目相機,發布圖像數據。 模擬的雙目相機傳感器的相關參數設置如表3 所示。

表3 雙目相機傳感器參數Table 3 Parameters of stereo camera sensor
三維激光雷達使用libgazebo_ros_velodyne_laser.so 插件模擬VLP-16 三維激光雷達,發布點云數據。 三維激光雷達的相關參數設置如表4所示。

表4 三維激光雷達傳感器參數Table 4 Parameters of 3D LiDAR sensor
亮度儀為月球車中額外增加的虛擬傳感器,主要用于定量測量3.3 節中所描述的光照變化,計算圖片的平均亮度。 相機的原始數據類型為YUV 格式,其中,Y通道為亮度通道。 計算圖片的平均亮度即是計算Y通道的平均值,亮度儀的測量范圍為0~255 px。
亮度儀擴展了相機傳感器模塊,使用相機捕獲圖像,計算圖像的亮度,通過ROS 話題發布亮度值。
基于實際月面環境和月球車的特點,本文建立并集成了月面環境、月球車和傳感器模型的計算機仿真系統。 該仿真系統的主要功能是為月球車算法開發提供月面數據、月球車運動數據和傳感器數據,從而驗證各種月球車算法的邏輯和功能。
因此,本文在仿真系統上驗證月球車多種傳感器SLAM 算法性能,分別測試視覺和激光慣性SLAM 的2 種典型算法:ORB-SLAM2[24]和LeGOLOAM[25]。 其中,月球車在月面環境中的位姿真值由Gazebo 插件libgazebo_ros_p3d.so 生成。
仿真系統采用Linux 操作系統Ubuntu16.04、機器人操作系統(ROS Kinetic) 和仿真平臺Gazebo 7.16,硬件配置為Intel(R) Core(TM) i7-4790 CPU + 12Gb RAM。 考慮到月球車的尺寸,本文在仿真月面中選取100 m×100 m 的范圍作為測試區域。 月球車參數配置如表5 所示。 月球車傳感器參數可以由用戶自定義設置。

表5 月球車配置參數Table 5 Parameters of lunar rover
仿真系統提供人機交互接口,可以通過鍵盤控制月球車的移動和轉向,人機界面將仿真結果通過Gazebo 以及Rviz[26]反饋給用戶,允許用戶對月面環境進行重構,使用鼠標調節用戶觀察視角。 Gazebo 的主界面包括場景、控制面板、頂部工具欄和底部工具欄4 個部分, 分別對應圖12(a)中①~④。 Rviz 的主界面包括工具欄、顯示列表項和3D 視圖區3 個部分,分別對應圖12(b)中的①②④。

圖12 月球車仿真與傳感器信息顯示Fig.12 Lunar rover simulation and sensor information display
圖12 顯示了月球車在月面環境中的仿真結果。 在圖12(b)中,Rviz 中顯示雙目相機、三維激光的傳感器數據。 從雙目相機生成的圖像,如圖12(b)③中可以看到仿真的隕石坑、月面石塊和紋理信息,三維激光的點云數據,如圖12(b)④也顯示了月面石塊和月面凸起的輪廓。
相機采用FLIR BumbleBee2 雙目相機模型,主要用于檢測月面潛在危險,如火山口和小石塊,同時,相機對于月面紋理以及光照變化也十分敏感。
ORB-SLAM2 是經典的視覺SLAM 算法,可用于單、雙目相機和RGB-D 相機,包括視覺里程計、跟蹤、回環檢測,是一種完全基于稀疏特征點的SLAM 系統。 本文測試了月球車在不同紋理和不同亮度的ORB-SLAM2 算法效果。 其中,月球車運行距離約為200 m。
6.2.1 不同特征稠密程度
圖13、14 分別為月面場景中的某一幀圖像及該幀圖像中檢測到的特征點,分別對應稠密特征點和稀疏特征點的仿真場景,在運行過程中,圖14 中月面隕石坑也會被檢測出特征點。

圖13 特征稠密場景特征點檢測Fig.13 Feature point detection for feature dense scenes

圖14 特征稀疏場景特征點檢測Fig.14 Feature point detection for feature sparse scene
6.2.2 不同紋理效果
在3 種不同紋理場景下分別測試了ORBSLAM2,定位誤差如表6 所示。 其中紋理2 較紋理1 視覺特征較少,在進行ORB 特征檢測時誤匹配特征點較少,因此,定位誤差與紋理1 場景相比稍小。 在紋理3 場景中,由于紋理接近于灰色,只能檢測較少的特征點,定位極大地依賴石塊、隕石坑以及部分凸起,定位效果最差,測試結果符合預期效果。

表6 不同紋理場景的ORB-SLAM2 定位誤差Table 6 ORB-SLAM2 localization errors in different texture scenes
6.2.3 不同光照效果
圖15 表示月球車在背光場景下對應的特征點提取情況,可以清晰地提取石塊特征點;圖16表示在星空背景下星星被識別為特征點的情況,在月球車運行過程中,星空一直被錯誤地識別為靜態特征點,影響定位誤差。 因此,在利用視覺定位時,需要濾除遠處的靜態星空點,以防止其對定位的影響。

圖15 背光場景特征點提取Fig.15 Feature point extraction for backlit scene

圖16 星空背景特征點提取Fig.16 Feature point extraction for starry sky background
采用紋理1 場景,分別在如圖17 亮度值為125 px、90 px、60 px 情況下進行了ORB-SLAM2測試,定位誤差如表7 所示。 結果表明,在亮度值為125 px 時,定位效果最佳。 亮度越高,特征點提取效果越好。

圖17 不同光照場景Fig.17 Different illuminance scenes

表7 不同亮度值的ORB-SLAM2 定位誤差Table 7 ORB-SLAM2 localization errors under different illumination
激光雷達使用VLP-16 三維激光模型,用于探測障礙物,如遠處的山脈或大巖石。 與相機相比,激光雷達不受光照變化、紋理變化影響,只受月面地形和月面石塊的影響。 因此,分別在不同月面石塊數量的月面仿真環境中測試LeGOLOAM。
LeGO-LOAM 將三維激光雷達數據與IMU 數據融合,定位誤差如表8 所示。 測試發現:①在特征量稀疏場景下,由于缺乏石塊等明顯的特征,僅僅依靠月面凸起和隕石坑,三維激光雷達無法獲得足夠的有效特征點,定位誤差較大;②在特征量較多場景下,算法依賴月面石塊和月面的凸起,定位誤差較①的情況有所減小,符合LeGO-LOAM算法的預期效果。
本文從月球車傳感器選型和算法驗證的實際需要出發,綜合考慮月面環境的特征,開發了一個月球車多傳感器仿真系統。
1)分析了各種月面因素對月球車的影響,根據經驗信息,利用高度圖變換和隨機生成法建立了可重構的多種月面場景;通過紋理映射和增加月面光照,實現了月面多種紋理的仿真以及模擬了多種時刻的月面,作為開展月球車任務研究的基礎。
2)為了更好地研究實際月球車和傳感器配置,在仿真系統中設計了可配置的月球車模型,模擬了多種傳感器模型,同時,該仿真系統提供了月球車的位姿真值,為月球車算法提供了有效的真值。
3)為了驗證仿真系統的有效性,本文利用該仿真系統測試了2 種典型視覺SLAM 和激光慣性SLAM 算法,結果表明:該仿真系統可以作為驗證傳感器選型和算法可行性的測試平臺。 本文方法能夠有效地模擬月球表面的信息,具有較強的真實感,能夠滿足月球車視覺和激光算法測試驗證的需求。
本文的仿真系統可成為實際月球車傳感器選型和算法驗證的重要工具,在月面探測和載人航天領域具有良好的應用前景。 后續將進一步豐富月面環境,增加車轍、碎石等特征,完善月球車與月壤相互作用的動力學模型。