MSCKF4講:后端理論推導(下)

MSCKF4講:后端理論推導(下)

文章目錄

  • MSCKF4講:后端理論推導(下)
  • 6 可觀測性分析與約束
    • 6.1 為什么要做能觀性分析
    • 6.2 關于零空間解釋
    • 6.3 可觀測性分析
    • 6.4 可觀測性約束
      • ① 狀態轉移矩陣Φ
      • ② 對觀測矩陣H--觀測的雅可比矩陣

??寫在前面,為了防止偏航角被錯誤的可觀,作者對狀態轉移矩陣和觀測矩陣進行了一定的修改,使其滿足可觀性要求。

6 可觀測性分析與約束

??論文使用這種約束方法:OC-EKF

??論文 Observability-constrained vision-aided inertial navigation

??線性系統理論能觀測能控概念

1 能觀測:狀態量(如位姿、偏差)是否可以由輸出(如觀測的預測值)反應

2 能控:狀態量是否受到輸入影響

6.1 為什么要做能觀性分析

??真實VIO系統不能觀的維度是4(平移和yaw角),而實際MSCKF不能觀的維度變成了3,繞重力軸的旋轉(yaw角)被錯誤地能觀了,從而產生了不一致性Inconsistency,系統誤認為yaw角具有更多的信息從而將yaw對應的協方差設得比較小,最終導致VIO估計精度的下降。能觀性分析就是為了能讓MSCKF系統不可觀的維度與真實系統一致,從而提高VIO精度。

補充:為什么vio系統不能觀的維度是4?

? 對于平移來說,如果系統沒有全局信息,就很難確定相機在世界坐標系中的絕對位置。在滾動(roll)和俯仰(pitch)發生變化時,重力會在測量中引入一些不確定性,但是對于偏航來說,由于重力一直指向下,說白了沒有這個方向的投影分量,它并不提供關于相機絕對朝向的信息。因此,偏航角在這種情況下被認為是不可觀測的

補充:為什么yaw被錯誤的能觀測了?

? 計算能觀性矩陣會用到狀態轉移矩陣觀測矩陣 ,這兩個Jacobian的計算依賴狀態值。如果使用狀態真實值計算Jacobian,系統不能觀維度為4,與真實系統一致;如果使用狀態估計值,由于使用了不同時刻的估計量,能觀性陣中會出現一個擾動項 ΔΓ,擾動項的存在使得yaw角對應那一維的零空間向量不再成立,從而導致yaw角被錯誤地能觀了。

6.2 關于零空間解釋

??Ax=0x就是矩陣A的零空間。

??矩陣A零度也就是不能觀測的維度=n-秩。零度即零空間維度。

1 如果零空間維度為0,意味著矩陣的原像空間中只有一個樣本可以被映射到矩陣像空間中的零點。(全0)
2 如果零空間維度為1:意味著矩陣的原像空間中有一條直線上的點經過矩陣算子后會被映射到像空間中的零點。
3 如果零空間維度為2:意味著矩陣的原像空間中有一個平面上的點經過矩陣算子后會被映射到像空間中的零點。
4 如果零空間維度為k:意味著矩陣的原像空間中有一個k維子空間,該k維子空間中的點經過矩陣算子后會被映射到像空間中的零點。

6.3 可觀測性分析

??系統的可觀測性屬性影響估計器的一致性。在使用線性化估計器(如EKF)時,對評估系統和測量雅可比矩陣進行線性化錯誤會改變估計器獲取信息的方向

??如果這些信息沿著不可觀測的方向,將導致更大的誤差、更小的不確定性和不一致性。就是說,如果由不可觀變成可以觀測,就會導致

??線性系統理論中提到,一個系統能否完全可觀,看其能觀測性判別矩陣 Q O Q_O QO?是否滿秩

??放到這里,就是如下形式,H表示系統輸出矩陣(投影矩陣,不是雅可比!), ? \phi ?表示了系統矩陣離散化后的描述形式!注意這是一個時變系統。
O ? [ H 1 H 2 Φ 1 ? H k Φ k ? 1 ? Φ 1 ] \left.\mathcal{O}\triangleq\left[\begin{array}{c}\mathbf{H}_1\\\mathbf{H}_2\mathbf{\Phi}_1\\\vdots\\\mathbf{H}_k\mathbf{\Phi}_{k-1}\cdots\mathbf{\Phi}_1\end{array}\right.\right] O? ?H1?H2?Φ1??Hk?Φk?1??Φ1?? ?

