基于視覺語言模型的機器人實時探索系統!ClipRover:移動機器人零樣本視覺語言探索和目標發現

  • 作者:Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4
  • 單位: 2 , 4 ^{2,4} 2,4佛羅里達大學電氣與計算機工程系RoboPI實驗室, 1 , 3 ^{1,3} 1,3佛羅里達大學電氣與計算機工程系FOCUS實驗室, 3 ^{3} 3Amazon Robotics
  • 論文標題:ClipRover: Zero-shot Vision-Language Exploration and Target Discovery by Mobile Robots
  • 論文鏈接:https://arxiv.org/pdf/2502.08791
  • 項目主頁:https://robopi.ece.ufl.edu/cliprover.html

主要貢獻

  • 提出了新的導航管道流程ClipRover,用于無人地面車輛(UGV)在未知環境中的同時探索和目標發現。該系統利用視覺語言模型(VLM)的空間上下文感知能力,通過模塊化架構實現。
  • 設計了新的UGV平臺Rover Master,支持VLM導航系統的機動性和計算需求,旨在為通用機器人研究提供強大且可配置的支持,并計劃開源供學術使用。
  • 開發了功能齊全的系統,將提出的導航管道與UGV平臺集成在一起,并通過全面基準測試進行優化,以實現實時性能。
  • 通過廣泛的實驗評估,證明了ClipRover在效率和成功率方面優于傳統的地圖遍歷算法,并且在軌跡效率或成功率方面達到了與依賴先驗知識的路徑規劃方法相當的性能。

研究背景

研究問題

  • 傳統的系統通常將地圖探索和路徑規劃分開進行,導致探索效率低下。
  • 論文主要解決的問題是如何在未知環境中實現移動機器人的零樣本視覺語言導航和目標發現。

研究難點

該問題的研究難點包括:

  • 在沒有預先構建的地圖或目標知識的情況下,如何利用視覺語言模型(VLM)進行實時主動導航;
  • 如何在動態和部分可觀測的環境中適應路徑規劃。
    ?

相關工作

  • 路徑規劃:討論了用于移動機器人路徑規劃的多種方法,包括樹搜索算法(如BFS、DFS、Dijkstra、A*)和采樣算法(如PRM、RRT)。這些方法在靜態環境中表現良好,但在復雜和動態環境中可能需要頻繁調整。
  • 局部策略算法:介紹了Bug算法(如Bug0、Bug1、Bug2),這些算法采用局部最優策略,通過跟隨視線和避開障礙物邊界來實現導航。這些方法在有限的環境信息下表現良好。
  • 零樣本學習:討論了零樣本學習的概念,使機器人能夠在不熟悉的環境中識別物體并做出導航決策。研究人員使用視覺特征、知識圖、語義嵌入等技術來編碼對象信息。
  • 視覺語言導航:介紹了結合視覺和語言信息的導航方法,特別是基于CLIP模型的系統。這些系統通過生成語義標簽來支持在線導航,實現零樣本語義任務。然而,這些系統通常依賴于預先構建的地圖和目標位置信息。

Rover Master

系統設計

平臺概述
  • Rover Master是一個便攜且可擴展的平臺,專為2D導航任務設計。它的主要傳感器和執行器組件包括一個單目RGB攝像頭和一個2D激光雷達,用于外部感知。
  • 四個獨立的輪子組件負責執行動作,每個輪子組件都是模塊化的,自包含的,包括變速箱、無刷直流電機和懸掛系統。
輪子組件
  • 每個輪子組件由一個無刷直流電機通過行星齒輪箱連接,齒輪比為16:1。這種設計允許機器人在較高速度下行駛,并輕松克服中等障礙物。
  • 為了確保操作安全,設置了20%的油門限制,將機器人的最大速度限制在約2米/秒。
計算能力
  • Rover Master的計算管道由Nvidia Jetson Orin模塊提供動力。
  • 這個模塊提供了足夠的計算能力來處理通用視覺語言模型和其他計算密集型任務。
攝像頭和LiDAR
  • 使用FLIR全局快門RGB攝像頭進行視覺感知,攝像頭被提升到離地面大約30厘米的高度。這種設計確保了鏡頭的光學中心與機器人的幾何中心對齊。
  • 此外,飛行控制器的IMU提供的航向值支持360度掃描能力。2D激光雷達安裝在上層甲板的前部,主要用于安全和可視化目的,不影響視覺語言導航(VLN)的決策。
