網(wǎng)站日常優(yōu)化網(wǎng)絡(luò)營(yíng)銷推廣是做什么的
ego-planner開源代碼之啟動(dòng)參數(shù)介紹&分析
- 1. 源由
- 2. 邏輯分析
- 3. 啟動(dòng)參數(shù)
- section 1 三維地圖尺寸
- section 2 里程計(jì)話題映射
- section 3 advanced_param.xml配置
- section 3.1
- section 3.2
- section 3.3
- section 3.4
- section 3.5
- section 3.6
- section 3.7
- section 3.8
- section 4 軌跡服務(wù)器
- section 5 航點(diǎn)生成器
- section 6 simulator.xml配置
- section 7 rviz.launch配置
- 4. 總結(jié)
- 5. 附錄
- 5.1 PDCA 戴明循環(huán)
- 5.2 相機(jī)內(nèi)參
- 5.3 Field of View 感知視野
1. 源由
ego-planner開源代碼之?dāng)?shù)據(jù)流分析工作的延續(xù)。
- 對(duì)于算法邏輯的數(shù)據(jù)流,在前面已經(jīng)初步做了整理,部分主要模塊已經(jīng)有比較清晰的認(rèn)識(shí)。
- 從數(shù)據(jù)流的角度,理解模塊的工作邏輯,還是非常直觀、簡(jiǎn)潔的。
如何從系統(tǒng)的角度,思考問題,尤其是一個(gè)系統(tǒng)由眾多模塊組成的復(fù)雜體系,要能夠整體的理解,反而并不能一下子上手。
反之,若能夠?qū)⒄麄€(gè)系統(tǒng)作為一個(gè)模塊
來理解,入?yún)⒑统鰠⒎謩e如何對(duì)應(yīng)和理解呢?
2. 邏輯分析
想必經(jīng)歷過Linux 35.5 + JetPack v5.1.3@ego-planner編譯安裝,并在此基礎(chǔ)上運(yùn)行過仿真模擬,甚至看過uav_simulation
代碼,那么可以體會(huì)下整體上,要在模塊基礎(chǔ)上,結(jié)合各模塊的數(shù)據(jù)流了解整個(gè)系統(tǒng),還是會(huì)有很多盲點(diǎn)。
為此,我們另辟蹊徑,從仿真模擬的入?yún)⑴渲脕砜纯?#xff0c;這個(gè)游戲
是如何來玩的!
- 從應(yīng)用的角度,復(fù)雜場(chǎng)景,往往涉及諸多變量;
- 從技術(shù)的角度,應(yīng)用場(chǎng)景多,就是條件輸入多,同時(shí)判斷的變量條件就比較多;
- 從算法的角度,沒有算法是萬萬不能的,但是算法也并非是萬能的。只有在滿足預(yù)設(shè)前提,算法才能正確執(zhí)行;
經(jīng)常會(huì)有人反饋:“研發(fā)人員用用都是挺好的,到了客戶那里一堆問題?!?/p>
從產(chǎn)品的角度:預(yù)研算法通常僅僅實(shí)現(xiàn)了“陽光”場(chǎng)景的邏輯。換句話說:當(dāng)入?yún)⒃谀承┖侠磔斎肭闆r下,輸出是期望結(jié)果;當(dāng)存在異常條件時(shí),由于程序邏輯的不完善、會(huì)導(dǎo)致結(jié)果混亂甚至宕機(jī)發(fā)生。
因此,發(fā)現(xiàn)問題、研究問題、排除問題、改進(jìn)方法、解決問題是一種螺旋式的過程,而這個(gè)過程通常在工程技術(shù)上采用PDCA的方式進(jìn)行不斷完善和優(yōu)化。
復(fù)雜問題簡(jiǎn)單化的邏輯,就是在合理范圍內(nèi)使用,邏輯上就能復(fù)現(xiàn)工程技術(shù)帶來的結(jié)果?;蛘哒f算法邏輯能100%復(fù)現(xiàn),當(dāng)無法復(fù)現(xiàn)就需要排除或者找到對(duì)應(yīng)關(guān)系,提前規(guī)避,確保最終用戶的用戶體驗(yàn)。
3. 啟動(dòng)參數(shù)
廢話不多說,直接上正菜!
section 1 三維地圖尺寸
<!-- size of map, change the size inflate x, y, z according to your application --><arg name="map_size_x" value="40.0"/><arg name="map_size_y" value="40.0"/><arg name="map_size_z" value=" 3.0"/>
參數(shù) map_size_x
、map_size_y
和 map_size_z
定義了所使用的三維地圖的尺寸。每個(gè)參數(shù)的含義如下:
-
map_size_x
:定義地圖在 X軸 方向上的長(zhǎng)度(單位:米)。這里的值設(shè)置為40.0
,表示地圖在 X軸方向延伸40米。 -
map_size_y
:定義地圖在 Y軸 方向上的寬度(單位:米)。這里的值設(shè)置為40.0
,表示地圖在 Y軸方向延伸40米。 -
map_size_z
:定義地圖在 Z軸 方向上的高度(單位:米)。值為3.0
,表示地圖在 Z軸方向延伸3米,提供了垂直方向上的規(guī)劃空間。
注:map_size:當(dāng)?shù)貓D大小較大時(shí)需要修改,注意目標(biāo)點(diǎn)不要超過map_size/2,相當(dāng)于默認(rèn)當(dāng)前位置為中心點(diǎn)位置。高級(jí)參數(shù)里面還有參數(shù)可以設(shè)置便宜。
section 2 里程計(jì)話題映射
<!-- topic of your odometry such as VIO or LIO --><arg name="odom_topic" value="/visual_slam/odom" />
該參數(shù)用于告訴 ego-planner 該從哪個(gè)話題訂閱里程計(jì)數(shù)據(jù),以便獲取機(jī)器人或無人機(jī)的位姿信息。
-
注釋:
<!-- topic of your odometry such as VIO or LIO -->
這句話表示這個(gè)參數(shù)用于指定機(jī)器人里程計(jì)的ROS話題,可以是 視覺慣性里程計(jì) (VIO, Visual-Inertial Odometry) 或 激光慣性里程計(jì) (LIO, LiDAR-Inertial Odometry) 等。 -
參數(shù)定義:
<arg name="odom_topic" value="/visual_slam/odom" />
這行代碼定義了一個(gè)名為odom_topic
的參數(shù),其值為/visual_slam/odom
,表示里程計(jì)信息發(fā)布的ROS話題名稱是/visual_slam/odom
。ego-planner 會(huì)從這個(gè)話題中訂閱機(jī)器人當(dāng)前的位姿(位置和姿態(tài))信息,用于進(jìn)行路徑規(guī)劃。
section 3 advanced_param.xml配置
<!-- main algorithm params --><include file="$(find ego_planner)/launch/advanced_param.xml">
通過這行代碼,advanced_param.xml
文件中的參數(shù)會(huì)被加載到當(dāng)前的啟動(dòng)文件中,這樣 ego-planner 在運(yùn)行時(shí)就會(huì)使用這些預(yù)先定義的主算法參數(shù)。
同時(shí),通過 和之間再次修改參數(shù),覆蓋默認(rèn)advanced_param.xml
文件中的參數(shù)。
-
注釋:
<!-- main algorithm params -->
這句話表示接下來引入的是主算法相關(guān)的參數(shù)配置文件。即,該部分包含用于控制 ego-planner 主算法的參數(shù)。 -
參數(shù)文件引入:
<include file="$(find ego_planner)/launch/advanced_param.xml">
這行代碼表示將位于ego_planner
包的launch
目錄中的advanced_param.xml
文件包含到當(dāng)前的launch
文件中。$(find ego_planner)
:這是 ROS 中的語法,用來找到ego_planner
包的路徑。/launch/advanced_param.xml
:表示具體的參數(shù)文件路徑。
section 3.1
<arg name="map_size_x_" value="$(arg map_size_x)"/><arg name="map_size_y_" value="$(arg map_size_y)"/><arg name="map_size_z_" value="$(arg map_size_z)"/><arg name="odometry_topic" value="$(arg odom_topic)"/>
復(fù)用和傳遞參數(shù),將原本的 map_size_x
、map_size_y
、map_size_z
和 odom_topic
重新命名為 map_size_x_
、map_size_y_
、map_size_z_
和 odometry_topic
,這樣便可以在后續(xù)代碼中使用這些新的名稱來引用原始參數(shù)的值。這種做法有利于代碼的清晰和模塊化,使參數(shù)的傳遞更加靈活。
-
map_size_x_
:- 通過
value="$(arg map_size_x)"
,將之前定義的map_size_x
參數(shù)值(例如40.0
)賦值給新的參數(shù)map_size_x_
。
- 通過
-
map_size_y_
:- 同樣,將
map_size_y
的值傳遞給新的參數(shù)map_size_y_
。
- 同樣,將
-
map_size_z_
:- 將
map_size_z
的值傳遞給新的參數(shù)map_size_z_
。
- 將
-
odometry_topic
:- 將之前定義的
odom_topic
參數(shù)值(如/visual_slam/odom
)傳遞給odometry_topic
。
- 將之前定義的
section 3.2
<!-- camera pose: transform of camera frame in the world frame --><!-- depth topic: depth image, 640x480 by default --><!-- don't set cloud_topic if you already set these ones! --><arg name="camera_pose_topic" value="/pcl_render_node/camera_pose"/><arg name="depth_topic" value="/pcl_render_node/depth"/>
定義了有關(guān)相機(jī)位姿和深度圖的ROS話題參數(shù),主要用于處理相機(jī)的姿態(tài)數(shù)據(jù)和深度圖像數(shù)據(jù)。
-
注釋:
<!-- camera pose: transform of camera frame in the world frame -->
: 這句話表示相機(jī)位姿話題提供的是相機(jī)坐標(biāo)系在世界坐標(biāo)系中的變換,即相機(jī)在世界中的位置和姿態(tài)信息。<!-- depth topic: depth image, 640x480 by default -->
: 這句話表示深度話題提供的是深度圖像,默認(rèn)分辨率是 640x480。<!-- don't set cloud_topic if you already set these ones! -->
: 這句話表示如果已經(jīng)設(shè)置了相機(jī)位姿和深度圖像話題,就不要再設(shè)置點(diǎn)云話題(cloud_topic
),因?yàn)檫@兩個(gè)信息已經(jīng)足夠生成點(diǎn)云。
-
參數(shù)定義:
-
<arg name="camera_pose_topic" value="/pcl_render_node/camera_pose"/>
: 這個(gè)參數(shù)camera_pose_topic
定義了相機(jī)位姿信息的話題,話題名稱為/pcl_render_node/camera_pose
。在ROS系統(tǒng)中,ego-planner 或其他節(jié)點(diǎn)將從該話題訂閱相機(jī)的位姿(即相機(jī)在世界坐標(biāo)系中的位置和姿態(tài))信息。 -
<arg name="depth_topic" value="/pcl_render_node/depth"/>
: 這個(gè)參數(shù)depth_topic
定義了深度圖像的話題,話題名稱為/pcl_render_node/depth
。系統(tǒng)將從這個(gè)話題訂閱深度圖像數(shù)據(jù),深度圖像通常用于生成三維點(diǎn)云或者幫助路徑規(guī)劃時(shí)感知障礙物。
-
section 3.3
<!-- topic of point cloud measurement, such as from LIDAR --><!-- don't set camera pose and depth, if you already set this one! --><arg name="cloud_topic" value="/pcl_render_node/cloud"/>
定義了一個(gè)點(diǎn)云測(cè)量話題的參數(shù),主要用于從激光雷達(dá)(LiDAR)或其他傳感器中獲取點(diǎn)云數(shù)據(jù)。
-
注釋:
<!-- topic of point cloud measurement, such as from LIDAR -->
: 這句話表示cloud_topic
是用于獲取點(diǎn)云測(cè)量數(shù)據(jù)的ROS話題,數(shù)據(jù)來源可以是 LiDAR(激光雷達(dá))或者其他提供點(diǎn)云的傳感器。<!-- don't set camera pose and depth, if you already set this one! -->
: 這句話提醒用戶,如果已經(jīng)設(shè)置了cloud_topic
(點(diǎn)云話題),不要再設(shè)置相機(jī)位姿和深度圖像,因?yàn)辄c(diǎn)云數(shù)據(jù)已經(jīng)包含了三維空間信息,不需要額外使用相機(jī)的位姿和深度數(shù)據(jù)。
-
參數(shù)定義:
<arg name="cloud_topic" value="/pcl_render_node/cloud"/>
: 這個(gè)參數(shù)cloud_topic
定義了點(diǎn)云數(shù)據(jù)的話題名稱為/pcl_render_node/cloud
。系統(tǒng)或其他節(jié)點(diǎn)會(huì)從該話題訂閱到點(diǎn)云數(shù)據(jù),這些數(shù)據(jù)通常包含傳感器掃描到的環(huán)境三維點(diǎn)的信息(即障礙物的位置、形狀等)。
section 3.4
<!-- intrinsic params of the depth camera --><arg name="cx" value="321.04638671875"/><arg name="cy" value="243.44969177246094"/><arg name="fx" value="387.229248046875"/><arg name="fy" value="387.229248046875"/>
定義了深度相機(jī)的內(nèi)參(intrinsic parameters),這些參數(shù)是相機(jī)的固有屬性,用于描述相機(jī)的光學(xué)特性和幾何關(guān)系,主要包括焦距和主點(diǎn)(光軸中心)的坐標(biāo)。
-
注釋:
<!-- intrinsic params of the depth camera -->
: 這句話表示接下來定義的參數(shù)是深度相機(jī)的內(nèi)參,用于描述相機(jī)的內(nèi)部光學(xué)和幾何特性。
-
參數(shù)定義:
<arg name="cx" value="321.04638671875"/>
: 這是相機(jī)主點(diǎn)(principal point)在圖像平面上的 X坐標(biāo)。主點(diǎn)是相機(jī)成像平面的中心點(diǎn)(即光軸與成像平面交點(diǎn))。在這段代碼中,主點(diǎn)的 X 坐標(biāo)為321.04638671875
。<arg name="cy" value="243.44969177246094"/>
: 這是相機(jī)主點(diǎn)在圖像平面上的 Y坐標(biāo),主點(diǎn)的 Y 坐標(biāo)為243.44969177246094
。<arg name="fx" value="387.229248046875"/>
: 這是相機(jī)在 X方向 的焦距,單位為像素。焦距表示鏡頭的光學(xué)中心到成像平面的距離,在這里 X 方向的焦距為387.229248046875
像素。<arg name="fy" value="387.229248046875"/>
: 這是相機(jī)在 Y方向 的焦距,單位也是像素。在這里 Y 方向的焦距與 X 方向一致,都是387.229248046875
像素。
section 3.5
<!-- maximum velocity and acceleration the drone will reach --><arg name="max_vel" value="2.0" /><arg name="max_acc" value="3.0" />
定義了無人機(jī)在運(yùn)行過程中能夠達(dá)到的最大速度和最大加速度,用于限制無人機(jī)的運(yùn)動(dòng)性能。
-
注釋:
<!-- maximum velocity and acceleration the drone will reach -->
: 這句話表示接下來定義的參數(shù)是無人機(jī)的最大速度和最大加速度,它們用來限制無人機(jī)在飛行時(shí)的運(yùn)動(dòng)性能。
-
參數(shù)定義:
<arg name="max_vel" value="2.0" />
: 這個(gè)參數(shù)max_vel
定義了無人機(jī)的最大速度,單位是米/秒 (m/s)。這里設(shè)置的值為2.0
,表示無人機(jī)的飛行速度最大可以達(dá)到 2 米/秒。<arg name="max_acc" value="3.0" />
: 這個(gè)參數(shù)max_acc
定義了無人機(jī)的最大加速度,單位是米/秒2 (m/s2)。這里設(shè)置的值為3.0
,表示無人機(jī)的加速度最大可以達(dá)到 3 米/秒2。
注:由于飛行環(huán)境,以及誤差,通過設(shè)置速度和加速度最大值可以減少誤差,增加穩(wěn)定性。
- 最大速度 (max_vel):用于限制無人機(jī)的飛行速度,確保在規(guī)劃路徑或執(zhí)行任務(wù)時(shí)不會(huì)超過指定的速度,保證飛行的穩(wěn)定性和安全性。
- 最大加速度 (max_acc):用于限制無人機(jī)在加速和減速時(shí)的變化率,防止無人機(jī)出現(xiàn)過快的加速度變化,影響飛行平穩(wěn)性。
section 3.6
<!--always set to 1.5 times grater than sensing horizen--><arg name="planning_horizon" value="7.5" />
定義了無人機(jī)路徑規(guī)劃中的**規(guī)劃視野(planning horizon)**參數(shù),其值通常設(shè)置為感知視野(sensing horizon)的1.5倍。planning_horizon
決定了路徑規(guī)劃算法在做出決策時(shí)能夠看到的范圍。規(guī)劃視野越大,算法能夠考慮的路徑和障礙物就越多,從而可能提高路徑規(guī)劃的準(zhǔn)確性和有效性。通常,這個(gè)值需要大于感知視野,以確保規(guī)劃算法可以在足夠的范圍內(nèi)進(jìn)行有效的決策。
-
注釋:
<!-- always set to 1.5 times greater than sensing horizon -->
: 這句話表示planning_horizon
參數(shù)的值應(yīng)該設(shè)置為感知視野(sensing horizon)的1.5倍。感知視野是指無人機(jī)能夠探測(cè)到的最大距離。
-
參數(shù)定義:
<arg name="planning_horizon" value="7.5" />
: 這個(gè)參數(shù)planning_horizon
定義了路徑規(guī)劃的視野范圍,單位是米(m)。在這個(gè)配置中,值設(shè)置為7.5
,表示路徑規(guī)劃系統(tǒng)考慮的范圍是 7.5 米。
- QA: How to set planning_horizon, why 7.5 meters? #107
section 3.7
<!-- 1: use 2D Nav Goal to select goal --><!-- 2: use global waypoints below --><arg name="flight_type" value="2" />
定義了無人機(jī)的飛行模式(flight_type),指定了無人機(jī)如何選擇飛行目標(biāo)。
-
注釋:
<!-- 1: use 2D Nav Goal to select goal -->
: 這句話表示如果flight_type
設(shè)置為1
,無人機(jī)將使用 2D 導(dǎo)航目標(biāo)(2D Nav Goal)來選擇飛行目標(biāo)。2D 導(dǎo)航目標(biāo)通常是用戶在地圖上指定的目標(biāo)位置。<!-- 2: use global waypoints below -->
: 這句話表示如果flight_type
設(shè)置為2
,無人機(jī)將使用全局航點(diǎn)(global waypoints)來進(jìn)行飛行。全局航點(diǎn)是一系列預(yù)定義的點(diǎn),通常用于無人機(jī)按照預(yù)設(shè)的路徑進(jìn)行飛行。- 如果設(shè)置為
1
,無人機(jī)將根據(jù)用戶在地圖上選擇的2D目標(biāo)位置來進(jìn)行導(dǎo)航。 - 如果設(shè)置為
2
,無人機(jī)將按照預(yù)定義的全局航點(diǎn)執(zhí)行飛行任務(wù)。
-
參數(shù)定義:
<arg name="flight_type" value="2" />
: 這個(gè)參數(shù)flight_type
定義了無人機(jī)的飛行模式,其值設(shè)置為2
。根據(jù)注釋中的說明,值為2
表示無人機(jī)將使用全局航點(diǎn)來進(jìn)行飛行。
section 3.8
<!-- global waypoints --><!-- It generates a piecewise min-snap traj passing all waypoints --><arg name="point_num" value="5" /><arg name="point0_x" value="-15.0" /><arg name="point0_y" value="0.0" /><arg name="point0_z" value="1.0" /><arg name="point1_x" value="0.0" /><arg name="point1_y" value="15.0" /><arg name="point1_z" value="1.0" /><arg name="point2_x" value="15.0" /><arg name="point2_y" value="0.0" /><arg name="point2_z" value="1.0" /><arg name="point3_x" value="0.0" /><arg name="point3_y" value="-15.0" /><arg name="point3_z" value="1.0" /><arg name="point4_x" value="-15.0" /><arg name="point4_y" value="0.0" /><arg name="point4_z" value="1.0" />
定義了無人機(jī)飛行任務(wù)中的全局航點(diǎn),使用這些航點(diǎn)生成的最小躍變軌跡將使無人機(jī)在這些點(diǎn)之間飛行時(shí),軌跡盡可能平滑,減少急劇的加速度變化,生成一條經(jīng)過所有航點(diǎn)的平滑路徑。
-
注釋:
<!-- global waypoints -->
: 這句話表示以下參數(shù)定義了全局航點(diǎn)。<!-- It generates a piecewise min-snap traj passing all waypoints -->
: 這句話表示使用這些全局航點(diǎn)生成一條最小躍變軌跡(min-snap trajectory),即生成一條平滑的、盡可能減少加速度變化的路徑,經(jīng)過所有指定的航點(diǎn)。
-
參數(shù)定義:
-
<arg name="point_num" value="5" />
: 這個(gè)參數(shù)point_num
定義了全局航點(diǎn)的數(shù)量,這里設(shè)置為5
,表示有 5 個(gè)航點(diǎn)。 -
接下來的參數(shù)定義了每個(gè)航點(diǎn)的坐標(biāo):
-
<arg name="point0_x" value="-15.0" />
-
<arg name="point0_y" value="0.0" />
-
<arg name="point0_z" value="1.0" />
- 這三個(gè)參數(shù)定義了第一個(gè)航點(diǎn)的 X、Y 和 Z 坐標(biāo),分別為
-15.0
、0.0
和1.0
。
- 這三個(gè)參數(shù)定義了第一個(gè)航點(diǎn)的 X、Y 和 Z 坐標(biāo),分別為
-
<arg name="point1_x" value="0.0" />
-
<arg name="point1_y" value="15.0" />
-
<arg name="point1_z" value="1.0" />
- 這三個(gè)參數(shù)定義了第二個(gè)航點(diǎn)的坐標(biāo),分別為
0.0
、15.0
和1.0
。
- 這三個(gè)參數(shù)定義了第二個(gè)航點(diǎn)的坐標(biāo),分別為
-
<arg name="point2_x" value="15.0" />
-
<arg name="point2_y" value="0.0" />
-
<arg name="point2_z" value="1.0" />
- 這三個(gè)參數(shù)定義了第三個(gè)航點(diǎn)的坐標(biāo),分別為
15.0
、0.0
和1.0
。
- 這三個(gè)參數(shù)定義了第三個(gè)航點(diǎn)的坐標(biāo),分別為
-
<arg name="point3_x" value="0.0" />
-
<arg name="point3_y" value="-15.0" />
-
<arg name="point3_z" value="1.0" />
- 這三個(gè)參數(shù)定義了第四個(gè)航點(diǎn)的坐標(biāo),分別為
0.0
、-15.0
和1.0
。
- 這三個(gè)參數(shù)定義了第四個(gè)航點(diǎn)的坐標(biāo),分別為
-
<arg name="point4_x" value="-15.0" />
-
<arg name="point4_y" value="0.0" />
-
<arg name="point4_z" value="1.0" />
- 這三個(gè)參數(shù)定義了第五個(gè)航點(diǎn)的坐標(biāo),分別為
-15.0
、0.0
和1.0
。
- 這三個(gè)參數(shù)定義了第五個(gè)航點(diǎn)的坐標(biāo),分別為
-
-
section 4 軌跡服務(wù)器
<!-- trajectory server --><node pkg="ego_planner" name="traj_server" type="traj_server" output="screen"><remap from="/position_cmd" to="planning/pos_cmd"/><remap from="/odom_world" to="$(arg odom_topic)"/><param name="traj_server/time_forward" value="1.0" type="double"/></node>
定義了一個(gè)名為 traj_server
的 ROS 節(jié)點(diǎn)的啟動(dòng)參數(shù)。
-
注釋:
<!-- trajectory server -->
: 這句話表示接下來配置的是**軌跡服務(wù)器(trajectory server)**節(jié)點(diǎn)的啟動(dòng)參數(shù)。
-
節(jié)點(diǎn)定義:
<node pkg="ego_planner" name="traj_server" type="traj_server" output="screen">
:pkg="ego_planner"
:指定了節(jié)點(diǎn)所在的 ROS 包,這里是ego_planner
。name="traj_server"
:節(jié)點(diǎn)的名稱為traj_server
。type="traj_server"
:節(jié)點(diǎn)的類型為traj_server
,即節(jié)點(diǎn)的可執(zhí)行文件名。output="screen"
:表示將節(jié)點(diǎn)的輸出信息打印到控制臺(tái)屏幕上,以便進(jìn)行調(diào)試和監(jiān)控。
-
話題重映射:
<remap from="/position_cmd" to="planning/pos_cmd"/>
:- 這條命令將話題
/position_cmd
重映射到planning/pos_cmd
。即,節(jié)點(diǎn)traj_server
將訂閱planning/pos_cmd
,而不是原來的/position_cmd
話題。
- 這條命令將話題
<remap from="/odom_world" to="$(arg odom_topic)"/>
:- 這條命令將話題
/odom_world
重映射到由odom_topic
參數(shù)指定的話題。$(arg odom_topic)
是一個(gè)參數(shù)引用,意味著/odom_world
實(shí)際上會(huì)訂閱由odom_topic
參數(shù)定義的話題,如之前配置中的/visual_slam/odom
。
- 這條命令將話題
-
參數(shù)設(shè)置:
<param name="traj_server/time_forward" value="1.0" type="double"/>
:- 這行設(shè)置了名為
traj_server/time_forward
的參數(shù),其值為1.0
,類型為double
。這個(gè)參數(shù)可能用于控制軌跡服務(wù)器的時(shí)間前瞻量(即在規(guī)劃軌跡時(shí)考慮的時(shí)間范圍)。
- 這行設(shè)置了名為
section 5 航點(diǎn)生成器
<node pkg="waypoint_generator" name="waypoint_generator" type="waypoint_generator" output="screen"><remap from="~odom" to="$(arg odom_topic)"/> <remap from="~goal" to="/move_base_simple/goal"/><remap from="~traj_start_trigger" to="/traj_start_trigger" /><param name="waypoint_type" value="manual-lonely-waypoint"/> </node>
定義了一個(gè)名為 waypoint_generator
的 ROS 節(jié)點(diǎn)的啟動(dòng)參數(shù),確保了 waypoint_generator
節(jié)點(diǎn)能夠正確地訂閱需要的話題,并按照指定的參數(shù)進(jìn)行航點(diǎn)生成。
-
節(jié)點(diǎn)定義:
<node pkg="waypoint_generator" name="waypoint_generator" type="waypoint_generator" output="screen">
:pkg="waypoint_generator"
:指定了節(jié)點(diǎn)所在的 ROS 包,這里是waypoint_generator
。name="waypoint_generator"
:節(jié)點(diǎn)的名稱為waypoint_generator
。type="waypoint_generator"
:節(jié)點(diǎn)的可執(zhí)行文件名為waypoint_generator
。output="screen"
:表示將節(jié)點(diǎn)的輸出信息打印到控制臺(tái)屏幕上,以便進(jìn)行調(diào)試和監(jiān)控。
-
話題重映射:
<remap from="~odom" to="$(arg odom_topic)"/>
:- 這條命令將節(jié)點(diǎn)中的
~odom
話題重映射到由odom_topic
參數(shù)指定的話題。$(arg odom_topic)
是一個(gè)參數(shù)引用,意味著節(jié)點(diǎn)將訂閱由odom_topic
參數(shù)定義的話題,比如/visual_slam/odom
。
- 這條命令將節(jié)點(diǎn)中的
<remap from="~goal" to="/move_base_simple/goal"/>
:- 這條命令將節(jié)點(diǎn)中的
~goal
話題重映射到/move_base_simple/goal
。即,節(jié)點(diǎn)將從/move_base_simple/goal
話題接收目標(biāo)點(diǎn)數(shù)據(jù)。
- 這條命令將節(jié)點(diǎn)中的
<remap from="~traj_start_trigger" to="/traj_start_trigger" />
:- 這條命令將節(jié)點(diǎn)中的
~traj_start_trigger
話題重映射到/traj_start_trigger
。即,節(jié)點(diǎn)將從/traj_start_trigger
話題接收觸發(fā)信號(hào)。
- 這條命令將節(jié)點(diǎn)中的
-
參數(shù)設(shè)置:
<param name="waypoint_type" value="manual-lonely-waypoint"/>
:- 這行設(shè)置了名為
waypoint_type
的參數(shù),其值為manual-lonely-waypoint
。這個(gè)參數(shù)可能用于定義航點(diǎn)生成器的工作模式或類型,這里表示采用手動(dòng)的孤立航點(diǎn)方式。
- 這行設(shè)置了名為
section 6 simulator.xml配置
<!-- use simulator --><include file="$(find ego_planner)/launch/simulator.xml"><arg name="map_size_x_" value="$(arg map_size_x)"/><arg name="map_size_y_" value="$(arg map_size_y)"/><arg name="map_size_z_" value="$(arg map_size_z)"/><arg name="c_num" value="200"/><arg name="p_num" value="200"/><arg name="min_dist" value="1.2"/><arg name="odometry_topic" value="$(arg odom_topic)" /></include>
包含一個(gè)名為 simulator.xml
的 ROS 啟動(dòng)文件,并傳遞一些參數(shù)用于覆蓋默認(rèn)xml文件中的參數(shù),使模擬器能夠按照指定的設(shè)置進(jìn)行模擬。
-
注釋:
<!-- use simulator -->
: 這句話表示接下來配置的內(nèi)容是用于啟動(dòng)模擬器。
-
包含文件:
<include file="$(find ego_planner)/launch/simulator.xml">
:file="$(find ego_planner)/launch/simulator.xml"
:指定要包含的啟動(dòng)文件路徑。$(find ego_planner)
是 ROS 的一個(gè)命令,用于找到ego_planner
包的位置,然后從該位置加載launch/simulator.xml
文件。
-
參數(shù)傳遞:
<arg name="map_size_x_" value="$(arg map_size_x)"/>
:- 這個(gè)參數(shù)將
map_size_x_
傳遞給simulator.xml
文件,其值為$(arg map_size_x)
。即,map_size_x_
的值來自于當(dāng)前啟動(dòng)文件中的map_size_x
參數(shù)。
- 這個(gè)參數(shù)將
<arg name="map_size_y_" value="$(arg map_size_y)"/>
:- 這個(gè)參數(shù)將
map_size_y_
傳遞給simulator.xml
文件,其值為$(arg map_size_y)
。即,map_size_y_
的值來自于當(dāng)前啟動(dòng)文件中的map_size_y
參數(shù)。
- 這個(gè)參數(shù)將
<arg name="map_size_z_" value="$(arg map_size_z)"/>
:- 這個(gè)參數(shù)將
map_size_z_
傳遞給simulator.xml
文件,其值為$(arg map_size_z)
。即,map_size_z_
的值來自于當(dāng)前啟動(dòng)文件中的map_size_z
參數(shù).
- 這個(gè)參數(shù)將
<arg name="c_num" value="200"/>
:- 這個(gè)參數(shù)設(shè)置
c_num
的值為200
,可能表示模擬器中使用的某種元素的數(shù)量,如障礙物或?qū)ο蟮臄?shù)量。
- 這個(gè)參數(shù)設(shè)置
<arg name="p_num" value="200"/>
:- 這個(gè)參數(shù)設(shè)置
p_num
的值為200
,可能表示模擬器中使用的另一種元素的數(shù)量,如路徑點(diǎn)或目標(biāo)點(diǎn)的數(shù)量。
- 這個(gè)參數(shù)設(shè)置
<arg name="min_dist" value="1.2"/>
:- 這個(gè)參數(shù)設(shè)置
min_dist
的值為1.2
,可能表示模擬器中某種元素之間的最小距離或間隔。
- 這個(gè)參數(shù)設(shè)置
<arg name="odometry_topic" value="$(arg odom_topic)" />
:- 這個(gè)參數(shù)將
odometry_topic
傳遞給simulator.xml
文件,其值為$(arg odom_topic)
。即,odometry_topic
的值來自于當(dāng)前啟動(dòng)文件中的odom_topic
參數(shù)。
- 這個(gè)參數(shù)將
section 7 rviz.launch配置
<include file="$(find ego_planner)/launch/rviz.launch"/>
包含一個(gè)名為 rviz.launch
的 ROS 啟動(dòng)文件。
4. 總結(jié)
通過這個(gè) simple_run.launch
啟動(dòng)文件,可以了解到除了該文件中的配置參數(shù)以外:
- 引用了一些基礎(chǔ)配置文件
- 引入了一些ROS節(jié)點(diǎn)
simple_run.launch├──> traj_server //[ego-planner開源代碼之traj_server數(shù)據(jù)流分析](https://blog.csdn.net/lida2003/article/details/142312414)├──> waypoint_generator├──> advanced_param.xml //[ego-planner開源代碼之a(chǎn)dvanced_param.xml介紹&分析](https://blog.csdn.net/lida2003/article/details/142322809)│ └──> ego_planner_node //[ego-planner開源代碼之ego_planner_node數(shù)據(jù)流分析](ego-planner開源代碼之ego_planner_node數(shù)據(jù)流分析)├──> simulator.xml //[ego-planner開源代碼之simulator.xml介紹&分析](https://blog.csdn.net/lida2003/article/details/142336384)│ ├──> mockamap_node│ ├──> quadrotor_simulator_so3│ ├──> nodelet│ ├──> odom_visualization│ └──> pcl_render_node└──> rviz.launch└──> rviz└──> default.rviz //[ego-planner開源代碼之default.rviz介紹&分析](https://blog.csdn.net/lida2003/article/details/142324456)
上面標(biāo)注了前面分析過的node代碼,正因?yàn)橛羞@么多的代碼數(shù)據(jù)流(模塊)沒有進(jìn)行分析,所以才導(dǎo)致我們?cè)诜治瞿M的時(shí)候感覺總是缺了什么,理不清楚來龍去脈。
后續(xù)我們將隨著時(shí)間的推移,逐步的分析上面node的數(shù)據(jù)流。
5. 附錄
5.1 PDCA 戴明循環(huán)
PDCA(Plan-Do-Check-Act)循環(huán),也被稱為戴明循環(huán),是一種持續(xù)改進(jìn)質(zhì)量管理的工具,用于優(yōu)化流程和解決問題。它幫助企業(yè)和個(gè)人通過反復(fù)評(píng)估和改進(jìn)來達(dá)到更好的成果。以下是PDCA四個(gè)階段的介紹:
-
Plan(計(jì)劃):
- 在這個(gè)階段,確定需要改進(jìn)的問題或目標(biāo),分析現(xiàn)狀,設(shè)定目標(biāo),并制定一個(gè)行動(dòng)計(jì)劃來解決問題或?qū)崿F(xiàn)目標(biāo)。計(jì)劃中應(yīng)包括具體的行動(dòng)步驟、時(shí)間表和所需資源。
-
Do(執(zhí)行):
- 根據(jù)計(jì)劃實(shí)施行動(dòng),按照步驟執(zhí)行任務(wù)。這一階段強(qiáng)調(diào)小范圍實(shí)驗(yàn)性地執(zhí)行,以減少潛在的風(fēng)險(xiǎn)。如果可能,先在較小范圍內(nèi)試點(diǎn),驗(yàn)證計(jì)劃的可行性。
-
Check(檢查):
- 執(zhí)行完畢后,對(duì)結(jié)果進(jìn)行檢查和評(píng)估。通過數(shù)據(jù)和事實(shí)來衡量計(jì)劃是否有效,是否達(dá)到預(yù)期目標(biāo)。分析執(zhí)行過程中的問題和偏差,并記錄下來。
-
Act(行動(dòng)):
- 如果計(jì)劃有效,則將其標(biāo)準(zhǔn)化,并在更大范圍內(nèi)實(shí)施。如果計(jì)劃不完全有效,找出問題的根源,并修改計(jì)劃,重新開始PDCA循環(huán)。這個(gè)階段的關(guān)鍵是總結(jié)經(jīng)驗(yàn)教訓(xùn),持續(xù)改進(jìn)。
PDCA 循環(huán)的核心是通過反復(fù)迭代,持續(xù)提升流程效率和質(zhì)量。這一工具廣泛應(yīng)用于生產(chǎn)管理、質(zhì)量控制、項(xiàng)目管理等領(lǐng)域。
5.2 相機(jī)內(nèi)參
相機(jī)內(nèi)參(也稱為相機(jī)內(nèi)部參數(shù)或內(nèi)參矩陣)描述了相機(jī)成像過程中的固有特性,用于將3D世界坐標(biāo)轉(zhuǎn)換為2D圖像坐標(biāo)。相機(jī)內(nèi)參反映了相機(jī)的光學(xué)和幾何屬性,用于將深度相機(jī)捕捉到的二維圖像數(shù)據(jù)轉(zhuǎn)化為三維空間坐標(biāo)。這些參數(shù)通常在將圖像坐標(biāo)轉(zhuǎn)換為三維坐標(biāo)時(shí)使用,是路徑規(guī)劃或3D重建等應(yīng)用的關(guān)鍵參數(shù)。
-
焦距 (focal length, f):描述相機(jī)鏡頭的光學(xué)放大倍數(shù)。通常在圖像坐標(biāo)系中,它以像素單位表示,并分為兩個(gè)分量。定義了相機(jī)成像時(shí)的縮放關(guān)系,影響圖像中物體的投影比例,用于將像素坐標(biāo)轉(zhuǎn)換為物理空間中的距離。
- f x f_x fx?:水平方向的焦距。
- f y f_y fy?:垂直方向的焦距。
-
主點(diǎn) (principal point):圖像中光軸與成像平面的交點(diǎn),也就是圖像的中心點(diǎn)。由于制造誤差,主點(diǎn)通常不在圖像的正中心。表示成像平面上光軸的中心位置,用于確定相機(jī)的視場(chǎng)中心。
- c x c_x cx?:主點(diǎn)的水平坐標(biāo)。
- c y c_y cy?:主點(diǎn)的垂直坐標(biāo)。
-
畸變系數(shù) (distortion coefficients):由于鏡頭的光學(xué)特性,圖像可能會(huì)出現(xiàn)徑向和切向畸變。內(nèi)參還包括這些畸變的校正參數(shù),常見的畸變包括:
- 徑向畸變:使圖像中直線向外或向內(nèi)彎曲。
- 切向畸變:由于鏡頭與成像平面不完全平行,導(dǎo)致圖像的畸變。
這些參數(shù)通常以矩陣形式表示為3x3的內(nèi)參矩陣(相機(jī)矩陣):
K = ( f x 0 c x 0 f y c y 0 0 1 ) K = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} K= ?fx?00?0fy?0?cx?cy?1? ?
通過相機(jī)內(nèi)參矩陣,3D世界坐標(biāo)可以轉(zhuǎn)換為2D圖像平面上的像素坐標(biāo),這對(duì)計(jì)算機(jī)視覺中的各種任務(wù)(如立體視覺、SLAM等)至關(guān)重要。
注:實(shí)際標(biāo)定可以通過拍攝棋盤格圖像,并用校準(zhǔn)軟件進(jìn)行計(jì)算獲取相關(guān)參數(shù)。用于立體視覺和SLAM應(yīng)用的傳感器設(shè)計(jì)廠家也會(huì)在傳感設(shè)備出廠時(shí)進(jìn)行校準(zhǔn)和記錄(可通過特殊命令獲取生產(chǎn)校準(zhǔn)參數(shù))。
5.3 Field of View 感知視野
感知視野(Field of View,簡(jiǎn)稱 FOV)是指?jìng)鞲衅?#xff08;例如相機(jī)、激光雷達(dá)等)在某一時(shí)刻能夠覆蓋和檢測(cè)到的空間范圍。它描述了傳感器可以“看到”或“感知”到的環(huán)境區(qū)域,通常以角度或弧度來表示。感知視野在計(jì)算機(jī)視覺、機(jī)器人、無人駕駛等領(lǐng)域中非常重要,特別是對(duì)于傳感器數(shù)據(jù)的處理和環(huán)境感知。
感知視野的具體定義
- 水平視野 (Horizontal FOV, HFOV):傳感器在水平方向上可以感知的最大角度范圍。
- 垂直視野 (Vertical FOV, VFOV):傳感器在垂直方向上可以感知的最大角度范圍。
感知視野可以用角度來衡量,例如常見相機(jī)的水平視野可能在60度到120度之間。FOV越大,表示傳感器能覆蓋的范圍越廣;但較大的FOV可能會(huì)帶來較大的失真,特別是在邊緣區(qū)域。
感知視野的影響因素
- 傳感器的物理屬性:例如,鏡頭的焦距會(huì)直接影響相機(jī)的視野大小。焦距短(廣角鏡頭)會(huì)提供較大的視野,而焦距長(zhǎng)(長(zhǎng)焦鏡頭)會(huì)提供較小的視野。
- 安裝位置和角度:相機(jī)或傳感器的安裝高度、傾斜角度等都會(huì)改變其感知的范圍和視野角度。
- 傳感器類型:不同傳感器的感知視野不同。例如,激光雷達(dá)的FOV和相機(jī)的FOV有很大區(qū)別。
感知視野的大小影響了機(jī)器人、無人機(jī)或自動(dòng)駕駛車輛的感知能力,決定了它們能夠覆蓋多少環(huán)境信息來進(jìn)行決策和控制。