??這個矩陣對應的零空間如下

零空間:零空間的秩表示了不可觀測的維度。很明顯這個零空間的維度是4(兩個全0行),剛好對應vio系統的不可觀維度4,即平移與yaw。

O N 1 = 0 , N 1 = [ 0 3 R b v , 1 G g 0 3 0 3 0 3 ? ( G v b , 1 ) ∧ G g 0 3 0 3 I 3 ? ( t w b , 1 ) ∧ G g I 3 ? ( p w ) ∧ G g ] = [ N t , 1 ∣ N r , 1 ] \left.\mathcal{O}\mathbf{N}_1=\mathbf{0},\quad\mathbf{N}_1=\left[\begin{array}{cc}\mathbf{0}_3&R_{bv,1}G\mathbf{g}\\\mathbf{0}_3&\mathbf{0}_3\\\mathbf{0}_3&-(^G\mathbf{v}_{b,1})^{\wedge G}\mathbf{g}\\\mathbf{0}_3&\mathbf{0}_3\\\mathbf{I}_3&-(t_{wb,1})^{\wedge G}\mathbf{g}\\\mathbf{I}_3&-(p_w)^{\wedge G}\mathbf{g}\end{array}\right.\right]=\left[\begin{array}{cc}\mathbf{N}_{t,1}&|&\mathbf{N}_{r,1}\end{array}\right] ON1?=0,N1?= ?03?03?03?03?I3?I3??Rbv,1?Gg03??(Gvb,1?)Gg03??(twb,1?)Gg?(pw?)Gg? ?=[Nt,1???Nr,1??]

?

??但是,隨著狀態增多,能觀測性矩陣維度大了,其中 H k Φ k , 1 = H k Φ k , k ? 1 … Φ 2 , 1 Φ 1 \mathrm{H}_k\Phi_{k,1}=\mathrm{H}_k\Phi_{k,k-1}\ldots\Phi_{2,1}\Phi_1 Hk?Φk,1?=Hk?Φk,k?1?Φ2,1?Φ1?遞推過程中,形式和理想的形式不一致了。就是能觀測性矩陣形式變了,那么原來的零空間的形式肯定不再滿足。0空間的最后一列不成立,導致可觀測性多了一維(yaw)。

??論文中為了糾正這個問題,即仍然用原來零空間的形式,那么就只能強制修改能觀測性矩陣的形式

6.4 可觀測性約束

??針對上述問題,修改狀態轉移矩陣 Φ觀測矩陣 H。本質上不需要關注0空間在每一時刻是否一樣,只要保證每一個時刻的0空間維度都是4即可!也就是要滿足下面兩個式子!
N k = Φ k ? 1 N k ? 1 , H k N k = 0 \mathbf{N}_k=\Phi_{k-1}\mathbf{N}_{k-1},\quad\mathbf{H}_k\mathbf{N}_k=\mathbf{0} Nk?=Φk?1?Nk?1?,Hk?Nk?=0

① 狀態轉移矩陣Φ

N k = Φ k ? 1 N k ? 1 \mathbf{N}_k=\Phi_{k-1}\mathbf{N}_{k-1} Nk?=Φk?1?Nk?1?

