前言:在Apollo美研團隊的支持下,最近完成了Apollo推薦的Novatel PP7與我們的基站調試,在這里對Apollo的筆記做一個補充,希望以后的開發者不用在踩我們踩過的坑。
在自己調導航(https://blog.csdn.net/davidhopper/article/details/79999339)的過程中,發現apollo r2.5.0在某些地方還是有些問題,在這里,我做了補充,希望對大家有所幫助。如果有幫助,請留個言吧^_^。
1. 硬件連接:
要確定是否使用多線激光,如果使用了多線激光,那么在novatel上的DB26的接口一定要插上,並且將COM2接到工控機的COM2,數據傳輸給lidar。由於我的項目沒有用到lidar,所以沒有用到DB26的線。連接好電源,我這里用的是12V,+VIN_A與+VIN_B接+12V,兩根-VIN接地。Novatel pp7的ANT1與ANT2連接到天線,Novatel上的Micro B接口連接到USB。如下圖:


2. Novatel PP7 固件配置
連接完成后上電。在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 minicom
安裝完畢后,設置minicom
$ sudo minicom -s
選擇Serial port setup,然后將修改Serial Device修改為:/dev/ttyUSB2,按回車確認。Hardware Flow Control選項改為No。回車退出,選擇Exit from Minicom退出。
注意:這里選擇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,其他不選,否則校驗不能通過,會收不到數據。