懸掛系統
  • 四輪獨立懸掛系統擴展了平臺在不平坦表面的應用。
  • 使用Discovery Wheel(TPU)時,它在草地、巖石路面甚至沙地上表現良好,但機動性有所降低。
配置靈活性
  • Rover Master平臺可以配置為不同的驅動類型(全向或差動)、底盤尺寸(參數化CAD設計)以及特定任務的執行器和傳感器的附加組件(如攝像頭、LiDAR、室內和野外機器人應用的機械手)。
  • 底盤板設計用于根據任務容納各種附加傳感器和執行器。

特點和能力

緊湊性
  • Rover Master系統的獨特優勢在于其輪子和電機組件的緊湊性。
  • 四輪獨立懸掛系統使其能夠適應不平坦的表面。
配置靈活性
  • 平臺可以配置為不同的驅動類型、底盤尺寸和任務特定的執行器和傳感器附加組件。
  • 底盤板設計用于根據任務容納各種附加傳感器和執行器。
成本效益

  • Rover Master平臺的成本效益高,與其他標準UGV平臺相比具有競爭力。
  • 具體來說,Rover Master的估計成本在650到850美元之間,而TurtleBot3(Waffle Pi)的成本約為1500美元,TurtleBot4(標準版)的成本約為2100美元。

ClipRover導航流程

視覺感知前端

  • 在前端,原始相機幀被分割成多個小塊(tiles),這些小塊代表機器人的視場(FOV)中的空間位置。
  • 每個tile經過縮放和處理后,通過CLIP的視覺編碼器進行編碼。具體來說,每個幀被分割成六個tile,并重新排列成一個張量,形狀為 N × 3 × H × W N \times 3 \times H \times W N×3×H×W,其中 H H H W W W 是tile的高度和寬度。
  • 編碼器處理這些輸入并生成一個 N × D N \times D N×D 的嵌入向量,其中 D D D 是每個預測向量的維度(在CLIP模型中為512)。
  • 此外,每個tile的標準差也被計算并結合到模型的預測中,作為每個tile信息量的指標。這有助于在機器人遇到特征貧乏、顏色均勻的對象時,如墻壁、門或家具,識別視覺編碼器的輸出可能缺乏可靠性。

通行性:視覺-語言相關性

  • 為了區分可行空間和非可行空間,設計了一組正面提示(positive prompts)來描述干凈和可行的環境,例如:“一張(平坦|開闊|寬闊|清晰)的(地板|地面|走廊)照片”。
  • 同時,也設計了一組負面提示(negative prompts)來描述被障礙物遮擋的空間,例如:“一張(裁剪的|糟糕的|不完整的)(阻塞|雜亂|擁擠)的(場景|空間)照片”。
  • 對于目標發現,使用類似的文本提示來定義任務的目標。例如,實驗中使用玩具熊作為目標,因為其在場景中具有獨特性。
  • 通過比較每個tile的嵌入與提示數據庫的內積,計算出通行性和目標置信度的分數。這些分數的范圍從-1.0到1.0,由最高絕對匹配得分決定。

熟悉度:視覺-視覺相關性

  • 除了通行性分數外,實時積累熟悉度數據庫以跟蹤已探索的空間。數據庫由表示已知空間的視覺嵌入(512維向量)構建,而不存儲或使用實際圖像。
  • 當新嵌入與現有向量的相關性超過預定義閾值時,將其視為“已知”。新嵌入向量通過兩種策略之一逐步合并到熟悉度數據庫中:
    • 平均法:在所有屬于已知點的向量之間取平均值,保持跟蹤已合并向量的計數:
      v next = s s + 1 ? v prev + 1 s + 1 ? v new v_{\text{next}} = \frac{s}{s+1} \cdot v_{\text{prev}} + \frac{1}{s+1} \cdot v_{\text{new}} vnext?=s+1s??vprev?+s+11??vnew?
    • 滾動平均法:在合并新向量時執行滾動平均操作,不需要跟蹤已合并向量的總數。這種方法使向量傾向于新插入的向量,并逐漸“忘記”較舊的向量。遺忘率由因子 λ \lambda λ 控制(即衰減因子):
      v next = ( 1 ? λ ) ? v prev + λ ? v new v_{\text{next}} = (1 - \lambda) \cdot v_{\text{prev}} + \lambda \cdot v_{\text{new}} vnext?=(1?λ)?vprev?+λ?vnew?

