FC-Planner: 一個基于骨架引導的快速覆蓋復雜3D場景的規劃框架方案實現與難點講解

FC-Planner方案實現細節與難點講解

1. 骨架提取

骨架提取是FC-Planner的核心模塊之一,其目的是從輸入的點云數據中提取出場景的骨架結構。這一步的關鍵是如何準確高效地計算每個點的ROSA點。

1.1 ROSA點計算

ROSA點的計算涉及到兩個優化問題:

  1. ROSA點方向 v p v_p vp?的優化:

    v p v_p vp?的優化目標是最小化其與鄰域點法線方向的方差。這可以通過求解一個二次規劃問題來實現:

    v p i + 1 = arg ? min ? v p v p T Σ p i v p , s.t.?? ∣ ∣ v p ∣ ∣ 2 = 1 , v p ? v p i > 0. \begin{aligned} v^{i+1}_p = \underset{v_p}{\arg \min}~ v^T_p \Sigma^i_p v_p, \\ \text{s.t.} ~~ ||v_p||_2 = 1,~ v_p \cdot v^i_p > 0 . \end{aligned} vpi+1?=vp?argmin??vpT?Σpi?vp?,s.t.??∣∣vp?2?=1,?vp??vpi?>0.?

    其中, Σ p i \Sigma^i_p Σpi?是鄰域點法線的協方差矩陣。這個二次規劃問題可以用標準的優化庫高效求解。

  2. ROSA點位置 x p x_p xp?的優化:

    x p x_p xp?的優化目標是最小化其到鄰域點法線延長線的距離平方和:

    arg ? min ? x p ∈ R 3 ∑ p k ∈ N p ∣ ∣ ( x p ? p k ) × n ( p k ) ∣ ∣ 2 2 . \underset{x_p \in \mathbb{R}^3}{\arg \min} \sum_{p_k \in N_p} ||(x_p - p_k) \times n(p_k)||^2_2. xp?R3argmin?pk?Np??∣∣(xp??pk?)×n(pk?)22?.

    這個問題有解析解,可以直接計算得到最優的 x p x_p xp?

1.2 骨架生成

在得到所有點的ROSA點后,作者用一維移動最小二乘法將這些離散的ROSA點連接成骨架曲線。這一步的難點在于如何選擇合適的參數化方法和基函數,使得生成的骨架曲線既光滑又能很好地擬合ROSA點。在實現中采用了線性參數化和多項式基函數,取得了不錯的效果。

2. 視點生成

視點生成模塊的任務是在骨架的引導下,生成一組數量最少但能完全覆蓋場景的視點。其中的難點主要有兩個:如何避免視點之間的冗余,以及如何優化視點的姿態使其覆蓋更多的區域。

2.1 視點采樣

為了避免冗余的視點采樣,作者利用骨架提取出一組視點采樣射線。這些射線起始于骨架,穿過占用的體素,延伸到自由空間。只在這些射線上采樣視點,而不是在整個空間中隨機采樣。這種有針對性的采樣策略可以顯著減少冗余視點的數量。

2.2 視點姿態優化

提出了一種基于引力模型的視點姿態優化方法。其基本思想是,將視點看作帶電粒子,覆蓋區域多的視點帶正電,覆蓋區域少的視點帶負電。然后讓帶負電的視點在帶正電視點的吸引下移動,直到達到平衡狀態。這個過程可以用下面的公式描述:

p q = p q + ∑ v p a ∈ V P a c a c q ? ( p a ? p q ) , s.t.?? c a < c q . p_q = p_q + \sum_{vp_a \in VP_a} \frac{c_a}{c_q} * (p_a - p_q), ~~ \text{s.t.}~~ c_a < c_q. pq?=pq?+vpa?VPa??cq?ca???(pa??pq?),??s.t.??ca?<cq?.

其中, p q p_q pq?是當前視點的位置, V P a VP_a VPa?是其吸引視點集合, c a c_a ca? c q c_q cq?分別是吸引視點和當前視點的覆蓋區域數量。通過這種優化,可以使每個視點的姿態都朝向覆蓋區域最多的方向調整,從而減少視點總數。

3. 分層覆蓋規劃

分層覆蓋規劃是FC-Planner的另一個核心模塊,其目的是在生成的視點集合上規劃一條最短的覆蓋路徑。采用分治的策略,將整個問題分解為全局規劃、局部規劃和軌跡優化三個層次。

3.1 全局序列規劃

在全局層,通過求解一個非對稱TSP問題,得到一個遍歷所有子空間的最優序列。這里的難點在于如何快速求解TSP問題。采用了啟發式的LKH算法,該算法能在可接受的時間內給出近似最優解。

3.2 局部路徑規劃

在局部層,為每個子空間并行地規劃覆蓋路徑。這里的關鍵是如何在保證覆蓋完整性的同時最小化路徑長度。將其表述為一個帶時間窗約束的TSP問題:

min ? ∑ i = 1 R ∑ j = 1 R c ( v p i , v p j ) ? x ( v p i , v p j ) s.t. ∑ j = 1 R x ( v p i , v p j ) = 1 , ? i ∈ { 1 , … , R } , ∑ i = 1 R x ( v p i , v p j ) = 1 , ? j ∈ { 1 , … , R } , x ( v p i , v p j ) ∈ { 0 , 1 } , v p 1 = v p s t a r t ( g i ) , v p R = v p e n d ( g i ) . \begin{aligned} \min &\sum_{i=1}^{R} \sum_{j=1}^{R} c_{(vp_i,vp_j)} \cdot x_{(vp_i,vp_j)} \\ \text{s.t.} & \sum_{j=1}^{R} x_{(vp_i,vp_j)} = 1, \forall i \in \{1,\dots,R\}, \\ & \sum_{i=1}^{R} x_{(vp_i,vp_j)} = 1, \forall j \in \{1,\dots,R\}, \\ & x_{(vp_i,vp_j)} \in \{0,1\}, \\ & vp_1 = vp^{(g_i)}_{start}, ~ vp_R = vp^{(g_i)}_{end}. \end{aligned} mins.t.?i=1R?j=1R?c(vpi?,vpj?)??x(vpi?,vpj?)?j=1R?x(vpi?,vpj?)?=1,?i{1,,R},i=1R?x(vpi?,vpj?)?=1,?j{1,,R},x(vpi?,vpj?)?{0,1},vp1?=vpstart(gi?)?,?vpR?=vpend(gi?)?.?

其中, x ( v p i , v p j ) x_{(vp_i,vp_j)} x(vpi?,vpj?)?是決策變量,表示是否從視點 v p i vp_i vpi?飛到 v p j vp_j vpj?,而 c ( v p i , v p j ) c_{(vp_i,vp_j)} c(vpi?,vpj?)?是兩視點間的代價。最后兩個約束條件保證了路徑的起點和終點分別是該子空間的入口和出口視點。

3.3 軌跡優化

得到覆蓋路徑后,需要進一步將其優化為一條無碰撞、動態可行的軌跡。這里利用了凸優化的方法。首先,在覆蓋路徑上生成一系列的安全飛行走廊(SFC)。每個SFC都是一個凸多面體,可以保證無人機在其中飛行時不會與障礙物碰撞。然后,在SFC的約束下,求解一個最小化時間的軌跡優化問題:

min ? T , t p ∑ i = 1 M T i s.t. t p i ( t ) ∈ C P ( i ) , ? t ∈ [ 0 , T i ] , ∥ t p ˙ i ( t ) ∥ 2 2 ≤ v m a x 2 , ∥ t p ¨ i ( t ) ∥ 2 2 ≤ a m a x 2 , ∥ d 3 t p i ( t ) d t 3 ∥ 2 2 ≤ j m a x 2 , t p i ( 0 ) = p R ( i ? 1 ) , t p i ( T i ) = p R i . \begin{aligned} \min_{T,tp} & \sum_{i=1}^{M} T_i \\ \text{s.t.} & \quad tp_i(t) \in CP(i), \quad \forall t \in [0,T_i], \\ & \quad \| \dot{tp}_i(t) \|^2_2 \leq v^2_{max}, \\ & \quad \| \ddot{tp}_i(t) \|^2_2 \leq a^2_{max}, \\ & \quad \left\| \frac{d^3 tp_i(t)}{dt^3} \right\|^2_2 \leq j^2_{max}, \\ & \quad tp_i(0) = p^{(i-1)}_R, \quad tp_i(T_i) = p^i_R. \end{aligned} T,tpmin?s.t.?i=1M?Ti?tpi?(t)CP(i),?t[0,Ti?],tp˙?i?(t)22?vmax2?,tp¨?i?(t)22?amax2?, ?dt3d3tpi?(t)? ?22?jmax2?,tpi?(0)=pR(i?1)?,tpi?(Ti?)=pRi?.?

這個問題可以用凸優化的方法高效求解,得到一條平滑、安全、滿足動力學約束的軌跡。

4. 總結

FC-Planner的實現涉及到多個領域的技術,包括計算幾何、組合優化、凸優化等。其中的難點主要集中在兩個方面:一是如何在保證覆蓋完整性的同時最小化視點數量和路徑長度;二是如何高效地求解由此產生的各種優化問題。針對第一個難點,提出了骨架引導的空間分解和視點生成策略,可以避免大量的冗余計算。針對第二個難點,巧妙地利用了問題的結構特點,將其分解為多個易于并行求解的子問題,同時采用了各種啟發式算法和凸優化技術,大大提高了求解效率。這些思想和技術不僅限于無人機覆蓋規劃,在其他路徑規劃問題中也有廣泛的應用前景。

具體細節可以閱讀下下面的論文原文(中文版):

FC-Planner: 一個基于骨架引導的快速覆蓋復雜3D場景的規劃框架

摘要

UAV的3D覆蓋路徑規劃是多種實際應用中的一個關鍵問題。然而,現有方法在大型復雜場景中的系統簡潔性、計算效率和路徑質量方面表現不盡如人意。為了應對這些挑戰,我們提出了FC-Planner,一個基于骨架引導的規劃框架,可以在無需預處理的情況下快速實現對復雜3D場景的空中覆蓋。我們通過基于骨架的空間分解(SSD)將場景分解為幾個簡單的子空間。此外,骨架引導我們輕松確定自由空間。我們利用骨架高效生成一組最小的專門化和信息豐富的視點,以實現完全覆蓋。基于SSD,分層規劃器有效地將大規劃問題劃分為獨立的子問題,實現每個子空間的并行規劃。然后,我們精心設計的全局和局部規劃策略被整合,以保證路徑生成的高質量和高效率。我們進行了廣泛的基準測試和真實世界測試,其中FC-Planner的計算速度比最先進的方法快10倍以上,路徑更短,覆蓋更完整。源代碼將公開發布以造福社區。項目頁面: https://hkust-aerial-robotics.github.io/FC-Planner。

I. 引言

近來,由于無人機(UAV)的靈活性和機動性,它們在結構檢查[1, 2]和3D重建[3]等各種任務中收集目標場景信息方面變得越來越受歡迎。為了完成這些任務,UAV需要找到一條最短路徑來完全覆蓋3D場景,這通常被表述為3D覆蓋路徑規劃問題[4]。

現有的工作[1, 2, 5]-[10]通常通過將這個問題分為兩個子任務來解決:1)確定一組覆蓋目標場景的視點,2)確定具有完全覆蓋的最短路徑。然而,當前這些子任務的解決方案存在一些限制,阻礙了系統簡潔性、計算效率和路徑質量的滿意實現。對于第一個子任務,現有方法需要使用額外的工具(如Blender [11], CloudCompare [12])進行預處理以提取自由空間,確保視點的安全性,這增加了系統的復雜性。此外,缺乏一種能夠產生最小的信息豐富的視點集,同時全面覆蓋目標場景的高效策略。現有方法在視點數量和完整性之間存在權衡,即少量視點無法保證完全覆蓋,而大量視點則會帶來顯著的計算成本。另一方面,大多數框架中的路徑規劃器全局優化一條完全覆蓋場景的最短路徑,通常被表述為組合優化問題(COP) [13]。然而,由于規劃問題的大規模,現有方法在大型復雜場景中經常難以迅速找到高質量的解決方案。目前,在復雜3D場景覆蓋的背景下,迫切需要一種高效的規劃方法,該方法應能夠將艱巨的規劃問題分解為可并行化的子問題,同時確保解決方案的質量和計算效率。

為了解決上述限制,我們提出了FC-Planner,這是一個為快速覆蓋大型復雜3D場景量身定制的基于骨架引導的規劃框架。我們精心設計的全局和局部規劃程序,最終生成高質量的覆蓋路徑,同時保持高計算效率。

我們將提出的方法與最先進的工作進行了仿真比較。結果表明,我們的方法在計算效率方面取得了顯著提升(快10倍以上),同時實現了更完整的覆蓋和更短的路徑。為了進一步驗證FC-Planner,我們在一個具有挑戰性的場景中進行了真實世界的覆蓋測試。仿真和真實世界的實驗都證明了我們的系統相比于最先進方法在簡潔性和性能方面的優越性。本文的貢獻如下:

  1. 一種高效提取復雜3D場景骨架并指導覆蓋規劃的SSD方法。
  2. 一種高效且專門化的視點采樣方法,由骨架引導,以及一個引力模型,可有效篩選出最小的信息豐富視點集。
  3. 一種分層覆蓋規劃器,將整個規劃問題分解為可并行化的子問題。結合精心設計的全局和局部規劃模塊,它確保了高路徑質量和計算效率。
  4. 大量實驗驗證了所提出方法的有效性。我們的實現源代碼將公開發布。

II. 相關工作

3D場景中的覆蓋路徑規劃問題(CPP)一直是UAV研究的活躍話題,有廣泛的實際應用。現有方法通常采用基于采樣的框架,分兩步解決3D CPP問題,即視點生成和路徑規劃。

視點生成: 這指的是獲得一組視點以滿足目標場景覆蓋需求的過程。現有方法通常需要預處理來識別自由空間,從中采樣安全有效的視點。一些早期方法[1, 5]-[8]利用網格三角形來采樣視點。另外,其他工作[9, 14]采用了點云的形式。然而,這兩種方法都落入了后一類。通常,這些方法首先采樣大量視點候選,然后迭代選擇一個視點子集以實現完全覆蓋。這種策略導致了大量的計算時間用于選擇,并且很難確定所需的最少視點數量。

相比之下,我們的方法通過利用骨架來確定自由空間并采樣場景周圍的視點,避免了預處理。為了高效找到最小的視點集以實現完全覆蓋,我們開發了一種策略,通過重復更新一組視點的姿態而不依賴耗時的選擇過程。

