翻譯 - AEROSTACK - 使用XML文件配置環境
聲明:本文是一篇翻譯文章,文章來源:https://github.com/Vision4UAV/Aerostack/wiki/Configure-the-Environment-Map-Using-XML-Files未經博主本人許可,文章禁止轉載!!!
機器人的環境地圖可以使用一系列的遵循XML語法配置文件來確定.這些文件位於$AEROSTACK_STACK/configs/
中由操作者選定的文件夾,名爲drone{Id}
({Id}
=00,01,02,…).參數{Id}
是任務中使用的無人機的標誌,這由所是所使用的launch文件確定。可以根據下面的步驟來改變環境地圖的配置。
1.定義地圖的尺寸
地圖的尺寸定義在文件configFile.xml
中。例如:
<map>
<config>
<dimensions>4.0 6.0</dimensions>
<initPoint>0.0 0.0</initPoint>
</config>
</map>
<dimensions>
參數確定飛行空間(x, y)的尺寸,其單位爲米。<initPoint>
參數確定地圖座標的原點,這個參數可以任意設置同時在設置障礙物的時候也要將其考慮進去。在本文的這個例子中,地圖的尺寸是4m x 6m, 且原點設置爲(0, 0)。
2.定義起飛點
起飛點應當通過下述兩個文件來設置:
- 文件
ekf_state_estimator_config.xml
- 定位初始點在文件
param_localization_obs.xml
中
在本文的例子中,起始點的x和y座標是(1m, 1m),因此兩個文件都將這個點設置爲(1, 1),但對於每個文件還要做一些修改。
2.1 EKF 起飛點
在文件ekf_state_estimator_config.xml
中定義的起飛點確定了EKF(Extended Kalman Filter)開始進行估計所用的起飛點。這個估計是從無人機處於着陸(未起飛)狀態下開始的,因此其高度(z)設置爲0。
<take_off_site>
<position>
<x>1.0</x>
<y>1.0</y>
<z>0.0</z>
</position>
<attitude>
<yaw> 90.00</yaw>
<pitch> 0.00</pitch>
<roll> 0.00</roll>
</attitude>
</take_off_site>
單位:
- 標籤
<position>
的單位:meters - 標籤
<attitude>
的單位:角度 (wYcPuR)
翻譯標註:這裏角度後面括號中wYcPuR的含義尚不瞭解
2.2 Aruco 視覺標誌起飛點
翻譯標註:
Aruco:一種基於OpenCV的增強現實應用程序的最小庫
參考鏈接:http://www.uco.es/investiga/grupos/ava/node/26
文件param_localization_obs.xml
定義的起飛點是用來確定Aruco視覺標誌定位起始點在地圖中的位置的。這個起始點是用於當起飛動作已經完成時的定位的,因此設置座標 z = 0.7m.
<!-- Localization -->
<!-- Init pose -->
<x_0> 1.0</x_0>
<y_0> 1.0</y_0>
<z_0> 0.7</z_0>
<yaw_0> 90.0</yaw_0>
<pitch_0> 0.0</pitch_0>
<roll_0> 0.0</roll_0>
位置的單位是米而角的單位是度。
正如你如見,這兩個文件都有翻滾角、俯仰角和航向角的初始值。翻滾角和俯仰角的初始值爲0, 因爲定位是從這些值開始的。儘管如此,航向角則是由使用者的任務要求給定的。如果用戶希望無人機面朝x軸正方向起飛,那麼航向角爲0。.在本文的例子中,無人機將會面朝y軸正方向起飛,因而航向角的大小爲+90度。
3.創建障礙物和虛擬的牆
牆和障礙物是在文件obstacle_config.xml
中定義的。這一文件允許所創建的障礙物是真實的(可以由Aruco視覺標誌探測到)或者是虛擬的。
虛擬的牆覆蓋地圖的區域從而將無人機的活動限制在期望的地圖空間內。因爲本例中的地圖尺寸爲4m x 6m,虛擬的邊界可以如下所定義:
<!-- borders (Virtual Obstacles): 10000-19999 -->
<rectangle description="bottom side">
<id>10000</id>
<centerPoint>2.0 0.0</centerPoint>
<size>4.0 0.3</size>
<yawAngle>0.0</yawAngle>
<virtual description="define a virtual object">1</virtual>
</rectangle>
<rectangle description="right side">
<id>10001</id>
<centerPoint>4.0 3.0</centerPoint>
<size>0.3 6.0</size>
<yawAngle>0.0</yawAngle>
<virtual description="define a virtual object">1</virtual>
</rectangle>
<rectangle description="up side">
<id>10002</id>
<centerPoint>2.0 6.0</centerPoint>
<size>4.0 0.3</size>
<yawAngle>0.0</yawAngle>
<virtual description="define a virtual object">1</virtual>
</rectangle>
<rectangle description="left side">
<id>10003</id>
<centerPoint>0.0 3.0</centerPoint>
<size>0.3 6.0</size>
<yawAngle>0.0</yawAngle>
<virtual description="define a virtual object">1</virtual>
</rectangle>
除了定義地圖中飛行的邊界,文件obstacle_config.xml
將Aruco視覺標誌與地圖中的障礙物關聯起來。
<pole description="A">
<id>50002</id>
<radius>0.15 0.15</radius>
<aruco>
<id aruco_id = "17"/>
<id aruco_id = "18"/>
<id aruco_id = "19"/>
<id aruco_id = "20"/>
</aruco>
</pole>
翻譯標註:原文中上面倒數第三行代碼爲:
<id aruco_id = "20/>
, 但這是不合語法的,可能是原作者疏忽了,因而,本文翻譯時加以修改。
正如上面可見的一樣,四個Aruco標誌(id:17, 18, 19, 20)是用來定義一個障礙物的,在本文的例子中指的是一個半徑爲0.15的圓柱形杆子。通過這個文件,用戶可以組成障礙物的Aruco標誌及它的幾何形狀。
4.在地圖中放置Aruco視覺標誌
在所構建的環境中的視覺標誌的位置是由文件param_localization_obs.xml
來定義的。在這一文件中,用戶可以具體化Aruco Slam的細節。這裏,可由視覺SLAM建圖的視覺標誌的Ids可以由<VisualMarkersRange>
來定義。
同時,在這一文件中,用戶可以指定地圖中的安裝的視覺標誌。
4.1 障礙物的視覺標誌
本文中的例子使用了三個圓柱形的杆子來作爲已知的障礙物,以進行導航通過和避障。每個圓柱的位置通過放置在圓柱上的Aruco的中心座標(x, y, z)來確定。因爲在這一任務中所用到的圓柱的直徑爲40釐米,因而每個Aruco的中心位置如下所示:
<!-- Pole 1 -->
<Aruco id="9" x="3.0" y="1.80" z="1.3" roll="0" pitch="0" yaw="-90"/>
<Aruco id="10" x="2.80" y="2.0" z="1.3" roll="0" pitch="0" yaw="180"/>
<Aruco id="11" x="3.0" y="2.20" z="1.3" roll="0" pitch="0" yaw="90"/>
<Aruco id="12" x="3.20" y="2.0" z="1.3" roll="0" pitch="0" yaw="0"/>
<!-- Pole 2 -->
<Aruco id="13" x="1.0" y="1.80" z="1.3" roll="0" pitch="0" yaw="-90"/>
<Aruco id="14" x="0.80" y="2.0" z="1.3" roll="0" pitch="0" yaw="180"/>
<Aruco id="15" x="1.0" y="2.20" z="1.3" roll="0" pitch="0" yaw="90"/>
<Aruco id="16" x="1.20" y="2.0" z="1.3" roll="0" pitch="0" yaw="0"/>
<!-- Pole 3 -->
<Aruco id="25" x="2.0" y="4.80" z="1.3" roll="0" pitch="0" yaw="-90"/>
<Aruco id="26" x="1.80" y="5.0" z="1.3" roll="0" pitch="0" yaw="180"/>
<Aruco id="27" x="2.0" y="5.20" z="1.3" roll="0" pitch="0" yaw="90"/>
<Aruco id="28" x="2.20" y="5.0" z="1.3" roll="0" pitch="0" yaw="0"/>
這裏所期望的障礙物的位置爲:(3.0, 2.0), (1.0, 2.0)和(2.0, 5.0)。
4.1 用作地標的視覺標誌(用於自定位)
除了已知的圓柱位置,地標是被用來進行自定位的且一般被放置在地圖結束的地方(例如,視覺伺服任務執行的地方)。每個地標帶有兩個Aruco視覺標誌。如果地標被放置在y軸上且朝向右側,對於第一個Aruco標誌需要在y座標上扣除0.11而對於第二個則需要從y座標上增加0.11,如下所示:
<!-- Landmark 1 -->
<Aruco id="61" x="0.0" y="3.89" z="1.3" roll="0" pitch="0" yaw="-45"/>
<Aruco id="62" x="0.0" y="4.11" z="1.3" roll="0" pitch="0" yaw="45"/>
如果地標被放置在x軸上且朝向起飛點,那麼對於第一個Aruco標誌需要在x座標上扣除0.11而對於第二個則需要從x座標上增加0.11,如下所示:
<!-- Landmark 4 -->
<Aruco id="69" x="2.89" y="6.0" z="1.3" roll="0" pitch="0" yaw="225"/>
<Aruco id="70" x="3.11" y="6.0" z="1.3" roll="0" pitch="0" yaw="-45"/>
在本文中的例子中,一共使用了6個地標:
<!-- Landmark 1 -->
<Aruco id="61" x="0.0" y="3.89" z="1.3" roll="0" pitch="0" yaw="-45"/>
<Aruco id="62" x="0.0" y="4.11" z="1.3" roll="0" pitch="0" yaw="45"/>
<!-- Landmark 2 -->
<Aruco id="63" x="0.0" y="4.89" z="1.3" roll="0" pitch="0" yaw="-45"/>
<Aruco id="64" x="0.0" y="5.11" z="1.3" roll="0" pitch="0" yaw="45"/>
<!– Landmark 3 -->
<Aruco id="65" x="0.89" y="6.00" z="1.3" roll="0" pitch="0" yaw="225"/>
<Aruco id="66" x="1.11" y="6.00" z="1.3" roll="0" pitch="0" yaw="-45"/>
<!– Landmark 4 -->
<Aruco id="69" x="2.89" y="6.00" z="1.3" roll="0" pitch="0" yaw="225"/>
<Aruco id="70" x="3.11" y="6.00" z="1.3" roll="0" pitch="0" yaw="-45"/>
<!– Landmark 5 -->
<Aruco id="71" x="4.0" y="5.11" z="1.3" roll="0" pitch="0" yaw="225"/>
<Aruco id="72" x="4.0" y="4.89" z="1.3" roll="0" pitch="0" yaw="-45"/>
<!– Landmark 6 -->
<Aruco id="73" x="4.0" y="4.11" z="1.3" roll="0" pitch="0" yaw="135"/>
<Aruco id="74" x="4.0" y="3.89" z="1.3" roll="0" pitch="0" yaw="225"/>
5.檢驗改變
在環境正確配置之後,你可以使用RViz界面檢驗這些改變。爲完成這一目標,請執行下述命令
$ ./rvizInterface_Test.sh drone{Id} localhost
它會呈現出一個如下所示的三維畫面:
翻譯標註:
在執行命令時需要啓動ROS以及更改路徑,且drone{Id}
是一個數字,比如15,參見文章開始的地方。完整的命令執行方案爲:
1.打開第一個終端運行$ roscore
2.打開第二個終端運行
$ cd ${AEROSTACK_STACK}/launchers $ ./rvizInterface_Test.sh 15 localhost
作者水平有限,文章翻譯不能做到盡善盡美,如有紕漏或者謬誤,還請大家評論指正。
同時大家可以通過郵箱[email protected]聯繫到我本人。