1、设备硬件连接图
Ublox F9P接口包括串口×2(`UART1`和`UART2`),USB×1,SPI×1,DDC×1(兼容I2C)。这里共用到2个接口,`UART1`、`UART2`和USB 3选2即可,本文选择串口`UART1`和USB口。其中,Ublox通过`UART1`向PC端发送的`UBX-NAV-PVT`消息,包含时间、定位类型(单点/浮点/固定解)、定位结果(经纬高)等,基于ublox_driver已转换为`gnss_comm::GnssPVTSolnMsg`类型的消息,供用户图形化显示等用途。PC端通过USB口向UBlox发送RTCM消息,同时Ublox需要定时向Ntrip caster发送自身NMEA格式的概略坐标,该过程基于RTKLIB_2.4.3的`str2str`命令行程序实现。
下面介绍具体过程。
2、准备工作:利用u-center配置Ublox串口协议
如前所述,`UART1`用于UBlox向PC端发送`UBX-NAV-PVT`消息,而USB口用于PC端向Ublox发送RTCM数据和接收NMEA坐标,因此u-center主要用于配置这两个接口支持的协议和波特率等,使其分别能够发送和接收对应的消息。
windows下载并安装u-center。
ublox连接到PC端后,打开u-center,连接对应串口(如COM3),打开菜单栏View下的`Configuration View`,找到PRT(Ports)配置选项,按下图分别配置串口`UART1`和USB口,其中`UART1`的`Protocol out`要包括`UBX`,USB口的`Protocol in`要包括`RTCM3`,`Protocol out`要包括`NMEA`,配置完成后点击左下角send,使配置生效。
UART1串口:
USB串口:
3、Ubuntu下实现Ublox基于CORS服务的RTK
3.1 确定UART1和USB对应串口设备的端口
首先插入UART1对应的USB到PC,通过如下命令查看端口名称(通常为`/dev/ttyUSB0`)
sudo dmesg | grep tty
显示如下内容,最后一行包含了UART1对应串口设备的端口名称`ttyUSB0`
[41104.700737] cdc_acm 1-13:1.0: ttyACM1: USB ACM device
[41191.235474] usb 1-13: pl2303 converter now attached to ttyUSB0
[41252.076897] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
[41476.960420] usb 1-13: pl2303 converter now attached to ttyUSB0
同样地,插入USB对应的USB口到PC,获得USB对应串口设备的端口名称为`ttyACM0`(不同的设备可能不同,需要自行确认)。
3.2 安装并启动ublox_driver
安装过程详细见github的readme教程。
`UART1`连接到PC后,在`/config/driver_config.yaml`文件中正确填写对应的端口名称和波特率,波特率要与步骤2中ucenter配置的UART1的波特率一致:
input_serial_port: "/dev/ttyUSB0"
serial_baud_rate: 921600
启动ublox_driver,在ublox_driver的工作空间下启动一个终端(记为终端1),运行:
source ~/catkin_ws/devel/setup.bash
roslaunch ublox_driver ublox_driver.launch
在该路径下新开一个终端(记为终端2),运行:
source ~/catkin_ws/devel/setup.bash
rostopic list
查看是否有话题`/ublox_driver/receiver_pvt` ,如果有则运行:
rostopic echo /ublox_driver/receiver_pvt
正常情况下会输出一系列定位信息:
time:
week: 2307
tow: 213746.4
fix_type: 3
valid_fix: True
diff_soln: True
carr_soln: 0
num_sv: 11
latitude: 39.984473099999995
longitude: 116.34264909999999
altitude: 57.045
height_msl: 65.741
h_acc: 5.739
v_acc: 3.087
p_dop: 4.2700000000000005
vel_n: -0.20800000000000002
vel_e: 0.215
vel_d: 0.124
vel_acc: 0.75
---
其中,`carr_soln`表示定位解的类型, `carr_soln: 0`表示单点定位, `carr_soln: 1`表示RTK浮点解, `carr_soln: 2`表示RTK固定解。
3.3 使用RTKLIB的str2str接入CORS服务
下载并编译RTKLIB_2.4.3的`str2str`命令行程序,新开一个终端(记为终端3),运行:
git clone https://github.com/tomojitakasu/RTKLIB.git
cd RTKLIB/
git checkout rtklib_2.4.3
cd app/consapp/str2str/gcc/
make
在当前路径下运行:
./str2str -in ntrip://${NTRIP_SITE}:${NTRIP_PORT}/${MOUNT_POINT} -b 1 -out serial://${SERIAL_PORT}:${SERIAL_BAUD_RATE}
说明:上述命令行仅为示例,具体内容根据自身需要替换。其中:
NTRIP_SITE:CORS帐号IP地址,如rtk.ntrip.qxwz.com
NTRIP_PORT:CORS帐号端口,如8001
MOUNT_POINT:CORS帐号挂载点,如AUTO
SERIAL_PORT:将RTCM数据输出给的串口设备,本例中为ttyACM0
SERIAL_BAUD_RATE:串口设备的波特率,波特率要与步骤2中ucenter配置USB的波特率一致(通常USB串口的波特率并不特别指定,默认与UART1一致)
例如:
./str2str -in ntrip://usernamexxx:password@rtk.ntrip.qxwz.com:8001/AUTO -b 1 -out serial://ttyACM0:921600
等待接通服务,并查看终端2中的`carr_soln`是否从0变为了2,当其值为2时,表明已经获得了RTK固定解。
说明:这里`-b 1`的作用是定时将输出流的数据返回给输入流,这里输出流是指Ublox USB串口输出的NMEA概略坐标,输入流是指ntrip caster发送的RTCM数据。具体参考RTKLIB#issue。