robot pose ekf使用遇到的問題

2021-08-17 07:43:18 字數 2477 閱讀 6309

在配置ros導航包時,使用robot_pose_ekf包進行imu,編碼器,視覺里程計三者的融合(起碼兩個),用來精確機械人的位姿資訊.

關於robot_pose_ekf要訂閱哪些話題,以及因為它的使用tf樹如何調整,參見需要努力的阿蒙.

在上面的配置好以後,執行該包的launch檔案,發現會報錯:covariance specified for measurement on topic *** is zero和

filter time older than *** message buffer.wiki 上也有寫,但沒說怎麼解決.意思就是發布兩個感測器資訊的時候,都需要帶有乙個協方差矩陣,為什麼,這是擴充套件卡爾曼濾波的 原因,我暫時也不懂.

解決方法:我用的是型號為razor_imu_9dof的imu,它有官方提供的軟體包,會帶有covariance.編碼器所得里程計方面,我是直接用的turtlebot裡面的矩陣.在turtlebot包裡,如下圖路徑中,create_node包裡的covariance中,定義了幾個矩陣.

然後在我們的工作空間中的導航包裡的發布odom訊息的原始檔中,如下圖路徑,使用這個矩陣.

這個矩陣有兩種,分機械人靜止和動起來的時候用,所以要在傳送odom的語句處新增判斷語句:

odom_pose_covariance = [1e-3, 0, 0, 0, 0, 0, 

0, 1e-3, 0, 0, 0, 0,

0, 0, 1e6, 0, 0, 0,

0, 0, 0, 1e6, 0, 0,

0, 0, 0, 0, 1e6, 0,

0, 0, 0, 0, 0, 1e3]

odom_pose_covariance2 = [1e-9, 0, 0, 0, 0, 0,

0, 1e-3, 1e-9, 0, 0, 0,

0, 0, 1e6, 0, 0, 0,

0, 0, 0, 1e6, 0, 0,

0, 0, 0, 0, 1e6, 0,

0, 0, 0, 0, 0, 1e-9]

odom_twist_covariance = [1e-3, 0, 0, 0, 0, 0,

0, 1e-3, 0, 0, 0, 0,

0, 0, 1e6, 0, 0, 0,

0, 0, 0, 1e6, 0, 0,

0, 0, 0, 0, 1e6, 0,

0, 0, 0, 0, 0, 1e3]

odom_twist_covariance2 = [1e-9, 0, 0, 0, 0, 0,

0, 1e-3, 1e-9, 0, 0, 0,

0, 0, 1e6, 0, 0, 0,

0, 0, 0, 1e6, 0, 0,

0, 0, 0, 0, 1e6, 0,

0, 0, 0, 0, 0, 1e-9]

if sensor_state.requested_right_velocity == 0 and \

sensor_state.requested_left_velocity == 0 and \

sensor_state.distance == 0:

odom.pose.covariance = odom_pose_covariance2

odom.twist.covariance = odom_twist_covariance2

else:

odom.pose.covariance = odom_pose_covariance

odom.twist.covariance = odom_twist_covariance

(這是turtlebot發布里程計的python原始碼中的語句.路徑在這裡:

sensor_state是用create_node包裡面的乙個訊息型別turtlebotsensorstate定義的.在我們的原始檔中要引用這種訊息型別,就牽扯到如何在乙個包中使用其他包裡的訊息型別,方法在這裡. )

但是我們並不應該用turtlebot 的判斷語句,直接訂閱上層發布的速度訊息,自己新增一條判斷上層規劃的速度指令即可.

現在我們得到了odom_combined訊息。想讓這個訊息被movebase使用,看看這裡怎麼使用。這裡主要是看rbx_bringup包裡提供的乙個節點:odom_ekf.py,很簡單,odom和odom_combined它們訊息型別是不同的,前者是geometry_msgs/twist,後者是geometry_msgs/posewithcovariancestamped ,兩者的區別:後者的內容是前者的一部分。odom_ekf.py就是將它們轉化用的。轉化後還要在發布融合資訊的launch檔案裡將odom_combined話題remap成odom_ekf.就可以給movebase使用啦~嚶嚶嚶~!

Android MediaMuxer使用遇到的問題

1.illegalstateexception問題 mediamuxer的使用必須嚴格遵循如下順序 addtrack start writesampledata stop release 如果有順序衝突或者多次呼叫start stop release,會導致illegalstateexception...

linux 使用遇坑

1.import tensorflow 出錯 已經安裝了tensorflow,但是import 還是出錯 出錯原因 tensorflo不支援python3.6以上版本,伺服器上的python是3.7版本的 使用 pip install python 3.5 安裝3.5版本的即可 2.jupyter ...

React Draggable元件使用時遇到的問題

最近使用react draggable來滿足專案上要進行 拖拽的要求,在使用過程中發現再第一次使用拖拽的時候位置是不對的,會跳到頁面的左上角也就是位置 0,0 很突然,後來大佬幫忙解決的問題出現在這個 我同時還是用了dom align來初始化第一次的位置,這個dom align使用了乙個引數,use...