【Apollo】【driver】【gnss】模組除錯與分析
環境:apollo 2.5 + ubuntu16.04 + docker
編譯
gnss module 程式碼所在路徑/apollo/modules/drivers/gnss
編譯方式:[email protected]_dev_docker:/apollo$ ./apollo.sh build_gnss
注意事項:
- 編譯指令碼
apollo.sh
裡面的build選項並不是編譯所有的元件,只是用bazel編譯所有bazel的targe
編譯出的庫檔案所在目錄也不是在/apollo/bazel-out
下面,而是在/home/tmp/ros
裡面,即gnss module編譯沒有使用bazel,還是用catkin_make編譯的。 - 修改proto檔案下面的檔案,給apollo新增一款gps裝置(司南),新增了
message ComNavSerial {}
{
optional bytes device = 1; // Something like "/dev/ttyXXX".
optional int32 baud_rate = 2 [default = 9600];
// In general, we assumes no parity, 8 data bits, 1 stop bit, no
// handshaking, break detection enabled. If not, add more fields here.
}
就發現在raw_stream.cpp
中找不到config::Stream::kComNavSerial
經過多方嘗試,最後將名字改成Comnav
後就可以了.應該是protoBuf的語法問題.
執行
執行gnss driver可以通過dreamview裡面的modules control ->modules ->gps,如下圖
執行時遇到的問題
- apollo.drivers.gnss.config.Config: 13:15: Expected integer, got: x 錯誤
[libprotobuf ERROR google/protobuf/text_format.cc:287 ] Error parsing text-format apollo.drivers.gnss.config.Config: 13:15: Expected integer, got: x
[ERROR] [1527064646.633720142]: Init stream nodelet failed.
[ERROR] [1527064646.633736056]: Init stream nodelet failed.
[libprotobuf ERROR google/protobuf/text_format.cc:287] Error parsing text-format apollo.drivers.gnss.config.Config: 13:15: Expected integer, got: x
[FATAL] [1527064646.976518327]: Failed to load config file: /home/tmp/ros/share/gnss_driver/conf/gnss_conf_mkz.txt
[ERROR] [1527064646.976596669]: Init parser nodelet failed.
[ERROR] [1527064646.976669424]: Init parser nodelet failed.
執行./apollo.sh build
命令會將原始的gnss_conf_mkz.txt拷貝到/home/tmp/ros/share/gnss_driver/conf/
目錄下.這時執行./apollo.sh build_gnss
也不會將/modules/drivers/gnss/conf/gnss_conf_mkz.txt
替換掉原始的配置檔案的拷貝版,因為新拷貝檔案的修改時間最新,需要手動修改下/modules/drivers/gnss/conf/gnss_conf_mkz.txt
加個空格什麼的,讓這個檔案的日期大於新拷貝檔案.再執行./apollo.sh build_gnss
就替換掉了.
stream nodelete無法退出
在dreamview頁面無法關閉GPS,然後檢視rosnode list
發現stream程序無法退出,就用sudo kill -9
手動給幹掉了.不論輸入的gps是什麼,總是顯示美國的地點
參考docs/howto/how_to_use_apollo_2.5_navigation_mode_cn.md
裡面的4.3,在
/modules/common/data/global_flagfile.txt
新增上--local_utm_zone_id=50
(北京).修改完後不需要重新編譯,因為在輸出目錄中的txt檔案都是軟連結原始檔案
然後參考docs/quickstart/apollo_software_installation_guide_cn.md
裡面的步驟3 修改zone. 修改完後需要重新編譯
分析
gnss driver有4個nodelete,stream_nodelet,parser_nodelet,rtcm_parser_nodelet,tf_broadcaster_nodelet。
- stream_nodelet
用於計算機與gps裝置的通訊,其中的通訊方式有:Ntrip,Serial,Tcp,Udp。將獲取到的資料通過topic傳送出來,topic如下:
/apollo/sensor/gnss/raw_data //data stream data
/apollo/sensor/gnss/rtcm_data //rtk_from stream data
/apollo/sensor/gnss/stream_status
- parser_nodelet
用來解析資料,可解析的資料協議為NOVATEL。訂閱/apollo/sensor/gnss/raw_data
傳送出來的資料並進行解析。
發出的topic如下:
/apollo/sensor/gnss/best_pose
/apollo/sensor/gnss/corrected_imu
/apollo/sensor/gnss/gnss_status
/apollo/sensor/gnss/imu
/apollo/sensor/gnss/ins_stat
/apollo/sensor/gnss/ins_status
/apollo/sensor/gnss/odometry
/apollo/sensor/gnss/rtk_eph
/apollo/sensor/gnss/rtk_obs
此nodelet解析協議可擴充套件,擴充套件方式:
1. 在gnss_conf_mkz.txt
中修改data的format屬性
2. 在data_parser.cpp
中新增程式碼,例如RTCM_V3
3. 在CMakeLists.txt
中新增parser_nodelet target的原始檔
4. 其餘的就需要實現類似rtcm3_parser.cpp
檔案裡面的內容
Parser *create_parser(config::Stream::Format format, bool is_base_station = false) {
switch (format) {
case config::Stream::NOVATEL_BINARY:
return Parser::create_novatel();
case config::Stream::RTCM_V3:
return Parser::create_rtcm_v3();
default:
return nullptr;
}
}
- rtcm_parser_nodelet
用來解析資料,可解析的資料協議為RTCM3。訂閱/apollo/sensor/gnss/rtcm_data
傳送出來的資料並進行解析。
發出的topic如下:
/apollo/sensor/gnss/rtk_eph
/apollo/sensor/gnss/rtk_obs
- tf_broadcaster_nodelet
訂閱/apollo/sensor/gnss/odometry
資料並將轉化成tf資料發出來。
配置檔案
gnss_conf_mkz.txt分成兩部分,一部分是資料來源,傳送;另一部分是需要下發的設定gps裝置命令。如下:
#/apollo/sensor/gnss/raw_data 資料來源
data {
format: NOVATEL_BINARY
serial {
device: "/dev/ttyUSB0"
baud_rate: 115200
}
}
#/apollo/sensor/gnss/rtcm_data 資料來源
rtk_from {
format: RTCM_V3
ntrip {
address: "x.x.x.x"
port: x
mount_point: "x"
user: "x"
password: "x"
timeout_s: x
}
}
#將rtk資料再次轉發
rtk_to {
format: NOVATEL_BINARY
serial {
device: "/dev/ttyUSB1"
baud_rate: 115200
}
}
#需不需要將資料再次轉發,和rtk_to相關
rtk_solution_type: RTK_RECEIVER_SOLUTION
###下發gps裝置的控制命令
login_commands: "UNLOGALL THISPORT\r\n"
login_commands: "SETIMUTOANTOFFSET 0.00 1.10866 1.14165 0.05 0.05 0.08\r\n"
login_commands: "SETINSOFFSET 0 0 0\r\n"
login_commands: "LOG COM2 GPRMC ONTIME 1.0 0.25\r\n"
login_commands: "EVENTOUTCONTROL MARK2 ENABLE POSITIVE 999999990 10\r\n"
login_commands: "EVENTOUTCONTROL MARK1 ENABLE POSITIVE 500000000 500000000\r\n"
login_commands: "LOG NCOM1 GPGGA ONTIME 1.0\r\n"
login_commands: "log bestgnssposb ontime 0.5\r\n"
login_commands: "log bestgnssvelb ontime 0.5\r\n"
login_commands: "log bestposb ontime 0.5\r\n"
login_commands: "log INSPVAXB ontime 0.5\r\n"
login_commands: "log INSPVASB ontime 0.01\r\n"
login_commands: "log CORRIMUDATASB ontime 0.01\r\n"
login_commands: "log INSCOVSB ontime 1\r\n"
login_commands: "log mark1pvab onnew\r\n"
login_commands: "log imutoantoffsetsb once\r\n"
login_commands: "log vehiclebodyrotationb onchanged\r\n"
logout_commands: "EVENTOUTCONTROL MARK2 DISABLE\r\n"
logout_commands: "EVENTOUTCONTROL MARK1 DISABLE\r\n"
詳細內容可以參考檔案:
docs/quickstart/apollo_software_installation_guide_cn.md
modules/drivers/gnss/proto/config.proto
非常好理解
proto
以下三個msg都只在MSF Localization演算法中使用
msg | 位置 | 格式 | topic | 提供 |
---|---|---|---|---|
GnssBestPose | gnss_best_pose.proto | GPS中的BESTPOSA | /apollo/sensor/gnss/best_pose | 司南 novetal |
EpochObservation | gnss_raw_observation.proto | 未知 | /apollo/sensor/gnss/rtk_obs | novetal |
GnssEphemeris | gnss_raw_observation.proto | 未知 | /apollo/sensor/gnss/rtk_eph | novetal |
相關推薦
【Apollo】【driver】【gnss】模組除錯與分析
環境:apollo 2.5 + ubuntu16.04 + docker 編譯 gnss module 程式碼所在路徑/apollo/modules/drivers/gnss 編譯方式:[email protected]_dev_docker
JSP Tomcat8.0運行連接池時發生異常【AbstractMethodError oracle.jdbc.driver.T4CConnection.isValid(I)Z】
jdk1.7 oracle read 2.0 ati conn pan span valid 原創 2015年12月28日 11:38:01 2004 一、Tomcat8.0運行連接池時發生異常: AbstractMethodError or
【GNSS】科研利器,技巧
乾貨,你要的科研利器,都幫你整理好啦! 原創: 科研利器 iNature 10月17日 做科研那麼賣力的你,怎麼能少了以下這些科研利器?趕快收入囊中吧,歡迎分享給你的小夥伴們,一起提高科研效率哦! ① 不到 500K 的文獻全文秒下神器
【GNSS】GDOP,PDOP,HDOP,VDOP,TDOP
PDOP:位置精度因子(Position Dilution of Precision),直譯為“精度強弱度”,通常翻譯為“相對誤差”。具體含
【GNSS】衛星星下點軌跡Matlab模擬
1.地球靜止軌道衛星,傾角分別為0,30,90度。 clc; clear; t = 0:1:6; we = 360/24; u = we*t; i = 30; fai = asind( sind(i)*sind(u)
【GNSS】【Matlab】 XYZ_2_BLH BLH_2_XYZ
function [X,Y,Z]=BLH2xyz(B,L,H) %transform the (B L H) into (X Y Z) under the WGS84 coordinate system a=6378140.00; %a=6378137.00;
【GNSS】GFZRNX 常用的檔案編輯命令
GFZRNX 是由德國波茲坦地學研究中心(GFZ)開發的一款用於 GNSS 資料預處理(適用於 RINEX 2 與 3 版本格式)的程式,支援對 RINEX 格式的觀測資料檔案(Obs)、廣播星曆檔案(Nav)和氣象
【GNSS】什麼是RAIM
RAIM是Receiver Autonomous Integrity Monitoring的縮寫,即接收機自體完好性監控。根據使用者接收機的多餘觀測值監測使用者定位結果的完好性,其目的是在導航過程中檢測出發生故障的衛星,並保障導航定位精度。 一般地說,要求可見衛星數5顆以上才可進行GPS完備
【GNSS】PPP with Smartphones: Are We There Yet?
During Google’s I/O 2016 conference held in May 2016, Google announced that raw GNSS measurements from smartphones running the Android N op
【GNSS】RTK 與PPK
如果要聊無人機的空間定位技術,現在提到RTK(實時差分動態定位技術),相信大家都不陌生。從大疆創新公司去年推出的M600PRO到今年的M200系列都配置了RTK定位裝置。 正是因為RTK賦予了無人機實時獲取高精度空間位置資訊的能力,無人機在未來的行業應用中將更精準的完成更復雜的任務。這也是區
【GNSS】RTK與DGNSS區別
差分GPS定位原理 它使用一臺 GPS基準接收機(基準站)和一臺使用者接收機(移動站),利用實時或事後處理技術,就可以使使用者測量時消去公共的誤差源 —衛星軌道誤差、衛星鐘差、大氣延時、多路徑效應。特別提出的是,當GPS工作衛星升空時,美國政府實行了SA政策。使衛星的軌道
【GNSS】【GAMP】【RTKLIB】 關於衛星PRN號,衛星number號的轉換與使用
rinex.c /* read rinex obs data body */ 1.讀取觀測資料,readrnxobsb(FILE *fp,const char *opt,double ver,char tobs[][MAXOBSTYPE][4],int *flag,obs
【GNSS】【數學】阿倫方差的理解
allan 方差(阿倫方差)是David AIlan於1966年提出的,最初該方法是用於分析振盪器的相位和頻率不穩定性,高穩定度振盪器的頻率穩定度的時域表徵目前均採用Allan方差。由於陀螺等慣性感測器本身也具有振盪器的特徵,因此該方法隨後被廣泛應用於各種慣性感測
11、自學——Linux的學習進度與任務【文件系統文件權限】
file fin 沒有權限 finger office ref nbsp 其他 ont 文件系統文件權限 文件系統文件權限: 三類用戶: 屬主:owner, u 屬組:group, g 其它:other, o
重磅優惠套餐:CCNA零基礎實驗+CCNP路由模塊【晁海江思科全部課程】
ccnaCCNA零基礎實驗+CCNP路由模塊【晁海江思科全部課程】http://edu.51cto.com/pack/view/id-1071.html (等待官方審核)套餐介紹:CCNA+CCNP全新套餐,5折優惠! 鑒於很多學員詢問如何購買我的全部思科課程?是否可以享受比較大的優惠?故組建此優惠套餐
【C語言天天練(二)】statickeyword
修飾 weight () main函數 class code keyword spa tail 引言: statickeyword不僅能夠修飾變量。並且能夠修飾函數。了解它的使用方法,不僅對閱讀別人的代碼有幫助,也有助於自己寫出更加健壯的
【原創 Hadoop&Spark 動手實踐 3】Hadoop2.7.3 MapReduce理論與動手實踐
pack license 讀取 rgs 理論 程序員開發 -s 接口 pri 開始聊MapReduce,MapReduce是Hadoop的計算框架,我學Hadoop是從Hive開始入手,再到hdfs,當我學習hdfs時候,就感覺到hdfs和mapreduce關系的緊密。這個
重新編譯Nginx指導手冊【修復靜態編譯Openssl的Nginx漏洞 】(轉)
snippets asset 替換 業務需求 tps eight nbsp 出了 sof 1. 概述 當前爆出了Openssl漏洞,會泄露隱私信息,涉及的機器較多,環境迥異,導致修復方案都有所不同。不少服務器使用的Nginx,是靜態編譯opensssl,直接將open
【算法(第4版)】筆記
bsp .com 二維 一個數 數組 png 初始 算法 nbsp 1、在 Java 程序中創建一個數組需要三步: 聲明數組的名字和類型; 創建數組; 初始化數組元素。 2、典型的數組處理代碼。 3、起別名。
【原創 Hadoop&Spark 動手實踐 5】Spark 基礎入門,集群搭建以及Spark Shell
min util man 操作 because tro txt library all Spark 基礎入門,集群搭建以及Spark Shell 主要借助Spark基礎的PPT,再加上實際的動手操作來加強概念的理解和實踐。