路徑規劃: 此步驟的目標是在全面覆蓋場景的同時規劃最短路徑。以前的方法[1, 5]-[10]將這個問題表述為COP的具體形式,例如,旅行商問題(TSP)[15]、子模塊方向TSP(SDOP)[16]等。眾所周知,這些問題是NP難的,計算時間隨著場景復雜度的增加而急劇增加。為解決這個問題,HCPP[2]提出了一種將場景劃分為八叉樹的方法。每個葉節點在八叉樹中包含最多N個視點,定義一個子空間。然后,規劃問題被轉化為解決每個子空間的局部TSP。然而,將視點限制在單個子空間內并不能保證該子空間的完全覆蓋。此外,來自其他子空間的視點可能需要實現完全覆蓋。因此,每個子空間的覆蓋區域不能預先分配,下一個子空間的覆蓋目標只能在前一個子空間規劃完成后更新。這在為不同子空間實現并行規劃時帶來了挑戰。

相反,我們的SSD將場景分解為幾個由骨架引導的簡單子空間。這確保了每個子空間內的視點避免與該子空間不匹配。因此,可以為每個子空間并行生成路徑,從而顯著節省計算時間。

III. 系統概述

所提出的框架以目標場景的點云作為輸入,這在各種應用中被廣泛采用。如圖2所示,它由SSD(Sect.IV)、高效視點生成(Sect.V)和分層覆蓋規劃(Sect.VI)組成。SSD提取場景的骨架,并將點云分解為具有簡單幾何形狀的子空間。在骨架的引導下,我們生成采樣射線來采樣安全的初始視點,無需預處理。然后該方法最小化視點數量,并使用引力模型更新它們的姿態(Sect.V)。之后,分層規劃器找出子空間的全局訪問序列,并行優化每個子空間的局部路徑,優化局部路徑之間的連接部分,并生成一條實現完全覆蓋的軌跡(第IV節)。

注釋:本章概述了FC-Planner的三大模塊:基于骨架的空間分解(SSD)、高效視點生成和分層覆蓋規劃。SSD利用骨架將復雜場景分解為簡單子空間,視點生成模塊在骨架引導下高效采樣視點并優化姿態,最后分層規劃器實現了子問題的并行優化,從而顯著提高計算效率。這三個模塊協同工作,快速生成高質量的覆蓋路徑。

IV. 基于骨架的空間分解

在本節中,我們分三步介紹基于骨架的空間分解。1) 給定目標場景的點云,計算由廣義旋轉對稱軸(ROSA)點[17]組成的骨架(第IV-A節)。2) 將骨架分解為幾個簡單形狀,稱為分支(第IV-B節)。3) 將點云分配到每個分支中,形成相應的子空間(第IV-C節)。

A. 骨架提取

首先,我們通過法線估計[18]從輸入點云獲得定向點云 P O P_O PO?。受[17]啟發,我們使用一組ROSA點表示骨架,每個點由位置和方向表示為r=(x, v)。為加快計算過程,我們對 P O P_O PO?進行下采樣得到 P D P_D PD?,并計算 P D P_D PD?中每個點p的ROSA點 r p = ( x p , v p ) r_p=(x_p, v_p) rp?=(xp?,vp?)。對于每個 p p p,其對應的ROSA點在由 v p v_p vp?和p構成的平面內對p的鄰域 N p N_p Np?進行操作。ROSA點在 N p N_p Np?周圍表現出高度旋轉對稱性。這一特性要求方向 v p v_p vp?最小化 v p v_p vp? N p N_p Np?中法線之間角度的方差,而位置 x p x_p xp?最小化到 N p N_p Np?中法線延長線的平方距離之和。首先,給定初始方向 v p 0 v^0_p vp0?,我們通過求解以下二次規劃問題迭代優化 v p v_p vp?:

v p i + 1 = arg ? min ? v p v p T Σ p i v p , s.t.?? ∣ ∣ v p ∣ ∣ 2 = 1 , v p ? v p i > 0 , \begin{aligned} v^{i+1}_p = \underset{v_p}{\arg \min}~ v^T_p \Sigma^i_p v_p, \\ \text{s.t.} ~~ ||v_p||_2 = 1,~ v_p \cdot v^i_p > 0 , \end{aligned} vpi+1?=vp?argmin??vpT?Σpi?vp?,s.t.??∣∣vp?2?=1,?vp??vpi?>0,?

其中 v p i v^i_p vpi?表示第i次迭代的方向。 Σ p i \Sigma^i_p Σpi?是p鄰域 N p i N^i_p Npi?中所有點法線的協方差矩陣。找到ROSA點的方向后,我們使用以下程序計算 x p x_p xp?:

arg ? min ? x p ∈ R 3 ∑ p k ∈ N p ∣ ∣ ( x p ? p k ) × n ( p k ) ∣ ∣ 2 2 , \underset{x_p \in \mathbb{R}^3}{\arg \min} \sum_{p_k \in N_p} ||(x_p - p_k) \times n(p_k)||^2_2, xp?R3argmin?pk?Np??∣∣(xp??pk?)×n(pk?)22?,

其中 n ( p k ) n(p_k) n(pk?)表示 p k ∈ N p p_k \in N_p pk?Np?的點法線。最后,我們對所有ROSA點應用一維移動最小二乘法[19]生成骨架。骨架存儲在無向圖 G = ( V s , E s ) G = (V_s, E_s) G=(Vs?,Es?)中,其中頂點 V s V_s Vs?包含所有ROSA點,邊 E s E_s Es?表示它們之間的連接。

注釋:骨架提取利用了ROSA點的旋轉對稱性,通過優化ROSA點的位置和方向來生成骨架。其核心是一個二次規劃問題,用于優化ROSA點的方向,使其與鄰域點的法線方向一致。這一步驟高效提取了場景的骨架結構。

B. 骨架分解

如算法1所述,我們將提取的骨架分解為幾個分支,每個分支包含G中的一組邊。這些分支都包含在分支集B中。在第2行,我們識別G上的關節J,定義為度數大于2的頂點。由于簡單幾何要求,一個分支通常從一個關節開始,以一個關節或葉頂點(度等于1)結束。為了獲得滿足上述需求的分支,我們在第3-14行開發了一個類似深度優先搜索(DFS)的程序[20]。此外,為確保每個分支盡可能簡單易覆蓋,我們要求一個分支內的邊應具有相似的方向。因此,在第16-26行,我們將方向變化較大的分支分解為更簡單的分支。

注釋:骨架分解利用深度優先搜索,將骨架分解為多個簡單分支。為了確保分支的簡單性,算法還會將方向變化較大的分支進一步分解。這一步驟簡化了骨架結構,為后續的空間分配和路徑規劃提供了基礎。

C. 空間分配

給定分解后的骨架,我們的目標是將 P O P_O PO?中的點分配到多個子空間中,每個子空間對應B中的一個分支。我們將這些分支中的邊離散化為幾個定向點,其方向是它所在邊的方向。由這些定向點確定的平面記為Γ。然后,對于每個平面,我們從 P O P_O PO?中查詢該平面內的點。如果一個點p∈ P O P_O PO?位于多個平面上,p將被分配到其定向點最接近它的平面。之后,由同一分支的平面查詢的點(稱為分配點A)被包含在一個子空間中。所有子空間包含在 S = s 1 , . . . , s N S = {s_1, ..., s_N} S=s1?,...,sN?中。

