前言:在Apollo美研團隊的支持下,最近完成了Apollo推薦的Novatel PP7與咱們的基站調試,在這裏對Apollo的筆記作一個補充,但願之後的開發者不用在踩咱們踩過的坑。git
在本身調導航(https://blog.csdn.net/davidhopper/article/details/79999339)的過程當中,發現apollo r2.5.0在某些地方仍是有些問題,在這裏,我作了補充,但願對你們有所幫助。若是有幫助,請留個言吧^_^。github
1. 硬件鏈接:docker
要肯定是否使用多線激光,若是使用了多線激光,那麼在novatel上的DB26的接口必定要插上,而且將COM2接到工控機的COM2,數據傳輸給lidar。因爲個人項目沒有用到lidar,因此沒有用到DB26的線。鏈接好電源,我這裏用的是12V,+VIN_A與+VIN_B接+12V,兩根-VIN接地。Novatel pp7的ANT1與ANT2鏈接到天線,Novatel上的Micro B接口鏈接到USB。以下圖:bootstrap
2. Novatel PP7 固件配置bash
鏈接完成後上電。在Ubuntu14.04中須要安裝一個Novatel的驅動(https://www.novatel.com/support/info/documents/809),我的認爲是U轉串的驅動。將Novatel鏈接到電腦後。/dev下會多出:Serial, ttyUSB0, ttyUSB1與ttyUSB2。分別對應USB1,USB2,USB3。爲了配置Novatel PP7,須要安裝minicom服務器
$ sudo apt-get install minicomide
安裝完畢後,設置minicom測試
$ sudo minicom -sui
選擇Serial port setup,而後將修改Serial Device修改成:/dev/ttyUSB2,按回車確認。Hardware Flow Control選項改成No。回車退出,選擇Exit from Minicom退出。spa
注意:這裏選擇ttyUSB2是由於對應USB3。USB1對應novatel0,全部數據從novatel給IPC;USB2送基站信息,經過USB2送給novatel;USB3空着的;COM1空着的;COM2將GPRMC的信息(最基本的位置與時間信息)送給工控機,提供給多線lidar。
運行:
$ sudo minicom
這是會提示USB3。將https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/apollo_2_5_hardware_system_installation_guide_v1.md最下面的for pp6的內容逐行copy到minicom修改PP7固件,可是PP7集成了IMU,因此第三行不用copy。應爲PP6與PP7的固件有些不一樣,因此有些命令有些不一樣,須要燒進固件的內容整理以下:
WIFICONFIG STATE OFF #沒有wifi會報錯,不過不要緊。
UNLOGALL THISPORT
INSCOMMAND ENABLE
SETIMUORIENTATION 5
ALIGNMENTMODE AUTOMATIC
VEHICLEBODYROTATION 0 0 0
SERIALCONFIG COM1 9600 N 8 1 N OFF #與PP6不一樣
SERIALCONFIG COM2 9600 N 8 1 N OFF #與PP6不一樣
INTERFACEMODE COM1 NOVATEL NOVATEL ON
PPSCONTROL ENABLE POSITIVE 1.0 10000
MARKCONTROL MARK1 ENABLE POSITIVE
EVENTINCONTROL MARK1 ENABLE POSITIVE 0 2
interfacemode usb2 rtcmv3 none off
rtksource auto any
psrdiffsource auto any
SETINSTRANSLATION ANT1 -0.75 -0.635 1.203 0.1 0.1 0.1 # 設置IMU到ANT1的xyz以及不肯定度。(兩個天線都設置計算更快。) #與pp6不一樣
SETINSTRANSLATION ANT2 0.75 -0.635 1.203 0.1 0.1 0.1 # 設置IMU到ANT2的xyz以及不肯定度。 (裝車時測試時,須要測試這兩條語句) #與pp6不一樣
SETINSOFFSET 0 0 0
EVENTOUTCONTROL MARK2 ENABLE POSITIVE 999999990 10
EVENTOUTCONTROL MARK1 ENABLE POSITIVE 500000000 500000000
LOG COM2 GPRMC ONTIME 1.0 0.25
LOG USB1 GPGGA ONTIME 1.0
log USB1 bestgnssposb ontime 1
log USB1 bestgnssvelb ontime 1
log USB1 bestposb ontime 1
log USB1 INSPVAXB ontime 1
log USB1 INSPVASB ontime 0.01
log USB1 CORRIMUDATASB ontime 0.01
log USB1 RAWIMUSXB onnew 0 0
log USB1 mark1pvab onnew
log USB1 rangeb ontime 1
log USB1 bdsephemerisb
log USB1 gpsephemb
log USB1 gloephemerisb
log USB1 bdsephemerisb ontime 15
log USB1 gpsephemb ontime 15
log USB1 gloephemerisb ontime 15
log USB1 imutoantoffsetsb once
log USB1 vehiclebodyrotationb onchanged
SAVECONFIG
最後設置完畢。
3. Apollo與基站鏈接
首先,你要確認你的novatel PP7是否設置完成;而後。你要確認你的基站是否支持STCM 3/32與NTRIP協議(若是不支持Apollo是沒法訪問的);接下來,確認你的基站是否能夠鏈接到某個服務器,而且能夠經過IP,PORT,mountpoint(基站名稱),username,password(個人基站能夠鏈接,因此不能夠我也不知道該怎樣作,但能夠肯定,你須要配置一個4G的網關,將你的基站內容發到你的服務器上,具體設置不詳,能夠與Apollo溝通)。若是能夠,那麼你須要在apollo/modules/calibration/data/設置你的車型,若是你只是要測試,能夠用Apollo自帶的車型mkz,在apollo/modules/calibration/data/mkz8/gnss_params/gnss_conf_mkz.txt中(若是沒有這個文件你可能在Apollo2.5 master分支下,在我這個時間點,建議用r2.5.0分支),修改:
rtk_from {
format: RTCM_V3
ntrip {
address: "x.x.x.x"
port: x
mount_point: "x"
user: "x"
password: "x"
timeout_s: x
}
}
將IP,PORT,mountpoint(基站名稱),username,password填入你對應的服務器信息。timeout_s,Apollo建議填5。
在/etc/udev/rules.d/中添加個人網盤中的99-usbtty.rules,默認下載到/Downloads目錄,docker外運行:
$ sudo cp ~/Downloads/99-usbtty.rules /etc/udev/rules.d/
$ sudo chmod 755 /etc/udev/rules.d/99-usbtty.rules
$ sudo service udev restart
而後在docker中運行:
$ cd /apollo
$ bash apollo.sh build
$ ./scripts/bootstrap.sh
在dreamviewer中右上角選車型,而後gnss_conf_mkz.txt文件就會自動copy到docker內的/home/tmp/ros/share/gnss_driver/conf/gnss_conf_mkz.txt,選定車型後能夠用cat檢查一下上述車型是否被修改。最後在docker內檢查一下log:
$ tail -f data/log/gnss_driver.out
若是base station id有東西,並且solution是NARROW_INT說明基站已經鏈接。這時,dreamviewerGPS會顯示GOOD、WARN或ERROR。WARN表示IMU爲校準,ERROR表示信號很差。
後記:在我接下調車的過程當中,我發現若是我用apollo/modules/calibration/data/mkz8/gnss_params/gnss_conf.pb.txt,做爲我車型的gnss配置文件,在/home/tmp/ros/share/gnss_driver/conf/沒有拷貝。即便我自行拷貝,發如今執行tail -f data/log/gnss_driver.out ,發現仍是會報錯,提示:[FATAL] [1534827881.015182224]: Failed to load config file: /home/tmp/ros/share/gnss_driver/conf/gnss_conf.pb.txt錯誤。因此我在真正調車的時候仍是採用gnss_conf_mkz.txt配置文件。但爲了跑導航模式,須要對一些文件進行修改,以下:
(1) 在apollo/modules/calibration/data/mkz8/gnss_params/gnss_conf_mkz.txt文件中,第30行下面添加(爲了跑pp7):
imu_type: ADIS16488
proj4_text: "+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
tf {
frame_id: "world"
child_frame_id: "novatel"
}
(2) 修改apollo/modules/drivers/gnss/launch/gnss_driver.launch第三行,改成:
<arg name="proj4_text" default="+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs " />
以前爲utm +zone=10改成utm +zone=49,utm區域請自行查找。
(3) 修改apollo/modules/calibration/data/hnacar/gnss_params/gnss_driver.launch第三行,改成:
<arg name="proj4_text" default="+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs " />
以前爲utm +zone=10改成utm +zone=49,utm區域請自行查找。
修改後就能夠跑導航了。導航的連接爲:https://blog.csdn.net/davidhopper/article/details/79999339
4. 注意:
Novatel固件怎樣恢復出場設置?或者取消設置?
答:在minicom內輸入FRESET,目前取消設置也只能先這樣作。
在寫novatel固件的過程當中出現:log USB1 INSPVAXB ontime 1 <ERROR:Maximum number of logs exceeded. No new log added. [USB1],log寫滿了,怎樣處理?
答:進入minicom,先用log loglist查看全部的log,而後用unlog usb_30 xxx逐個刪除不用的log,最後SAVECONFIG。
調試基站用哪一個軟件能夠Apollo兼容?
答:用STRSVR軟件,親測可用。下載連接:https://pan.baidu.com/s/1DoEpRBPNxjyfILrf5ekxrA 密碼:s99l
設置這個軟件時須要注意,若是你的工控機鏈接的是基站,那麼(0) Input選Serial,(1) Output選NTRIP Server。若是你的工控機鏈接的是車輛測試,那麼(0) Input選NTRIP Client,(1) Output選Serial。單獨在車上測試基站時,在(0) Input選NTRIP Client,其餘不選,不然校驗不能經過,會收不到數據。