導航決策后端

  • 決策模塊根據感知和關聯系統提供的信息生成運動命令。
  • 引入了一個“運動混合器”作為基線的相關性到運動的轉換器。它考慮每個tile的所有分數(即通行性、熟悉度和標準差),并做出智能決策。
  • 運動混合器通常優先選擇高度可行但較不熟悉的區域,同時避免紋理少的區域。

此外,決策模塊還包括兩個附加功能:

  • 陷阱檢測:使機器人能夠識別并逃離潛在的死胡同。
  • 環顧四周:允許機器人在復雜環境中重新定位自己。通過執行 36 0 ° 360^\circ 360° 旋轉并收集不同方向的導航分數,應用高斯卷積來識別最可行的方向。

實現細節

切片策略

  • 為了增強管道中位置信息的嵌入,原始相機幀在輸入視覺語言模型之前被分割成更小的tiles。

  • 這種策略旨在優化機器人基于其視覺感知做出明智導航決策的能力。具體來說,每個幀被分割成六個tiles(2行x3列),以適應機器人的控制能力。

  • 使用較小的tiles代替整個相機幀可以減少視覺干擾,從而提高相關結果的準確性。

  • 切片的尺寸在整個管道的所有階段保持一致。例如,在2x3切片策略下,分割后的幀產生一個相應的 2 × 3 × 512 2 \times 3 \times 512 2×3×512 的視覺嵌入矩陣。

  • 這些嵌入隨后被傳遞給關聯系統,生成一個 2 × 3 2 \times 3 2×3 的相關分數矩陣,每個元素對應一個特定的tile。關聯系統的邏輯決定了單個tiles之間的相互影響。

  • 為了保留每個tile中的空間上下文,分割的區域略微擴展到其原始邊界之外。

  • 這種重疊引入了大約20%的共享區域,減少了相鄰tiles之間上下文信息的丟失。

  • 這種調整在相機遇到無紋理表面(如墻壁、紙盒或門板)時特別有益,否則可能會損害機器人的感知和導航性能。

提示生成

設計了一個提示系統來組合文本提示,采用層次模板。該設計受到WinCLIP的啟發,一個異常檢測框架。提示系統包括以下模板和符號:

  • 頂層prompts,如:“一張[描述]的(狀態){對象}的照片”。
  • 描述,如清晰、模糊、裁剪、空、損壞等。
  • 狀態,如清潔、清晰、寬闊、狹窄、雜亂、堵塞等。
  • 對象,如地板、墻、門、物體等。

使用YAML語法定義提示數據庫的結構,提供了選擇性集成和就地擴展兩個關鍵特性:

  • 選擇性集成:允許提示繞過模板的某些層級,以實現精確定制。例如,提示“A(無意義)的照片”不應跟隨任何{對象},通過提前終止提示來實現。
  • 就地擴展:通過使用垂直條語法(即|)分隔術語,便于集體定義相似的短提示。例如,提示“A照片沒有{上下文|紋理|信息}”被擴展為三個不同的提示。

性能優化

  • 導航決策是實時自主機器人系統的關鍵組件,需要快速執行以確保安全和操作效率。
  • 然而,大多數視覺語言模型(VLMs)被設計為大型語言模型(LLMs)的擴展,對處理延遲和數據吞吐量的要求較低。
  • 為了評估VLMs在機器人導航中的適用性,識別了兩個關鍵性能指標:
    • 決策延遲:測量從機器人相機捕獲幀到向電機發出相應運動命令的時間。這個指標反映了系統對環境變化的反應能力,如避開障礙物和維護安全導航。
    • 吞吐量:量化每秒處理的幀數,直接影響機器人運動的平滑度。有限的計算資源需要丟棄未處理的幀,只保留最新的幀進行決策。更高的吞吐量最小化幀間差異,減少運動的突然變化,確保更平滑的過渡。數學上,吞吐量是決策延遲的倒數。

  • 為了減少決策延遲和提高數據吞吐量,提出的框架將導航管道分為四個主要節點:預處理、推理、相關性和決策。
  • 計算密集型任務被卸載到GPU上,以利用并行處理能力。這些優化在功率受限的嵌入式系統上實現,平衡了效率和性能。通過這些優化,實現了:
    • 決策延遲:252.10毫秒,提高了900%。
    • 吞吐量:5.01幀每秒(FPS),相比順序CPU實現提高了400%。