注釋:空間分配步驟將點云中的點按照它們與骨架分支的距離分配到不同的子空間。這種分配方式簡單高效,同時保證了子空間的獨立性,為并行路徑規劃創造了條件。

V. 基于骨架的視點生成

本節介紹高效生成完全覆蓋的視點。骨架允許識別內部空間,確保視點的安全性,無需預處理。此外,骨架產生一組視點采樣射線,指導視點的生成(第V-A節)。為高效找到最小視點集,我們提出了一個類似引力的模型,迭代調整視點的姿態并移除冗余視點,篩選出更具代表性的子集(第V-C節)。這個過程通過允許更快速可見性檢查的雙向光線投射(BiRC)進一步加速(第V-B節)。

A. 內部空間和視點采樣射線

內部空間用體素地圖表示,所有體素初始化為自由狀態。包含 P O P_O PO?的體素被更新為占用狀態。對于每個平面 γ i ∈ Γ γ_i ∈ Γ γi?Γ(第IV-C節),我們從其定向點 o i o_i oi?(位于骨架上)到每個分配點A_i進行光線投射。在穿過占用體素之前的射線上的體素被標記為內部。射線繼續延伸到自由空間,我們將這些射線從占用體素開始的部分定義為視點采樣射線。沿著它們采樣安全和信息豐富的視點,減少冗余采樣的視點數量。這些專門的視點還提供了更好的覆蓋,因為骨架引導它們都指向表面。此外,從 o i o_i oi?投射的視點采樣射線屬于與 o i o_i oi?對應的子空間。

B. 雙向光線投射

光線投射廣泛用于視點的可見性檢查。然而,這種方法從射線的一端開始單向遍歷體素。當占用體素位于射線的另一端附近時,它可能無法有效識別遮擋。為解決這個問題,我們實現了雙向光線投射(BiRC),其中體素從兩端向射線中點遍歷。這種方法在遇到上述情況時更早停止,消除了冗余檢查。

注釋:本小節介紹了兩個加速可見性檢查的技術。首先,利用骨架和光線投射快速識別內部空間和視點采樣射線,減少冗余采樣。其次,雙向光線投射通過從兩端遍歷體素的方式,進一步提高了可見性檢查效率。

C. 視點姿態的迭代更新

我們采用5自由度視點,表示為 v p = [ p , θ , φ , i d ] vp = [p, θ, φ, id] vp=[p,θ,φ,id],其中 p p p是傳感器的3D位置, θ θ θ φ φ φ分別表示俯仰角和偏航角。參數id是視點所屬的子空間。視點采樣射線 r v s r_vs rv?s的起點和方向分別描述為 s r = [ x s r , y s r , z s r ] sr = [x_{sr}, y_{sr}, z_{sr}] sr=[xsr?,ysr?,zsr?] d r = [ n x d r , n y d r , n z d r ] dr = [nx_{dr}, ny_{dr}, nz_{dr}] dr=[nxdr?,nydr?,nzdr?]

我們沿每個r_vs在距離D處采樣一個視點,其id指的是r_vs所屬的子空間。采樣視點的位置、俯仰角和偏航角按如下方式確定:

p = s r + D ? d r , θ = arcsin ? ( ? n z d r / ∣ ∣ d r ∣ ∣ 2 ) , ? = arctan ? ( ? n y d r / ? n x d r ) . \begin{aligned} p &= sr + D * dr, \\ \theta &= \arcsin(-nz_{dr} / ||dr||_2), \\ \phi &= \arctan(-ny_{dr} / -nx_{dr}). \end{aligned} pθ??=sr+D?dr,=arcsin(?nzdr?/∣∣dr2?),=arctan(?nydr?/?nxdr?).?

這些采樣的視點稱為初始視點 V P i n i VP_ini VPi?ni。第一步是使用提出的BiRC確定 V P i n i VP_ini VPi?ni中每個視點覆蓋的體素。接下來,為減少視點數量,如果一個體素被兩個以上的視點觀察到,我們將其分配給覆蓋體素最多的視點。然后,我們從 V P i n i VP_ini VPi?ni中移除未分配任何體素的視點。之后,我們為 V P i n i VP_ini VPi?ni構建一個kd樹[21] T i n i T_ini Ti?ni,并為每個視點定義二元狀態(活躍或休眠),初始將所有視點設置為活躍。

為確保每個視點覆蓋盡可能多的體素,我們使用引力模型將覆蓋體素較少的視點合并到覆蓋體素較多的視點中。具體來說,從覆蓋體素最多的視點開始,到覆蓋體素最少的視點,每個視點(表示為 v p q vp_q vpq?)使用半徑搜索從 T i n i T_ini Ti?ni中查詢其鄰域 V P q VP_q VPq?。半徑 r q r_q rq?由最大可見距離 d v d_v dv?和視場 ( F o V ) [ f h , f w ] (FoV) [f_h, f_w] (FoV)[fh?,fw?]確定:

r q = d v ? tan ? ( min ? ( f h , f w ) / 2 ) . r_q = d_v * \tan(\min(f_h, f_w)/2). rq?=dv??tan(min(fh?,fw?)/2).

我們使用 V P q VP_q VPq?中所有活躍視點 V P a VP_a VPa?通過引力模型更新查詢視點 v p q vp_q vpq?的姿態:

p q = p q + ∑ v p a ∈ V P a c a c q ? ( p a ? p q ) , s.t.?? c a < c q , p_q = p_q + \sum_{vp_a \in VP_a} \frac{c_a}{c_q} * (p_a - p_q), ~~ \text{s.t.}~~ c_a < c_q, pq?=pq?+vpa?VPa??cq?ca???(pa??pq?),??s.t.??ca?<cq?,

其中 c q c_q cq? c a c_a ca?分別表示 v p q vp_q vpq? V P a VP_a VPa?中每個視點覆蓋的體素數量。 p q p_q pq?表示 v p q vp_q vpq?的更新位置。類似地,我們獲得更新后的俯仰角 θ q θ_q θq?和偏航角 φ q φ_q φq?。它們進一步調整以使 v p q vp_q vpq?覆蓋的體素分布在FoV的中心周圍。 v p q vp_q vpq?所屬的子空間與 V P i n i VP_ini VPi?ni中最接近 v p q vp_q vpq?的視點相同。接下來,我們將 V P a VP_a VPa?中用于更新 v p q vp_q vpq?的視點狀態設置為休眠。之后,我們通過對所有活躍視點執行第一步來識別未覆蓋的體素,然后采樣新的視點來覆蓋它們,表示為 V P u n c VP_unc VPu?nc。最后,我們對 V P u n c VP_unc VPu?nc重復上述步驟以實現完全覆蓋。經過這種視點姿態的迭代更新后,所有剩余的活躍視點根據它們的id分配到S中的每個子空間,每個視點子集表示為 V = V P 1 , . . . , V P N V = {VP_1, ..., VP_N} V=VP1?,...,VPN?

注釋:本小節提出了一種基于引力模型的視點姿態優化方法。通過將視點向覆蓋體素更多的方向移動,并去除冗余視點,該方法可以在保證覆蓋完整性的同時最小化視點數量。優化后的視點集為路徑規劃提供了高質量的輸入。