??展開
N r , k + 1 = Φ k N r , k → [ C ( q ^ c , k + 1 ∣ k ) c g 0 3 ? ? c v ^ t , k + 1 ∣ k × ? c g 0 3 ? ? c p ^ t , k + 1 ∣ k × ? c g ] = [ Φ 11 Φ 12 0 3 0 3 0 3 0 3 0 3 I 3 0 3 0 3 0 3 Φ 31 Φ 32 I 3 0 34 0 3 0 3 0 3 0 3 I 3 0 3 0 51 Φ 52 δ t I 3 Φ 54 I 3 ] [ C ( q ^ c , k ∣ k ? 1 ) c g 0 3 ? ? q ^ t , k ∣ k ? 1 × ? c g 0 3 0 3 ] . \mathbf{N}_{r,k+1}=\mathbf{\Phi}_k\mathbf{N}_{r,k}\quad\to\quad\begin{bmatrix}\mathbf{C}\left(\hat{q}_{c,k+1|k}\right)^{c}\mathbf{g}\\\mathbf{0}_{3}\\-\lfloor c\hat{\mathbf{v}}_{t,k+1|k}\times\rfloor^{c}\mathbf{g}\\\mathbf{0}_{3}\\-\lfloor{}^{c}\hat{\mathbf{p}}_{t,k+1|k}\times\rfloor^{c}\mathbf{g}\end{bmatrix}=\begin{bmatrix}\Phi_{11}&\Phi_{12}&\mathbf{0}_{3}&\mathbf{0}_{3}&\mathbf{0}_{3}&\mathbf{0}_{3}\\\mathbf{0}_{3}&\mathbf{I}_{3}&\mathbf{0}_{3}&\mathbf{0}_{3}&\mathbf{0}_{3}\\\Phi_{31}&\Phi_{32}&\mathbf{I}_{3}&\mathbf{0}_{34}&\mathbf{0}_{3}\\\mathbf{0}_{3}&\mathbf{0}_{3}&\mathbf{0}_{3}&\mathbf{I}_{3}&\mathbf{0}_{3}\\\mathbf{0}_{51}&\Phi_{52}&\delta t\mathbf{I}_{3}&\Phi_{54}&\mathbf{I}_{3}\end{bmatrix}\begin{bmatrix}\mathbf{C}\left(\hat{q}_{c,k|k-1}\right)^{c}\mathbf{g}\\\mathbf{0}_{3}\\-\lfloor\hat{q}_{t,k|k-1}\times\rfloor^{c}\mathbf{g}\\\mathbf{0}_{3}\\\mathbf{0}_{3}\end{bmatrix}. Nr,k+1?=Φk?Nr,k? ?C(q^?c,k+1∣k?)cg03???cv^t,k+1∣k?×?cg03???cp^?t,k+1∣k?×?cg? ?= ?Φ11?03?Φ31?03?051??Φ12?I3?Φ32?03?Φ52??03?03?I3?03?δtI3??03?03?034?I3?Φ54??03?03?03?03?I3??03? ? ?C(q^?c,kk?1?)cg03???q^?t,kk?1?×?cg03?03?? ?.
我們把這個矩陣乘出來,能得到3個等式(主要是修改Φ11,31,51):

第1行:可以直接拿出來

C ( ′ q ˉ ^ G , k + 1 ∣ k ) c g = Φ 11 C ( ′ q ˉ ^ G , k ∣ k ? 1 ) c g → Φ 11 = C ( ι , k + 1 ∣ k q ~ ^ ι , k ∣ k ? 1 ) . \mathbf{C}\left({}^{\prime}\hat{\bar{q}}_{G,k+1|k}\right)^{c}\mathbf{g}=\Phi_{11}\mathbf{C}\left({}^{\prime}\hat{\bar{q}}_{G,k|k-1}\right)^{c}\mathbf{g}\quad\to\Phi_{11}=\mathbf{C}\left({}^{\iota,k+1|k}\hat{\tilde{q}}_{\iota,k|k-1}\right). C(qˉ?^?G,k+1∣k?)cg=Φ11?C(qˉ?^?G,kk?1?)cgΦ11?=C(ι,k+1∣kq~?^?ι,kk?1?).

第3、5行:論文中提到線性相關,無法直接求,或者說由多個解(等式中包含了反對
稱矩陣導致實際右側如果按照第?個式子那么算就會導致得到矩陣是線性相關的)

Φ 31 C ( q ^ c , k ∣ k ? 1 ) G g = ? G v ^ l , k ∣ k ? 1 × ? G g ? ? G v ^ l , k + 1 ∣ k × ? G g Φ 51 C ( I q ^ G , k ∣ k ? 1 ) G g = δ t ? G v ^ l , k ∣ k ? 1 × ? G g ? ? G p ^ l , k + 1 ∣ k × ? G g \begin{aligned}\Phi_{31}\mathbf{C}\left(\hat{q}_{c,k|k-1}\right)^G\mathbf{g}&=\lfloor{}^G\hat{\mathbf{v}}_{l,k|k-1}\times\rfloor^G\mathbf{g}-\lfloor{}^G\hat{\mathbf{v}}_{l,k+1|k}\times\rfloor^G\mathbf{g}\\\Phi_{51}\mathbf{C}\left({}^I\hat{q}_{G,k|k-1}\right)^G\mathbf{g}&=\delta t\lfloor{}^G\hat{\mathbf{v}}_{l,k|k-1}\times\rfloor^G\mathbf{g}-\lfloor{}^G\hat{\mathbf{p}}_{l,k+1|k}\times\rfloor^G\mathbf{g}\end{aligned} Φ31?C(q^?c,kk?1?)GgΦ51?C(Iq^?G,kk?1?)Gg?=?Gv^l,kk?1?×?Gg??Gv^l,k+1∣k?×?Gg=δt?Gv^l,kk?1?×?Gg??Gp^?l,k+1∣k?×?Gg?