2D LiDAR的使用

盡管ClipRover管道僅使用單目RGB數據進行VLN導航決策,但在機器人上安裝了一個2D 360°掃描LiDAR用于實驗安全、地圖生成和比較分析。LiDAR的具體功能包括:

  • 模擬接近開關
    • LiDAR作為虛擬關閉開關,在操作期間檢測機器人路徑上的障礙物。
    • 它監控發送到車輪的運動命令,推斷機器人的計劃軌跡,并檢查該方向上是否存在潛在障礙物。
    • 檢測到潛在碰撞時,發出停止信號,嚴格用于安全目的,不影響導航算法。
  • 地圖和機器人軌跡的可視化
    • 離線使用記錄的LiDAR和里程計數據進行地圖生成,隨后進行軌跡分析以評估導航效率和整體性能。
    • 使用SLAM Toolbox生成地圖和軌跡,實施兩遍過程以提高結果質量。
  • 與傳統算法的比較:使用LiDAR數據生成的2D地圖用于模擬和評估傳統范圍傳感器基于的地圖遍歷和路徑規劃算法,以進行性能比較。

波前模擬

  • 設計了“波前”模擬包作為不同方法之間比較的一般基線指標。它利用經典波動方程的概念并將其解釋為概率分布,允許同時探索無限多的方向。

  • 模擬實現了一個離散時間的二維拉普拉斯方程:
    ? 2 ? t 2 ψ ( x , y , t ) = c 2 ? 2 ψ ( x , y , t ) \frac{\partial^2}{\partial t^2} \psi(x,y,t) = c^2 \nabla^2 \psi(x,y,t) ?t2?2?ψ(x,y,t)=c2?2ψ(x,y,t)
    離散化后的波動方程為:
    ψ ( x , y , t n + 1 ) = 2 ? ψ ( x , y , t n ) ? ψ ( x , y , t n ? 1 ) + c 2 Δ t 2 Δ x 2 ? 2 ψ ( x , y , t ) s.t. t n + 1 ? t n = Δ t \begin{align*} \psi(x, y, t_{n+1}) &= 2 \cdot \psi(x, y, t_n) - \psi(x, y, t_{n-1}) \\ &+ \frac{c^2 \Delta t^2}{\Delta x^2} \nabla^2 \psi(x, y, t) \\ \text{s.t.} &\quad t_{n+1} - t_n = \Delta t \end{align*} ψ(x,y,tn+1?)s.t.?=2?ψ(x,y,tn?)?ψ(x,y,tn?1?)+Δx2c2Δt2??2ψ(x,y,t)tn+1??tn?=Δt?
    離散化的拉普拉斯算子 ? 2 \nabla^2 ?2 定義為:
    ? 2 ψ ( x , y ) = ψ ( x i + 1 , y j ) + ψ ( x i ? 1 , y j ) + ψ ( x i , y j + 1 ) + ψ ( x i , y j ? 1 ) ? 4 ? ψ ( x , y ) s.t. x i + 1 ? x i = y j + 1 ? y j = Δ x \begin{align*} \nabla^2 \psi(x,y) &= \psi(x_{i+1}, y_j) + \psi(x_{i-1}, y_j) \\ &+ \psi(x_i, y_{j+1}) + \psi(x_i, y_{j-1}) \\ &- 4 \cdot \psi(x,y) \\ \text{s.t.} &\quad x_{i+1} - x_i = y_{j+1} - y_j = \Delta x \end{align*} ?2ψ(x,y)s.t.?=ψ(xi+1?,yj?)+ψ(xi?1?,yj?)+ψ(xi?,yj+1?)+ψ(xi?,yj?1?)?4?ψ(x,y)xi+1??xi?=yj+1??yj?=Δx?

  • 此外,地圖邊界和障礙物通過反射條件模擬。在時間 T = 0 T=0 T=0 時,初始化一個以機器人起始位置為中心的高斯概率分布,標準差設置為機器人大小的一半;總概率歸一化為1。

  • 每次迭代,波函數乘以一個以目標位置為中心的反高斯函數,有效地減少地圖上的總概率,模擬一個排水效應。

  • 模擬終止時,剩余概率低于定義的閾值(實驗中為 1 e ? 4 1e^{-4} 1e?4)。輸出是一個二維概率分布 p ( t ) p(t) p(t),指示機器人在每個時間步到達目標的概率。平均值和標準差用于與其他軌跡算法比較。