VI. 分層覆蓋規劃

給定上述視點,這個階段致力于找到穿過它們的最短無碰撞路徑。在SSD的支持下,我們將大規模規劃問題分解為幾個獨立且可并行的子問題,分為五個步驟。

全局序列規劃。它試圖解決一個最優巡游問題,即從UAV當前位置出發訪問所有子空間,這被定義為非對稱旅行商問題(ATSP)[22]。我們首先計算每個子空間中視點的質心,然后構建這些質心和UAV當前位置之間的歐幾里得距離矩陣M_G。Lin-Kernighan-Helsgaun (LKH)求解器[23]以M_G作為輸入,獲得全局序列[g_1, …, g_N]。

局部邊界選擇。我們期望為每個子空間選擇合適的起始和結束視點,確保局部規劃的結果與全局序列兼容。根據全局序列,我們將所有質心排序為 S e q C = [ k 0 , . . . , k N ] Seq_C = [k_0, ..., k_N] SeqC?=[k0?,...,kN?],其中 k 0 k_0 k0?是UAV的當前位置,其他是排序后的質心。基于 S e q C Seq_C SeqC?,第i個訪問子空間的起始 v p s t a r t ( g i ) vp^{(g_i)}_{start} vpstart(gi?)?和結束 v p e n d ( g i ) vp^{(g_i)}_{end} vpend(gi?)?通過以下方式獲得:

v p s t a r t ( g i ) = arg ? min ? v p g i ∈ V P g i ∣ ∣ p g i ? k i ? 1 ∣ ∣ 2 2 + ∣ ∣ p g i ? k i ∣ ∣ 2 2 , v p e n d ( g i ) = arg ? min ? v p g i ∈ V P g i ∣ ∣ p g i ? k i ∣ ∣ 2 2 + ∣ ∣ p g i ? k i + 1 ∣ ∣ 2 2 . \begin{aligned} vp^{(g_i)}_{start} &= \underset{vp_{g_i} \in VP_{g_i}}{\arg \min}~ ||p_{g_i} - k_{i-1}||^2_2 + ||p_{g_i} - k_i||^2_2, \\ vp^{(g_i)}_{end} &= \underset{vp_{g_i} \in VP_{g_i}}{\arg \min}~ ||p_{g_i} - k_i||^2_2 + ||p_{g_i} - k_{i+1}||^2_2. \end{aligned} vpstart(gi?)?vpend(gi?)??=vpgi??VPgi??argmin??∣∣pgi???ki?1?22?+∣∣pgi???ki?22?,=vpgi??VPgi??argmin??∣∣pgi???ki?22?+∣∣pgi???ki+1?22?.?

特別地,最后訪問的子空間將沒有結束視點,因為沒有后續子空間。

并行局部路徑規劃。一旦確定了邊界視點,我們就可以為每個子空間單獨規劃局部路徑。我們將這個問題表述為TSP的一個變體,增加了給定起點和終點的約束。假設一個子空間有R個視點,這個TSP的成本矩陣M_L如下:

M L ( i , j ) = { 0 , i = = j 或? j = 0 + ∞ , i = R ? 1 且? j ∈ { 1 , . . . , R ? 2 } c ( v p i , v p j ) , 其他 , M_L(i,j) = \begin{cases} 0, & i == j \text{ 或 } j = 0 \\ +\infty, & i = R-1 \text{ 且 } j \in \{1, ..., R-2\} \\ c_{(vp_i,vp_j)}, & \text{其他} \\ \end{cases}, ML?(i,j)=? ? ??0,+,c(vpi?,vpj?)?,?i==j??j=0i=R?1??j{1,...,R?2}其他?,

c ( v p i , v p j ) = max ? ( max ? ( L ( p i , p j ) v m a x , A n g ( θ i , θ j ) ω m a x ) , A n g ( ? i , ? j ) ω m a x ) , c_{(vp_i,vp_j)} = \max\left(\max\left(\frac{L(p_i, p_j)}{v_{max}}, \frac{Ang(\theta_i, \theta_j)}{\omega_{max}}\right), \frac{Ang(\phi_i, \phi_j)}{\omega_{max}}\right), c(vpi?,vpj?)?=max(max(vmax?L(pi?,pj?)?,ωmax?Ang(θi?,θj?)?),ωmax?Ang(?i?,?j?)?),

A n g ( a 1 , a 2 ) = min ? ( ∣ a 1 ? a 2 ∣ , 2 π ? ∣ a 1 ? a 2 ∣ ) , Ang(a_1, a_2) = \min(|a_1 - a_2|, 2\pi - |a_1 - a_2|), Ang(a1?,a2?)=min(a1??a2?,2π?a1??a2?),

其中 L ( ? ) L(\cdot) L(?)是通過A*算法搜索的 v i v_i vi? v j v_j vj?之間的無碰撞路徑長度, v m a x v_{max} vmax? ω m a x \omega_{max} ωmax?是速度和俯仰角、偏航角角速度的限制。對于最后訪問的子空間, M L M_L ML?中所有 + ∞ +\infty +條目都設置為 c ( v p i , v p j ) c_{(vp_i,vp_j)} c(vpi?,vpj?)?。對于每個 V P i ∈ V VP_i \in V VPi?V,我們使用多線程編程并行生成覆蓋其對應子空間的局部路徑。假設總共有 m ∈ R + m \in \mathbb{R}^+ mR+個視點,所有子問題中最大的視點數是 e ∈ R + e \in \mathbb{R}^+ eR+, m ? e m \gg e m?e。由于使用LKH求解器解決TSP的時間復雜度為 O ( n 2.2 ) O(n^{2.2}) O(n2.2)[24],不進行問題分解直接解決所有視點的TSP需要 O ( m 2.2 ) O(m^{2.2}) O(m2.2)時間。得益于我們的并行規劃,解決所有子問題的時間復雜度降低到 O ( e 2.2 ) O(e^{2.2}) O(e2.2)。因此,我們的方法有效降低了時間復雜度并提高了計算效率。我們按全局序列的順序組合所有局部路徑,得到整個覆蓋路徑 P C P_C PC?

注釋:分層覆蓋規劃的核心是將大規模TSP分解為多個子問題并行求解。全局序列規劃決定了子空間的訪問順序,局部邊界選擇確定了每個子空間的起始和結束視點,從而實現子問題的獨立性。并行局部路徑規劃利用多線程編程同時優化各個子空間內的路徑,大大減少了計算時間。

局部路徑優化。由于前一步中的覆蓋路徑是在每個子空間內優化的,它不能保證全局最優性,因此可能產生不必要的繞路。我們觀察到這些繞路通常發生在局部路徑的連接處附近。因此,我們提出了一個局部優化策略,以進一步改善連接處的整體覆蓋路徑,如算法2所示。在第1行,連接點被定義為兩個分支相交的頂點。第2-16行展示了使用局部搜索進行迭代優化的程序,共進行K次迭代。它首先選擇整個覆蓋路徑中靠近連接點的部分。然后,每次迭代從這些部分隨機選擇三個視點,如果交換它們可以縮短覆蓋路徑,就使用2-opt[25]進行交換。

注釋:局部路徑優化通過局部搜索和2-opt操作改進覆蓋路徑質量。它集中優化相鄰子空間連接處的路徑,消除不必要的繞路,同時保留子空間內部已優化的路徑,在提高路徑質量的同時將計算成本降到最低。

無碰撞軌跡優化。它的目標是將優化后的覆蓋路徑 P R = v R 0 , . . . P_R = {v^0_R, ...} PR?=vR0?,... , 為一條平滑、動態可行、安全且時間最短的軌跡,通過所有視點。具體來說,我們將P_R分成M段軌跡,然后生成3D安全飛行走廊(SFCs),其中每個凸飛行走廊被分配一組連續的軌跡段。對于位置軌跡,SFCs用于確保安全性:

t p i ( t ) ∈ C P ( i ) , ? t ∈ [ 0 , T i ] , ? 1 ≤ i ≤ M , tp_i(t) \in CP(i), ~~ \forall t \in [0, T_i], ~~ \forall 1 \leq i \leq M, tpi?(t)CP(i),???t[0,Ti?],???1iM,

其中 t p i tp_i tpi?是第 i i i段軌跡,持續時間為 T i T_i Ti?, C P ( i ) CP(i) CP(i)表示SFCs中分配給 t p i tp_i tpi?的凸飛行走廊。為了避免激進飛行導致的視覺模糊并確保動態可行性,還考慮了速度、加速度和加加速度限制:

KaTeX parse error: Undefined control sequence: \dddot at position 215: …i \leq M, \\ ||\?d?d?d?o?t?{tp}_i(t)||^2_2…

其中 v m a x v_{max} vmax? a m a x a_{max} amax? j m a x j_{max} jmax?是動態限制。我們還為俯仰角和偏航角生成軌跡,其中最大角速度的限制類似于式(9)。

我們利用MINCO[26]優化覆蓋軌跡的時間分配,同時滿足上述約束。

注釋:無碰撞軌跡優化基于覆蓋路徑生成平滑、安全且動態可行的飛行軌跡。它利用安全飛行走廊(SFC)確保無碰撞性,同時考慮無人機的動力學約束,如速度、加速度限制等。此外,它還優化了軌跡的時間分配,使執行時間最短。生成的軌跡可直接用于無人機控制。

VII. 實驗

A. 實現細節

在骨架提取步驟中,我們將輸入點云歸一化到一個單位球內,這增強了其對場景尺度變化的魯棒性。我們在算法1中設置 δ δ δ= 45°,局部路徑優化中的迭代次數K = 10000,因為每次迭代僅消耗約0.01ms。在所有實驗中,我們選擇一個2軸云臺相機作為裝備在UAV上的傳感器。使用幾何控制器[27]進行 ( p , θ , φ ) (p, θ, φ) (p,θ,φ)軌跡的跟蹤控制。所有模塊在Intel Core i9-13900K CPU上運行。

B. 基準比較和分析

為驗證我們提出的框架,我們在模擬中進行基準測試,包括三個大型復雜場景:管道(73×66×41 m3),基督救世主像(10×36×38 m3),和濱海灣金沙(100×25×49 m3)。我們比較了兩種最先進的方法:SIP[1]和HCPP[2]。由于HCPP[2]沒有開源代碼,所以我們使用了自己的實現。在模擬中,云臺的俯仰角限制在[-90°, 70°]范圍內,相機視場為[75°, 55°]。我們為所有方法設置動態限制為 v m a x = 2.0 m / s v_{max} = 2.0 ~ \mathrm{m/s} vmax?=2.0?m/s, ω m a x = 1.0 r a d / s ω_{max} = 1.0 ~ \mathrm{rad/s} ωmax?=1.0?rad/s, a m a x = 1.0 m / s 2 a_{max} = 1.0 ~ \mathrm{m/s^2} amax?=1.0?m/s2, j m a x = 0.5 m / s 3 j_{max} = 0.5 ~ \mathrm{m/s^3} jmax?=0.5?m/s3。表I報告了平均比較結果,其中Exec. Time表示軌跡執行時間。

從評估結果來看,我們的方法在計算效率、覆蓋完整性和路徑質量方面都顯著優于其他方法。由于提出的基于骨架引導的視點生成,我們的框架以最少的視點實現了最大的覆蓋。得益于我們有效的SSD和并行規劃,我們的方法運行速度比現有方法快10倍以上。在路徑質量方面,我們生成了更短的覆蓋路徑和軌跡,實現了更少的執行時間。此外,隨著場景復雜度和規模的增加,這些優勢變得更加明顯。

我們進行了消融研究,以證明局部路徑優化和分層規劃的有效性。我們將不使用局部優化的框架表示為 N R NR NR,而 G O GO GO則用全局優化所有視點的路徑替代分層規劃。表II顯示了局部路徑優化和分層規劃對路徑質量和計算效率的貢獻。與 N R NR NR相比,我們的方法在最小額外計算的情況下縮短了路徑。與 G O GO GO相比,我們的方法顯著減少了計算時間,同時路徑質量損失最小。

此外,表III提供了每個模塊的運行時間和空間分解詳情。更多關于每個模塊的詳細性能信息可以在我們的項目頁面上找到。

注釋:本章通過大量實驗全面評估了FC-Planner的性能。基準測試表明,無論在計算效率、覆蓋完整性還是路徑質量方面,FC-Planner都大大優于現有方法。消融研究進一步證明了局部路徑優化和分層規劃這兩個關鍵模塊的有效性。這些實驗結果充分說明了我們提出方法的優越性。

C. 真實世界測試

為進一步驗證所提出的框架,我們在一個具有挑戰性的場景中進行了真實世界的覆蓋測試,其大小為10×5×2.5 m3。對于這次測試,我們設計了一個定制的四旋翼飛行器。云臺在[-90°, 20°]范圍內旋轉,相機視場為[60°, 80°]。動態限制設置為v_max = 0.7 m/s,ω_max = 1.0 rad/s,a_max = 0.5 m/s2,j_max = 0.5 m/s3。我們首先使用激光雷達收集場景的點云。然后,我們的框架生成覆蓋軌跡,其中我們的方法合理地將場景分解為五個子空間進行并行規劃。之后,四旋翼飛行器在執行軌跡時捕獲圖像。最后,我們使用這些圖像重建場景,結果表明我們的方法確實實現了完全覆蓋。更多關于這次測試的細節可以在我們的視頻中找到。

注釋:在真實場景中的測試進一步證實了FC-Planner的實用性和魯棒性。整個系統的工作流程,包括場景采集、覆蓋規劃、軌跡執行和場景重建,都按預期順利進行。最終重建的場景展示了我們方法出色的覆蓋效果。這一測試表明FC-Planner在實際應用中具有巨大潛力。

VIII. 結論

在本研究中,我們提出了一個專門為快速覆蓋大型復雜3D場景設計的基于骨架引導的規劃框架。提出的SSD有效地提取場景的骨架,實現了將場景合理分解為簡單子空間,并在無需預處理的情況下引導高效生成專門化和信息豐富的視點。基于SSD,分層覆蓋規劃器將整個規劃問題分解為可并行化的子問題,結合設計的全局規劃和局部優化方法,高效地生成高質量的覆蓋路徑。大量實驗證明了我們框架的效率和優越性。未來,我們計劃將我們的框架擴展到多UAV系統,以實現在更大和未知的3D場景中的協作覆蓋。

注釋:本文提出了FC-Planner,一個創新的基于骨架引導的三維覆蓋路徑規劃框架。它通過骨架提取、視點生成和分層規劃三個緊密協作的模塊,實現了對復雜大型場景的高效覆蓋。實驗結果充分證明了該方法在各個方面的卓越表現。未來,FC-Planner有望擴展到多無人機系統和未知環境,解決更加復雜和具有挑戰性的實際問題。總的來說,本研究為無人機三維覆蓋路徑規劃提供了一個新的思路和基準。

參考文獻

[1] A. Bircher, K. Alexis, M. Burri, P. Oettershagen, S. Omari, T. Mantel, and R. Siegwart, “Structural inspection path planning via iterative viewpoint resampling with application to aerial robotics,” in 2015 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2015, pp. 6423–6430.

[2] C. Cao, J. Zhang, M. Travers, and H. Choset, “Hierarchical coverage path planning in complex 3d environments,” in 2020 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2020, pp. 3206–3212.

[3] C. Feng, H. Li, F. Gao, B. Zhou, and S. Shen, “Predrecon: A prediction-boosted planning framework for fast and high-quality autonomous aerial reconstruction,” in 2023 IEEE International Conference on Robotics and Automation (ICRA), 2023, pp. 1207–1213.

[4] E. Galceran and M. Carreras, “A survey on coverage path planning for robotics,” Robotics and Autonomous systems, vol. 61, no. 12, pp. 1258–1276, 2013.

[5] W. Jing, J. Polden, W. Lin, and K. Shimada, “Sampling-based view planning for 3d visual coverage task with unmanned aerial vehicle,” in 2016 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE, 2016, pp. 1808–1815.

[6] R. Almadhoun, T. Taha, D. Gan, J. Dias, Y. Zweiri, and L. Seneviratne, “Coverage path planning with adaptive viewpoint sampling to construct 3d models of complex structures for the purpose of inspection,” in 2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE, 2018, pp. 7047–7054.

[7] W. Jing, D. Deng, Z. Xiao, Y. Liu, and K. Shimada, “Coverage path planning using path primitive sampling and primitive coverage graph for visual inspection,” in 2019 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE, 2019, pp. 1472–1479.

[8] H. W. Tong, B. Li, H. Huang, and C.-y. Wen, “Uav path planning for complete structural inspection using mixed viewpoint generation,” in 2022 17th International Conference on Control, Automation, Robotics and Vision (ICARCV). IEEE, 2022, pp. 727–732.

[9] X. Huang, Y. Liu, L. Huang, S. Stikbakke, and E. Onstein, “Bim-supported drone path planning for building exterior surface inspection,” Computers in Industry, vol. 153, p. 104019, 2023.

[10] M. Roberts, D. Dey, A. Truong, S. Sinha, S. Shah, A. Kapoor, P. Hanrahan, and N. Joshi, “Submodular trajectory optimization for aerial 3d scanning,” in Proceedings of the IEEE International Conference on Computer Vision, 2017, pp. 5324–5333.

[13] C. H. Papadimitriou and K. Steiglitz, Combinatorial optimization: algorithms and complexity. Courier Corporation, 1998.

[14] R. M. Claro, M. I. Pereira, F. S. Neves, and A. M. Pinto, “Energy efficient path planning for 3d aerial inspections,” IEEE Access, vol. 11, pp. 32 152–32 166, 2023.

[15] G. Dantzig, R. Fulkerson, and S. Johnson, “Solution of a large-scale traveling-salesman problem,” Journal of the operations research society of America, vol. 2, no. 4, pp. 393–410, 1954.

[16] C. Chekuri and M. Pal, “A recursive greedy algorithm for walks in directed graphs,” in 46th annual IEEE symposium on foundations of computer science (FOCS’05). IEEE, 2005, pp. 245–253.

[17] A. Tagliasacchi, H. Zhang, and D. Cohen-Or, “Curve skeleton extraction from incomplete point cloud,” in ACM SIGGRAPH 2009 papers, 2009, pp. 1–9.

[18] R. B. Rusu and S. Cousins, “3d is here: Point cloud library (pcl),” in 2011 IEEE international conference on robotics and automation. IEEE, 2011, pp. 1–4.

[19] I.-K. Lee, “Curve reconstruction from unorganized points,” Computer aided geometric design, vol. 17, no. 2, pp. 161–177, 2000.

[20] R. Tarjan, “Depth-first search and linear graph algorithms,” SIAM journal on computing, vol. 1, no. 2, pp. 146–160, 1972.

[21] K. Zhou, Q. Hou, R. Wang, and B. Guo, “Real-time kd-tree construction on graphics hardware,” ACM Transactions on Graphics (TOG), vol. 27, no. 5, pp. 1–11,v^M_R}$轉換2008.

