[TOC]
此仓库是开源软件包的实现,GraphGNSSLib 利用因子图优化(FGO)来执行GNSS定位和实时动态(RTK)定位.在这个软件包中,历史和当前时期的测量结果被结构化为因子图,然后通过非线性优化进行求解。该软件包基于C++,与机器人操作系统(ROS)平台兼容。同时,该软件包结合了RTKLIB (version: 2.4.3 b33) 去读取解析 RINEX 文件. 机器人领域的用户可以很容易地访问全球导航卫星系统的原始数据,以便进一步研究。
重要提示:
- GNSS Positioning方法基于FGO的伪距和多普勒测量的组合来估计全球导航卫星卫星系统接收器的位置。
- GNSS-RTK Positioning方法基于双差伪距、载波相位和使用FGO的多普勒测量的组合来估计GNSS接收器的浮点解。最后,使用LAMBDA算法模糊性固定。
作者: Weisong Wen, Li-ta Hsu from the Intelligent Positioning and Navigation Laboratory, The Hong Kong Polytechnic University.
相关论文: (代码中的算法并不和论文完全一致)
- Wen, W., & Hsu, L. T. (2021, May). Towards robust GNSS positioning and Real-time kinematic using factor graph optimization. In 2021 IEEE International Conference on Robotics and Automation (ICRA) (pp. 5884-5890). IEEE.
- Wen, W., Zhang, G., & Hsu, L. T. (2021). GNSS outlier mitigation via graduated non-convexity factor graph optimization. IEEE Transactions on Vehicular Technology, 71(1), 297-310.
- Zhong, Y., Wen, W., Ng, H. F., Bai, X., & Hsu, L. T. (2022, September). Real-time Factor Graph Optimization Aided by Graduated Non-convexity Based Outlier Mitigation for Smartphone Decimeter Challenge. In Proceedings of the 35th International Technical Meeting of the Satellite Division of The Institute of Navigation (ION GNSS+ 2022) (pp. 2339-2348).
如果你用GraphGNSSLib做学术研究,请引用我们的论文 论文
GraphGNSSLib执行流程, 更多信息请参考manual和论文.如果你不熟悉ROS,我们强烈推荐推荐你用我们的Docker容器来使用GraphGNSSLib,具体见下文
Ubuntu 64-bit 16.04, ROS Kinetic. ROS Installation. 我们只在 Ubuntu 16.04 with ROS Kinetic环境中测试过。
请按照下面的步骤安装Ceres-solver,而不是用最新版的。
Step 1: 下载与GraphGNSSLib兼容的 Ceres-solver
Step 2: make and install
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev
# BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# make Ceres-solver
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver
sudo make -j4
sudo make test
sudo make install
sudo apt-get install ros-kinetic-novatel-msgs
克隆这个仓库和catkin_make:
mkdir GraphGNSSLib/src
cd ~/GraphGNSSLib/src
mkdir result
git clone https://github.com/weisongwen/GraphGNSSLib.git
cd ../
# if you fail in the last catkin_make, please source and catkin_make again
catkin_make
source ~/GraphGNSSLib/devel/setup.bash
catkin_make
(如果你这一步失败了,尝试去用其它的有纯净操作系统的电脑或重新安装Ubuntu和ROS)
3. 用 UrbanNav数据集执行FGO的GNSS定位
在香港TST附件采集的动态数据验证通过FGO的GNSS定位
-
GPS second span: 46701 to 47185
-
卫星系统:GPS/BeiDou
-
窗口大小: Batch
-
使用的测量值: 双差伪距、载波相位、多普勒
-
默认结果文件
~/GraphGNSSLib/trajectory_psr_dop_fusion.csv
请确保在rtklib.h中启用以下内容:
#define RTK_FGO 0
-
Solution 1 to run the GNSS positioning Demo
source ~/GraphGNSSLib/devel/setup.bash # read GNSS raw data and publish as ROS topic # we provide several datasets, enjoy it! roslaunch global_fusion dataublox_TST20190428.launch # run pseudorange and doppler fusion roslaunch global_fusion psr_doppler_fusion.launch
在香港TST附件采集的静态数据验证通过FGO的GNSS定位
-
GPS时间跨度: 270149 to 270306
-
卫星系统: GPS/BeiDou
-
窗口大小: Batch
-
使用的测量值: 双差伪距、载波相位、多普勒
-
默认结果文件
~/GraphGNSSLib/FGO_trajectoryllh_pdrtk.csv
请确保在rtklib.h中启用以下内容:
#define RTK_FGO 1
-
Solution 1 to run the RTK-FGO Demo
source ~/GraphGNSSLib/devel/setup.bash # read GNSS raw data and publish as ROS topic roslaunch global_fusion dataublox_TST20200603.launch # run GNSS RTK roslaunch global_fusion psr_doppler_car_rtk.launch
想用docker运行GraphGNSSLib,请先确保 docker已经安装在你的电脑上。如果你想用docker运行global_fusion:
cd ~/catkin_ws/src/GraphGNSSLib/docker
make build
sudo -E ./start.bash #Do not delete " -E "
source devel/setup.bash
# run pseudorange and doppler fusion
roslaunch global_fusion psr_doppler_fusion.launch
# you should open another ternimal to enter the docker.
# read GNSS raw data and publish as ROS topic
roslaunch global_fusion dataublox_TST20190428.launch
除此以外,这个视频演示了如何用建立GraphGNSSLib的docker文件
如果你想重启容器,请先将他关闭:
sudo ./stop.bash
#then restart it
sudo -E ./start.bash
目录 ~/shared_dir 用来连接容器和主机。在容器中位于 ~/graph1/shared_dir ,你可以下载代码到 ~/shared_dir ,并且在容器中编译(推荐给那些有兴趣更改源代码的人)。
我们用 Ceres-solver实现非线性优化和 RTKLIB解析GNSS数据,有些函数源自 VINS-mono。rviz_satellite用于可视化。如果有做的不合适的地方,请与我联系:17902061r@connect.polyu.hk (Weisong WEN),非常感谢Mr. Zhong Yihan的维护
源代码基于GPLv3许可,我们依然在为提高代码可靠性工作. 有任何技术问题,可联系Weisong Wen17902061r@connect.polyu.hk 。有任何商业问题,可联系Li-ta Hsu lt.hsu@polyu.edu.hk.