實驗分析

實驗設置

  • 實驗在室內工作空間進行,選擇了一個布局復雜且包含多個障礙物、潛在陷阱和循環的環境。
  • 實驗的目標是讓機器人探索實驗室空間并尋找一個指定的目標——一個大約20厘米高、10厘米寬的玩具熊。
  • 實驗中,機器人的起始位置(源)和目標位置(目的地)從五個預定義的區域(如SW、C、NW、NE、SE)中選擇。

性能評估

  • 實驗旨在評估在無先驗地圖或目標知識的情況下,探索區域和找到目標的效率。主要使用總行進距離(軌跡長度)作為核心指標來量化這些性能。
  • 這種方法對CPU/GPU性能和機械驅動系統的能力不敏感,因為這些被認為是可以獨立改進的外部因素。
比較算法
  • 為了公平比較,實驗將提出的ClipRover系統與六種廣泛使用的地圖遍歷和路徑規劃算法進行了比較。

  • 為了確保一致性,開發了一個新的2D模擬框架RoboSim2D,利用相同的2D LiDAR地圖進行模擬,這些地圖是從實際實驗中記錄的掃描生成的。

  • 隨機行走(Random Walk):從一個給定的方向開始,遇到障礙物時隨機選擇新方向。

  • 墻反彈(Wall Bounce):從一個給定方向開始,根據碰撞點的法向量反彈。

  • 波前(Wave Front):從一個高斯概率分布開始,向外擴散并反彈障礙物。

  • Bug算法

    • Bug0:一直朝目標移動,直到遇到障礙物,然后沿著障礙物邊界移動。
    • Bug1:盡可能朝目標移動,否則繞過障礙物。繞過障礙物后,移動到環上距離最小的點。
    • Bug2:繞過障礙物,直到越過從起點到目標的直線(m線),然后恢復朝目標直行。
失敗標準
  • 由于實際限制,如果行進距離超過預設上限,則任務被視為失敗。對于在測試區域進行的實際實驗,這個上限設定為100米。
  • 在模擬中,隨機行走、墻反彈和波前算法的上限設定為1000米。對于Bug算法,通過檢測循環來識別無盡循環,并將其分類為任務失敗。
評估指標

實驗使用了路徑長度加權成功率(SPL)作為性能指標,定義為:
SPL = 1 N ∑ i = 1 N S i l i max ? ( p i , l i ) \text{SPL} = \frac{1}{N} \sum_{i=1}^{N} S_{i} \frac{l_{i}}{\max(p_{i}, l_{i})} SPL=N1?i=1N?Si?max(pi?,li?)li??
其中, S i S_{i} Si? 是成功次數, l i l_{i} li? 是實際路徑長度, p i p_{i} pi? 是基線路徑長度。SPL指標結合了成功率和路徑效率。

定性和定量分析

  • 進行了超過60次實驗,基于不同的起始和目標位置組合。對于ClipRover系統,每個起始-目標對進行了三次試驗。
  • 相比之下,隨機行走實驗記錄了200次試驗,而墻反彈實驗記錄了180個均勻分布的方向。
結果展示
  • 實驗結果顯示,ClipRover在正常導航模式下表現出類似人類的運動策略,通過在開闊空間中心導航來提高探索效率并減少被困的可能性。
  • 相比之下,路徑規劃算法通常沿著障礙物輪廓移動,因為它們缺乏對場景的語義理解。

定量結果
  • 定量結果顯示,ClipRover在達到目標前的平均行進距離為基線距離的2.66倍,而Wall Bounce算法在同一成功率下的平均行進距離為9.58倍。
  • 盡管ClipRover沒有額外的環境信息,但它在成功率和軌跡效率上優于傳統的地圖遍歷算法,并且在許多情況下超越了依賴路徑規劃算法的性能。
SOTA VLNs比較
  • 論文還比較了ClipRover與其他最先進的視覺-語言導航(VLN)系統。
  • 與其他系統相比,ClipRover獨特地不需要任務空間的先驗知識,僅使用單目RGB感知。
  • 此外,ClipRover直接輸出低級運動命令,而不需要其他傳統定位和導航管道,這使得它在低成本機器人上快速部署特別適用。