[22] Z. Meng, H. Qin, Z. Chen, X. Chen, H. Sun, F. Lin, and M. H. Ang, “A two-stage optimized next-view planning framework for 3-d unknown environment exploration, and structural reconstruction,” IEEE Robotics and Automation Letters, vol. 2, no. 3, pp. 1680–1687, 2017.

[23] K. Helsgaun, “An effective implementation of the lin–kernighan traveling salesman heuristic,” European journal of operational research, vol. 126, no. 1, pp. 106–130, 2000.

[24] C. H. Papadimitriou, “The complexity of the lin–kernighan heuristic for the traveling salesman problem,” SIAM Journal on Computing, vol. 21, no. 3, pp. 450–465, 1992.

[25] S. M. McGovern and S. M. Gupta, “2-opt heuristic for the disassembly line balancing problem,” in Environmentally conscious manufacturing iii, vol. 5262. SPIE, 2004, pp. 71–84.

[26] Z. Wang, X. Zhou, C. Xu, and F. Gao, “Geometrically constrained trajectory optimization for multicopters,” IEEE Transactions on Robotics, vol. 38, no. 5, pp. 3259–3278, 2022.

[27] T. Lee, M. Leoky, and N. H. McClamroch, “Geometric tracking control of a quadrotor uav on se (3),” in Proc. of the IEEE Control and Decision Conf. (CDC), Atlanta, GA, Dec. 2010, pp. 5420–5425.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36880.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36880.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《數字圖像處理與機器視覺》案例二(基于邊緣檢測和數學形態學焊縫圖像處理)

一、前言 焊縫是評價焊接質量的重要標志&#xff0c;人工檢測方法存在檢測標準不統一&#xff0c;檢測精度低&#xff0c;焊縫視覺檢測技術作為一種重要的質量檢測方法&#xff0c;正逐漸在各行各業中嶄露頭角。把焊縫準確的從焊接工件中準確分割出來是焊縫評價的關鍵一步&…

linux上git的使用

目錄 1.測試是否安裝有git 2.下載項目到本地 3.三板斧 1.將代碼放在創建的目錄中 2.提交改動到本地 3.提交代碼到遠端 4.注意點 以及補充內容 1.測試是否安裝有git 如果輸入git --help 會顯示下面一大串那么就是已經安裝&#xff0c;否則需要自行手動安裝 yum install g…