然后論文里面引入了一個最小二乘類似的約束,其中 A=Φ31 或 Φ51

min ? A ? ∥ A ? ? A ∥ F 2 , s.t.? A ? u = w \min_{\mathbf{A}^{*}}\left\|\mathbf{A}^{*}-\mathbf{A}\right\|_{\mathcal{F}}^{2},\quad\text{s.t. }\mathbf{A}^{*}\mathbf{u}=\mathbf{w} A?min?A??AF2?,s.t.?A?u=w

A ? = A ? ( A u ? w ) ( u T u ) ? 1 u T \mathbf{A}^*=\mathbf{A}-(\mathbf{A}\mathbf{u}-\mathbf{w})\left(\mathbf{u}^T\mathbf{u}\right)^{-1}\mathbf{u}^T A?=A?(Au?w)(uTu)?1uT

// 5. Observability-constrained VINS 可觀性約束// Modify the transition matrix// 5.1 修改phi_11// imu_state.orientation_null為上一個imu數據遞推后保存的// 這塊可能會有疑問,因為當上一個imu假如被觀測更新了,// 導致當前的imu狀態是由更新后的上一個imu狀態遞推而來,但是這里的值是沒有更新的,這個有影響嗎// 答案是沒有的,因為我們更改了phi矩陣,保證了零空間// 并且這里必須這么處理,因為如果使用更新后的上一個imu狀態構建上一時刻的零空間// 就破壞了上上一個跟上一個imu狀態之間的0空間// Ni-1 = phi_[i-2] * Ni-2// Ni = phi_[i-1] * Ni-1^// 如果像上面這樣約束,那么中間的0空間就“崩了”Matrix3d R_kk_1 = quaternionToRotation(imu_state.orientation_null);Phi.block<3, 3>(0, 0) =quaternionToRotation(imu_state.orientation) * R_kk_1.transpose();// 5.2 修改phi_31Vector3d u = R_kk_1 * IMUState::gravity;RowVector3d s = (u.transpose() * u).inverse() * u.transpose();Matrix3d A1 = Phi.block<3, 3>(6, 0);Vector3d w1 =skewSymmetric(imu_state.velocity_null - imu_state.velocity) * IMUState::gravity;Phi.block<3, 3>(6, 0) = A1 - (A1 * u - w1) * s;// 5.3 修改phi_51Matrix3d A2 = Phi.block<3, 3>(12, 0);Vector3d w2 =skewSymmetric(dtime * imu_state.velocity_null + imu_state.position_null -imu_state.position) *IMUState::gravity;Phi.block<3, 3>(12, 0) = A2 - (A2 * u - w2) * s;

② 對觀測矩陣H–觀測的雅可比矩陣

H c a m [ H θ G 0 3 × 9 H p l ∣ H f ] [ 0 3 C ( ι G , k ∣ k ? 1 q ^ g ) c g 0 3 0 3 0 3 ? ? c q ^ ? , k ∣ k ? 1 × ? c g 0 3 0 3 I 3 ? ? c q ^ ? , k ∣ k ? 1 × ? c g I 3 ? ? c f ^ k ∣ k ? 1 × ? c g ] = [ 0 0 ] . \mathbf{H}_{cam}\begin{bmatrix}\mathbf{H}_{\theta_G}&\mathbf{0}_{3\times9}&\mathbf{H}_{\mathbf{p}_l}&|&\mathbf{H}_{\mathbf{f}}\end{bmatrix}\begin{bmatrix}\mathbf{0}_{3}&\mathbf{C}\left(\iota_{G,k|k-1}^{\hat{q}}\mathbf{g}\right)^{c}\mathbf{g}\\\mathbf{0}_{3}&\mathbf{0}_{3}\\\mathbf{0}_{3}&-\lfloor{}^{c}\mathbf{\hat{q}}_{\ell,k|k-1}\times\rfloor^{c}\mathbf{g}\\\mathbf{0}_{3}&\mathbf{0}_{3}\\\mathbf{I}_{3}&-\lfloor{}^{c}\mathbf{\hat{q}}_{\ell,k|k-1}\times\rfloor^{c}\mathbf{g}\\\mathbf{I}_{3}&-\lfloor{}^{c}\mathbf{\hat{f}}_{k|k-1}\times\rfloor^{c}\mathbf{g}\end{bmatrix}=\begin{bmatrix}\mathbf{0}&\mathbf{0}\end{bmatrix}. Hcam?[HθG???03×9??Hpl????Hf??] ?03?03?03?03?I3?I3??C(ιG,kk?1q^??g)cg03???cq^??,kk?1?×?cg03???cq^??,kk?1?×?cg??cf^kk?1?×?cg? ?=[0?0?].