局限與改進

  • 紋理缺失或透明表面:ClipRover在處理無紋理或透明表面時遇到困難,容易將這些表面誤判為可通行區域。
  • 開放空間和人工迷宮:在缺乏視覺線索的大型開放空間或人工迷宮中,系統的導航效率降低,因為它依賴于環境中的語義信息。
  • 熟悉度飽和:隨著時間的推移,熟悉度數據庫可能會飽和,導致系統難以有效探索新區域。
  • 自適應切片策略:當前系統使用固定切片策略,可能在狹窄空間中表現不佳。未來改進可以引入自適應切片策略以更好地處理這些情況。
  • 高級推理和任務敘述:未來的改進可以包括集成大型語言模型(LLM)以實現更高層次的推理和任務敘述,從而提高系統的智能水平。

總結

  • 論文提出了ClipRover,一種用于未知環境中自主地面機器人同時探索和目標發現的新型導航管道。
  • ClipRover利用VLMs的能力,實現了零樣本推斷和高效導航,僅需單目視覺,無需預先地圖或目標特定信息。
  • 通過在Rover Master平臺上進行廣泛的評估,證明了ClipRover在效率和成功率上均優于現有方法。
  • ClipRover的模塊化框架為未來在復雜動態環境中應用VLMs的研究奠定了基礎。

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

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

相關文章

SpringBoot和微服務學習記錄Day2

微服務 微服務將單體應用分割成更小的的獨立服務,部署在不同的服務器上。服務間的關聯通過暴露的api接口來實現 優點:高內聚低耦合,一個模塊有問題不影響整個應用,增加可靠性,更新技術方便 缺點:增加運維…

網站集群批量管理-Ansible劇本與變量

復盤內容:鏈接指北 查看ansible命令文檔 ansible-doc -s systemd一、劇本 何為劇本: playbook 文件,用于長久保存并且實現批量管理,維護,部署的文件. 類似于腳本存放命令和變量 劇本yaml格式,yaml格式的文件:空格,冒號. 劇本未來我們批量管理,運維必會的內容. …

如何在Dify中安裝運行pandas、numpy庫(離線、在線均支持,可提供遠程指導)

pandas和numpy這兩個庫是數據科學和數據分析中經常使用的工具包,原生的Dify無法直接使用這兩個庫,需要手動安裝后才可以使用。本文將介紹如何在Dify中安裝pandas和numpy,并在代碼執行節點中運行使用pandas和numpy。 Dify的代碼執行節點中的py…

Helm核心概念與常見操作介紹

在管理Kubernetes集群里的應用時,Helm能幫上大忙,它把應用的部署、升級和管理變得簡單多了,有如是Kubernetes的 “應用商店”。 Helm的三個重要概念 三大概念最直接的理解:Helm 安裝 charts 到 Kubernetes 集群中,每…

rkmpp 解碼 精簡mpi_dec_test.c例程