聚焦從業人員疏散逃生避險意識能力提升,推動生產經營單位每年至少組織開展(疏散逃生演練,讓全體從業人員熟知逃生通道、安全出口及應急處置要求,形成常態化機制。

聚焦從業人員疏散逃生避險意識能力提升&#xff0c;推動生產經營單位每年至少組織開展(疏散逃生演練&#xff0c;讓全體從業人員熟知逃生通道、安全出口及應急處置要求&#xff0c;形成常態化機制。完整試題答案查看 A.三次B.兩次C.一次 綜合運用“四不兩直”、明察暗訪、 ()、…

潔盟超聲波清洗機怎么樣?橫向測評希亦、潔盟、蘇泊爾超聲波清洗機誰是實力派

生活中大多數人戴眼鏡&#xff0c;但是很多人都不注意眼鏡的保養&#xff0c;導致鏡片越來越模糊&#xff0c;從而引發多邊的狀況發生&#xff0c;比如長久戴模糊不清的眼鏡&#xff0c;視力會受到影響隨之下降。甚至是眼鏡長期不清洗&#xff0c;上面的灰塵、細菌會影響眼部健…

彩虹PLM系統在航空航天業的應用與實踐

彩虹PLM系統在航空航天業的應用與實踐 彩虹PLM系統作為航空航天業的卓越解決方案&#xff0c;已經在眾多企業中得到了廣泛的應用和實踐。該系統通過其獨特的功能和優勢&#xff0c;為航空航天企業帶來了顯著的管理效益和市場競爭力提升。 彩虹PLM系統 在應用方面&#xff0c;彩…

這樣解釋 TCP_IP 真的很好理解

想象一下&#xff0c;你住在一個大城市里&#xff0c;這個城市就是你的計算機網絡世界。在這個城市中&#xff0c;有許多房子&#xff08;代表不同的計算機&#xff09;&#xff0c;這些房子之間由各種道路和交通設施連接起來&#xff08;代表網絡的物理連接&#xff09;。 現在…

1.2 離散LTI系統的時域分析

目錄 離散系統的定義 離散LTI系統的時域描述h[k] 離散系統的分類 線性與非線性系統 時變與非時變系統 因果與非因果系統 穩定與不穩定系統 滑動平均系統 LTI——Linear and Time-invariant System 線性時不變系統 離散系統的定義 離散LTI系統的時域描述h[k] 離…

【java12】java12新特性之File的mismatch方法

Java12引入了一個新的方法 mismatch&#xff0c;它屬于java.nio.file.Files類。此方法用于比較兩個文件的內容&#xff0c;并返回第一個不匹配字節的位置。如果兩個文件完全相同&#xff0c;則返回-1。 Files.mismatch 方法聲明 public static long mismatch(Path path1, Pat…

【并發編程】2-Synchronized

基本概念 線程安全問題三個要素&#xff1a;多線程、共享資源、非原子性操作&#xff1b;產生的根本原因&#xff1a;多條線程同時對一個共享資源進行非原子性操作&#xff1b;Synchronized解決線程安全問題的方式&#xff1a;通過互斥鎖將多線程的并行執行變為單線程串行執行…

昇思25天學習打卡營第4天|數據集Dataset

數據集 Dataset 介紹 之前說過&#xff0c;MindSpore是基于Pipeline&#xff0c;通過Dataset和Transformer進行數據處理。Dataset在其中是用來加載原始數據的。mindSpore提供了數據集加載接口&#xff0c;可以加載文本、圖像、音頻等&#xff0c;同時也可以自定義加載接口。此…

【UE開發】游戲庫存UI系統Demo

1.項目介紹 1.描述&#xff1a;一種用于存儲記錄玩家物品的游戲內可視化操作系統。 2.演示&#xff1a;https://www.bilibili.com/video/BV1f53neVEfW/?vd_source50dea901fd12253f417c48b937975b0d 3.大綱&#xff1a; 4.樣式&#xff1a; 2.W_Inventory_Main_01&#xff08;…

CORE Mobility Errorr的調試

在運行CORE tutorial 3中的mobility示例時&#xff0c;出現如下錯誤&#xff1a; 當看到這個問題的時候&#xff0c;并沒有仔細去分析日志和現象&#xff0c;在core-daemon的進程打印界面只看了一下最后的出錯堆棧&#xff1a; 2024-06-27 10:43:48,614 - ERROR - _server:_ca…

MySQL8 新特性——公用表表達式用法 with t1 as (select * from user)

MySQL8 新特性——公用表表達式用法_mysql ctes-CSDN博客 1.普通公用表表達式 MySQL8 新特性——公用表表達式用法 在MySQL 8.0及更高版本中&#xff0c;引入了公用表表達式&#xff08;Common Table Expressions&#xff0c;CTEs&#xff09;&#xff0c;它是一種方便且可重…

docker部署vue項目

1.下載docker desktop軟件 Docker Desktop啟動的時候&#xff0c;有可能彈框提示"WSL2 installations is incomplete"&#xff0c;這是您的系統中沒有安裝WSL2內核的原因&#xff0c;打開【https://aka.ms/wsl2kernel ,在打開的頁面中有一個Linux內核更新包"鏈…

【python011】經緯度點位可視化html生成(有效方案)

1.熟悉、梳理、總結項目研發實戰中的Python開發日常使用中的問題、知識點等&#xff0c;如獲取省市等邊界區域經緯度進行可視化&#xff0c;從而輔助判斷、決策。 2.歡迎點贊、關注、批評、指正&#xff0c;互三走起來&#xff0c;小手動起來&#xff01; 3.歡迎點贊、關注、批…

Android InputReader 輸入事件處理流程

Android系統輸入事件產生的底層主要是輸入子系統&#xff0c;Android 中的輸入設備有很多&#xff0c;例如屏幕&#xff0c;鼠標&#xff0c;鍵盤等都是輸入設備&#xff0c;對于應用開發者&#xff0c;接觸最多的也就是屏幕了。 1. 當輸入設備可用時&#xff0c;Linux會在 /de…

tensorRT的安裝

在這個網址找到適合自己的版本&#xff0c;尤其是找到合適的cuda版本&#xff1a; https://pypi.nvidia.com/ 然后直接pip 安裝&#xff1a; 比如&#xff1a; pip install https://pypi.nvidia.com/tensorrt-cu11/tensorrt-cu11-10.1.0.tar.gz 也可以&#xff1a; wget http…

【MotionCap】SLAHMR 在 Colab 的demo運行筆記

【MotionCap】SLAHMR slahmr將人類和相機運動與野外視頻分離 CVPR 2023跳至主要內容 SLAHMR (supports 4D Humans).ipynb SLAHMR (supports 4D Humans).ipynb_筆記本已移除星標Google Colab demo for: SLAHMR - Simultaneous Localization And Human Mesh Recovery @inproc…

STM32將外部SDRAM空間作為系統堆(Heap)空間

概述 stm32可以外擴很大的sram&#xff0c;常見外部sram的初始化函數一般是c語言寫的&#xff0c;默認寫在main函數里面。stm32初始化首先進入匯編代碼startup_stm32f429xx.s&#xff0c;在匯編代碼中Reset_Handler&#xff08;復位中斷服務程序&#xff09;里面先調用了Syste…

線上書店訂購系統小組作業匯總

1、數據庫模型圖、er圖1、數據庫模型圖、er圖-CSDN博客 2、網上圖書訂購2、網上圖書訂購-CSDN博客 3、簡單查詢與多表聯合復雜查詢MySQL周內訓參照3、簡單查詢與多表聯合復雜查詢-CSDN博客 4、觸發器-插入-修改-刪除MySQL周內訓參照4、觸發器-插入-修改-刪除-CSDN博客 5、存…