??還是上面同樣的計算方法,這部分細節后續在考慮吧,先把代碼對應上即可。

??下面代碼u就是對于了這個大矩陣(右),A就是對位姿的雅可比矩陣(左)。約束限制就是 A u = 0 = w Au=0=w Au=0=w。所以下面公式里的w其實是0.
H c a m [ H θ G H p l ] [ C ( q ^ G , k ∣ k ? 1 ) G g ( ? G f ^ k ∣ k ? 1 × ? ? ? G p ^ I , k ∣ k ? 1 × ? ) G g ] = 0. \mathbf{H}_{cam}\begin{bmatrix}\mathbf{H}_{\boldsymbol{\theta}_G}&\mathbf{H}_{\mathbf{p}_l}\end{bmatrix}\begin{bmatrix}\mathbf{C}\left(\hat{\boldsymbol{q}}_{G,k|k-1}\right)^G\mathbf{g}\\\left(\left\lfloor G\hat{\mathbf{f}}_{k|k-1}\times\right\rfloor-\left\lfloor{}^G\hat{\mathbf{p}}_{I,k|k-1}\times\right\rfloor\right)^G\mathbf{g}\end{bmatrix}=\mathbf{0}. Hcam?[HθG???Hpl???] ?C(q^?G,kk?1?)Gg(?Gf^kk?1?×???Gp^?I,kk?1?×?)Gg? ?=0.

H c a m \mathbf{H}_{cam} Hcam?對應代碼dz_dpc,即殘差對相機系點 C P ^CP CP

H θ G \mathbf{H}_{\theta_G} HθG??對應代碼dpc_dxc,即相機系點 C P ^CP CP對旋轉的雅可比

H p l \mathbf{H}_{\mathbf{p}_l} Hpl??對應代碼dpc_dxc,即相機系點 C P ^CP CP對平移的雅可比

H f \mathbf{H}_{\mathbf{f}} Hf?對應代碼dpc_dpg,即相機系點 C P ^CP CP對路標點 W P ^WP WP的雅可比

A ? = A ? ( A u ? w ) ( u T u ) ? 1 u T \mathbf{A}^*=\mathbf{A}-(\mathbf{A}\mathbf{u}-\mathbf{w})\left(\mathbf{u}^T\mathbf{u}\right)^{-1}\mathbf{u}^T A?=A?(Au?w)(uTu)?1uT

解決來之后,根據下面公式依次對應新的雅可比。代碼中是雙目,所以行維都是4.

H c a m H θ G = A 1 : 2 , 1 : 3 ′ , H c a m H p l = A 1 : 2 , 4 : 6 ′ , H c a m H f = ? A 1 : 2 , 4 : 6 ′ \mathbf{H}_{cam}\mathbf{H}_{\theta_G}=\mathbf{A}_{1:2,1:3}^{\prime},\mathbf{H}_{cam}\mathbf{H}_{\mathbf{p}_l}=\mathbf{A}_{1:2,4:6}^{\prime},\mathbf{H}_{cam}\mathbf{H}_{\mathbf{f}}=-\mathbf{A}_{1:2,4:6}^{\prime} Hcam?HθG??=A1:2,1:3?,Hcam?Hpl??=A1:2,4:6?,Hcam?Hf?=?A1:2,4:6?

    // Modifty the measurement Jacobian to ensure// observability constrain.// 6. OCMatrix<double, 4, 6> A = H_x;Matrix<double, 6, 1> u = Matrix<double, 6, 1>::Zero();u.block<3, 1>(0, 0) = quaternionToRotation(cam_state.orientation_null) * IMUState::gravity;u.block<3, 1>(3, 0) =skewSymmetric(p_w - cam_state.position_null) * IMUState::gravity;H_x = A - A * u * (u.transpose() * u).inverse() * u.transpose();H_f = -H_x.block<4, 3>(0, 3);//4*3大小,從0行3列開始取,對應公式

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

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