rkmpp 解碼流程(除 MPP_VIDEO_CodingMJPEG 之外) 源碼 輸入h264碼流 輸出nv12文件 /** Copyright 2015 Rockchip Electronics Co. LTD** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file exce…

用一個實際例子快速理解MCP應用的工作步驟

已經有很多的文章介紹MCP server,MCP Client工作原理,這里不做太多介紹。但是很多介紹都只是側重介紹概念,實際的工作原理理解起來對初學者還是不太友好。本文以一個智能旅游咨詢系統為例,詳細說明在利用 Model Context Protocol&…

【LeetCode 題解】數據庫:1321.餐館營業額變化增長

一、問題描述 本題給定了一個名為 Customer 的表,記錄了餐館顧客的交易數據,包括顧客 ID、姓名、訪問日期和消費金額。作為餐館老板,我們的任務是分析營業額的變化增長情況,具體來說,就是計算以 7 天(某日…

【Python】讀取xlsb或xlsx的單一或連續單元格工具類

代碼主要來自Kimi.ai,有修改。 優先使用工作表序號索引工作表,序號從1開始。 運行需要先安裝openpyxl和pyxlsb兩個第三方庫。 import openpyxl from openpyxl.utils import range_boundaries from pyxlsb import open_workbook as open_xlsbclass Exc…

【藍橋杯】動態規劃:背包問題

這篇文章主要記錄動態規劃方面的學習。 動態規劃的核心思想: 把大問題分解成小問題,記住小問題的解,避免重復計算。 動態規劃(DP)的三大特點: ①最優子結構:大問題的最優解可以由小問題的最優解推導出來 ②重疊子問題:在求解過程中會反復遇到相同的小問題 ③無后效…

華為數字芯片機考2025合集1已校正

單選 1.以下低功耗措施中,哪種不是降低電路翻轉率的方法? A.在不進行算術運算的時候,使這些模塊的輸入保持不變,不讓新的操作數進來 B.采用Gray 碼或One‐hot 碼作為狀態機編碼 C.減少電路中的glitch D.重新安排“if‐else”表達…

React 列表渲染

開發環境:Reacttsantd 你可能經常需要通過 JavaScript 的數組方法 來操作數組中的數據,從而將一個數據集渲染成多個相似的組件。在這篇文章中,你將學會如何在 React 中使用 filter() 篩選需要渲染的組件和使用 map() 把數組轉換成組件數組。 …

力扣刷題DAY11(動態規劃-線性DP)

一、最長上升子序列 300. 最長遞增子序列 &#xff08;一&#xff09;初版代碼 class Solution { public:int lengthOfLIS(vector<int>& nums) {int n nums.size();vector<int> f(n 1, 1); //初始化為1&#xff0c;因為每個數至少可以作為一個單獨的序列in…

DFS--

數字的全排列 #include <bits/stdc.h> using namespace std;//最大的排列數目 const int N10; int n; //存儲排列的路徑 int path[N]; //標記數字是否已經被使用 bool st[N];void dfs(int u){//到達遞歸邊界&#xff0c;輸出一個排列if(un){//輸出循環for(int i0; i<…

棧與隊列及其基礎應用

一.棧 1.棧的定義 棧是一種特殊的線性表&#xff0c;其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂&#xff0c;另一端稱為棧底。棧中的數據元素遵守后進先出LIFO&#xff08;Last In First Out&#xff09;的原則。其結構可以參考羽毛…

openEuler-22.03-LTS-SP3 編譯安裝 Greenplum-db 6.20.0

openEuler-22.03-LTS-SP3 編譯安裝 Greenplum-db 6.20.0 1、配置 yum 華為源2、安裝依賴3、源碼安裝 openssl 1.0.1u3.1、openssl 1.1.1 降級到 openssl 1.0.1 4、源碼安裝 python 2.75、使用 pip3 安裝 Python 相關依賴6、編譯安裝 Greenplum-db 6.20.06.1、修改配置6.2、基于…

機器學習02——概要

一、簡介 機器學習是一門在沒有明確編程的情況下讓計算機學習的科學。 監督學習是有目標的&#xff0c;輸入數據對應明確的輸出&#xff1b;無監督學習則是“探索”型的&#xff0c;模型的目標是從數據中發現潛在的模式或結構&#xff0c;而不需要預先知道標簽。 二、機器學…

swift-08-屬性、匯編分析inout本質

一、Swift中跟實例相關的屬性可以分為2大類 1.1 存儲屬性&#xff08; Stored Property&#xff09; 類似于成員變量這個概念 存儲在實例的內存中 結構體、類可以定義存儲屬性 枚舉不可以定義存儲屬性&#xff08;因為枚舉只存儲關聯值和case&#xff09; 1.2 計算屬性&am…

【HarmonyOS Next之旅】DevEco Studio使用指南(十二)

目錄 1 -> Code Linter代碼檢查 2 -> 配置代碼檢查規則 3 -> 查看/處理代碼檢查結果 1 -> Code Linter代碼檢查 Code Linter針對ArkTS/TS代碼進行最佳實踐/編程規范方面的檢查。 可根據掃描結果中告警提示手工修復代碼缺陷&#xff0c;或者執行一鍵式自動修復…

前端vue項目打包成桌面端exe應用

主要 使用 Electron將 vue項目打包為 exe 1.首先下載Electron git clone https://github.com/electron/electron-quick-start cd electron-quick-start npm install安裝完依賴之后 npm start運行成功 注意&#xff1a;如果你的項目使用了VueRouter&#xff0c;那么切記&…

基于springcloud的“微服務架構的巡游出租管理平臺”的設計與實現(源碼+數據庫+文檔+PPT)

基于springcloud的“微服務架構的巡游出租管理平臺”的設計與實現&#xff08;源碼數據庫文檔PPT) 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;springcloud 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 系統總體結構圖 E-R實體關系圖…