相關文章

【洛谷 P8682】[藍橋杯 2019 省 B] 等差數列 題解(數學+排序+輾轉相除法)

[藍橋杯 2019 省 B] 等差數列 題目描述 數學老師給小明出了一道等差數列求和的題目。但是粗心的小明忘記了一部分的數列&#xff0c;只記得其中 N N N 個整數。 現在給出這 N N N 個整數&#xff0c;小明想知道包含這 N N N 個整數的最短的等差數列有幾項&#xff1f; 輸…

deep learning with pytorch(一)

1.create a basic nerual network model with pytorch 數據集 Iris UCI Machine Learning Repository fully connected 目標:創建從輸入層的代碼開始&#xff0c;向前移動到隱藏層&#xff0c;最后到輸出層 # %% import torch import torch.nn as nn import torch.nn.funct…

【大數據】詳細講解

大數據 0. 前言1. 大數據的5V特征2. 大數據技術3. 大數據分析4. 大數據應用5. 失效風險與挑戰 0. 前言 大數據是一個涉及非常龐大和復雜數據集的領域&#xff0c;這些數據集因其規模和復雜性而難以使用傳統數據處理軟件進行有效處理。在講解大數據之前&#xff0c;我們首先需要…

LeetCode26 刪除有序數組中的重復項

題目 給你一個 非嚴格遞增排列 的數組 nums &#xff0c;請你原地刪除重復出現的元素&#xff0c; 使每個元素 只出現一次 &#xff0c;返回刪除后數組的新長度。 元素的 相對順序 應該保持 一致 然后返回 nums 中唯一元素的個數。 示例 示例 1&#xff1a;輸入&#xff1a;num…

30天JS挑戰(第十四天)------數據的復制

第十四天挑戰(數據的復制) 地址&#xff1a;https://javascript30.com/ 所有內容均上傳至gitee&#xff0c;答案不唯一&#xff0c;僅代表本人思路 中文詳解&#xff1a;https://github.com/soyaine/JavaScript30 該詳解是Soyaine及其團隊整理編撰的&#xff0c;是對源代碼…

后端開發技術面試指南

工作10多年&#xff0c;每年都會幫組里面試一些新同學校招社招的都有&#xff0c;下面我就從一個面試官的視角來給大家拆解一下如何淡然應對后端開發技術面試。 1.一面多為電話面試 (1)問七問八 ①簡歷要注重內容&#xff0c;形式上不丑沒有錯別字即可。之前收到過一個工作5…

經典語義分割(一)利用pytorch復現全卷積神經網絡FCN

經典語義分割(一)利用pytorch復現全卷積神經網絡FCN 這里選擇B站up主[霹靂吧啦Wz]根據pytorch官方torchvision模塊中實現的FCN源碼。 Github連接&#xff1a;FCN源碼 1 FCN模型搭建 1.1 FCN網絡圖 pytorch官方實現的FCN網絡圖&#xff0c;如下所示。 1.2 backbone FCN原…

為raspberrypi編譯bpftrace調試工具

基于eBPF的嵌入式應用調試 筆者之前寫過幾篇有關于使用eBPF調試Linux內核和應用的博客&#xff0c;其中提到&#xff0c;在嵌入式設備上使用BCC或bpftrace是不可行的&#xff1b;主要原因在于嵌入式設備的資源有限&#xff0c;而這兩個調試工具依賴python/clang/llvm等庫&…

Scratch 第十六課-彈珠臺游戲

第十六課-彈珠臺游戲 大家好&#xff0c;今天我們一起做一款彈珠臺scratch游戲&#xff0c;我們也可以叫它彈球游戲&#xff01;這款游戲在剛出來的時候非常火爆。小朋友們要認真學習下&#xff01; 這節課的學習目標 物體碰撞如何處理轉向問題。復習鍵盤對角色的控制方式。…

STL-內存的配置與釋放

STL-內存的配置與釋放 STL有兩級空間配置器&#xff0c;默認是使用第二級。第二級空間配置器會在某些情況下去調用第一級空間配置器。空間配置器都是在allocate函數內分配內存&#xff0c;在deallocate函數內釋放內存。 第一級空間配置器 第一級配置器只是對malloc函數和fre…

【自然語言處理】BitNet b1.58:1bit LLM時代

論文地址&#xff1a;https://arxiv.org/pdf/2402.17764.pdf 相關博客 【自然語言處理】BitNet b1.58&#xff1a;1bit LLM時代 【自然語言處理】【長文本處理】RMT&#xff1a;能處理長度超過一百萬token的Transformer 【自然語言處理】【大模型】MPT模型結構源碼解析(單機版)…

如何在 Mac 上成功輕松地恢復 Excel 文件

Microsoft Excel 的 Mac 版本始終略落后于 Windows 版本&#xff0c;這也許可以解釋為什么如此多的用戶渴望學習如何在 Mac 上恢復 Excel 文件。 但導致重要電子表格不可用的不僅僅是 Mac 版 Excel 的不完全穩定性。用戶有時會失去注意力并刪除錯誤的文件&#xff0c;存儲設備…

2024-03-03 c++

&#x1f338; MFC進度條控件 | Progress Control 1。新建MFC項目&#xff08;基于對話框、靜態庫&#xff09; 2。添加控件&#xff0c;刪除初始的3個多余控件 加1個progress control&#xff0c;修改其marquee為true&#xff0c;添加變量&#xff1a;變量名為test_progress。…

Angular基礎---HelloWorld---Day1

文章目錄 1. 創建Angular 項目2.對Angular架構的最基本了解3.創建并引用新的組件&#xff08;component&#xff09;4.對Angular架構新的認識&#xff08;多組件&#xff09;5.組件中業務邏輯文件的編輯&#xff08;ts文件&#xff09;6.標簽中屬性的綁定(1) ID的綁定(2) class…

String和String Builder

String和StringBuilder的區別 String類 String類代表字符串。java程序中所有字符串文字&#xff08;例如“abc”&#xff09;都被實現為此類的實例。 String類源碼是用final修飾的&#xff0c;它們的值在創建后不能被更改。字符串緩沖區支持可變字符串。 String對象是不可變…

STM32 (2)

1.stm32編程模型 將C語言程序燒錄到芯片中會存儲在單片機的flsah存儲器中&#xff0c;給芯片上電后&#xff0c;Flash中的程序會逐條進入到CPU中去執行&#xff0c;進而CPU去控制各種模塊&#xff08;即外設&#xff09;去實現各種功能。 2.寄存器和寄存器編程 CPU通過控制其…

Apache POI的簡單介紹與應用

介紹 Apache POI 是一個處理Miscrosoft Office各種文件格式的開源項目。我們可以使用 POI 在 Java 程序中對Miscrosoft Office各種文件進行讀寫操作。PS&#xff1a; 一般情況下&#xff0c;POI 都是用于操作 Excel 文件&#xff0c;如圖&#xff1a; Apache POI 的應用場景&…

SQL無列名注入

SQL無列名注入 ? 前段時間&#xff0c;隊里某位大佬發了一個關于sql注入無列名的文章&#xff0c;感覺好像很有用&#xff0c;特地研究下。 關于 information_schema 數據庫&#xff1a; ? 對于這一個庫&#xff0c;我所知曉的內容并不多&#xff0c;并且之前總結SQL注入的…

設計模式-橋接模式實踐案例

橋接模式&#xff08;Bridge Pattern&#xff09;是一種結構型設計模式&#xff0c;用于將抽象與實現分離&#xff0c;使它們可以獨立地變化。這種模式通過提供一個橋接結構&#xff0c;可以將實現接口的實現部分和抽象層中可變化的部分分離開來。 以下是一個使用 Java 實現橋…

【數據結構】_包裝類與泛型

目錄 1. 包裝類 1.1 基本數據類型和對應的包裝類 1.2 &#xff08;自動&#xff09;裝箱和&#xff08;自動&#xff09;拆箱 1.2.1 裝箱與拆箱 1.2.2 自動&#xff08;顯式&#xff09;裝箱與自動&#xff08;顯式&#xff09;拆箱 1.3 valueOf()方法 2. 泛型類 2.1 泛…