如何在linux下编译RTKLIB(实时RTK程序rtkrcv)


欢迎关注个人公众号:导航员学习札记

前段时间看到rtklibexplorer发表的博客raspberry-pi-based-ppk-and-rtk-solutions-with-rtklib,该博客描述了如何在树莓派上用RTKLIB进行实时RTK,感兴趣的同学可以去看看(不过最近用国内网似乎上不了该作者的个人网站)。

对于带linux操作系统的开发板来说,整个流程其实基本是一致的。如果我们想在自己的开发板上利用RTKLIB跑实时RTK,第一步也是要编译RTKLIB,生成可执行文件。由于在linux系统下,一般使用makefile来进行编译,因此这篇文章主要是学习RTKLIB的makefile,以及尝试在linux环境下编译RTKLIB。

一、RTKLIB Demo5代码下载

RTKLIB Demo5是作者rtklibexplorer在原版RTKlib 2.4.3的一个拓展版本,该作者也在2022年谷歌智能手机分米级定位比赛中取得了第三名的成绩。这个版本的更新相比原版更加活跃,修复了原版上的一些bug,而且针对低成本接收机(如Ublox)进行了很多算法上的提升。

github地址:https://github.com/rtklibexplorer/RTKLIB/

二、RTKLIB的makefile

由于“rtkrcv”是RTKLIB做实时RTK的执行程序,因此以它为例子,学习RTKLIB的makefile。“rtkrcv”的makefile位于“RTKLIB-demo5\app\consapp\rtkrcv\gcc"文件夹中。

RTKLIB中的makefile都比较简单清晰,“rtkrcv” 的makefile文件包括了几个部分:

(1)变量定义

变量一般就是字符串,当makefile被执行时,其中的变量会扩展到相应的引用位置。比如在后面我要引用第一行定义的“BINDIR”变量,需要写成“$(BINDIR)”.

下面的变量定义包括:

  • "BINDIR"定义了安装可执行文件的路径,用在后面的“install”中,其实就是把可执行程序拷到这个文件夹
  • “SRC”定义了源文件路径
  • “CTARGET”定义了一些宏, gcc的-D选项可以定义宏,这里所定义的宏包括了是否打开trace、是否打开各个GNSS系统、使用多少个频段、预留多少个额外频段等
  • “CFLAGS ”则定义了一些gcc编译选项,比如-Wall表示打开所有warning,-I是加入头文件路径等
  • “LDLIBS ”告诉链接器要链接哪些库文件
# makefile for rtkrcv

BINDIR = /usr/local/bin
SRC    = ../../../../src

CTARGET= -DTRACE -DENAGLO -DENAQZS -DENACMP -DENAGAL -DENAIRN -DNFREQ=3 -DNEXOBS=3 -DSVR_REUSEADDR
#CTARGET= -DENAGLO -DENAQZS -DENACMP -DENAGAL -DENAIRN -DNFREQ=3 -DIERS_MODEL -DSVR_REUSEADDR

CFLAGS = -Wall -O3 -ansi -pedantic -Wno-unused-but-set-variable -I$(SRC) -I.. -DTRACE $(CTARGET) -g
LDLIBS  = -lm -lrt -lpthread
#LDLIBS  = ../../../lib/iers/gcc/iers.a -lm -lrt -lpthread

(2)可执行文件和中间目标文件定义

Makefile的第一个目标会被作为默认目标,下面第一行申明了一个“all”伪目标,后面的rtkrcv即为我们要生成的可执行文件(我们的最终目标)。

后面几行是rtkrcv所依赖的.o文件,这个例子里其实就是依赖了所有.o文件。LINUX下编译生成的.o文件就相当于Windows下的.obj文件,用于后续链接(link)生成可执行文件。

all        : rtkrcv
rtkrcv     : rtkrcv.o vt.o rtkcmn.o rtksvr.o rtkpos.o geoid.o solution.o lambda.o
rtkrcv     : sbas.o stream.o rcvraw.o rtcm.o preceph.o options.o pntpos.o ppp.o ppp_ar.o
rtkrcv     : novatel.o ublox.o crescent.o skytraq.o javad.o nvs.o binex.o
rtkrcv     : rt17.o ephemeris.o rinex.o ionex.o rtcm2.o rtcm3.o rtcm3e.o
rtkrcv     : tides.o septentrio.o swiftnav.o

(3)定义生成的.o文件及执行指令

这一部分定义了每个.o文件依赖的源文件和头文件,以及生成该.o文件的操作系统指令:

  • $(CC)为操作系统默认的C/C++编译器,比如在linux环境下可能是gcc,在windows环境可能是MSCV
  • -c表示只编译(compile)源文件但不链接
  • $(CFLAGS)变量则是最前面定义的指令。
rtkrcv.o   : ../rtkrcv.c
	$(CC) -c $(CFLAGS) ../rtkrcv.c
vt.o       : ../vt.c
	$(CC) -c $(CFLAGS) ../vt.c
rtkcmn.o   : $(SRC)/rtkcmn.c
	$(CC) -c $(CFLAGS) $(SRC)/rtkcmn.c
	
.......

rtkrcv.o   : $(SRC)/rtklib.h ../vt.h
rtkcmn.o   : $(SRC)/rtklib.h
.......

(4)安装
当输入“make install”后,会执行下面的指令,即将可行执行文件rtkrcv拷贝到最前面定义的$(BINDIR)路径下。

install:
	cp rtkrcv $(BINDIR)

(5)测试

输入“make test1”,“mak test2”,“make test3”会对应执行下面的指令。

test1:
	./rtkrcv -t 4 -m 52001 -t 4

test2:
	./rtkrcv -p 2105 -m 52001

test3:
	./rtkrcv -o ../rtk_pb.conf

(6)clean

每个makefile一般都有一个“clean”,通常是放在makefile的最后,用来清除。

输入“make clean”指令就会执行下面的命令,即删除所有文件。

clean:
	rm -f rtkrcv rtkrcv.exe rtkrcv.nav *.o *.out *.trace

至此,整个makefile文件我们就看完了。

三、编译rtkrcv

因为我手边没有板子,所以我就只编译一下,看看能否生成可执行文件rtkrcv,并不运行。有开发和运行环境的话,可以编译后直接运行rtkrcv,测试实际效果。实际测试,一般需要自己修改配置文件,比如输入、输出串口以及数据类型设置等。

编译之前,我先在windows电脑上安装了个ubuntu子系统,感兴趣的话可以参考这篇文章Windows10/11 三步安装wsl2 Ubuntu20.04(任意盘)

在默认方式下,输入make命令,make会自动在当前目录下寻找名字叫“makefile”的文件。所以我们将代码下载下来后,直接到“RTKLIB\app\consapp\rtkrcv\gcc\”文件夹下输入make指令即可。

在ubuntu命令行窗口输入如下命令:

git clone https://github.com/rtklibexplorer/RTKLIB.git
cd RTKLIB/app/consapp/rtkrcv/gcc
make

编译过程中会有很多warning,但是没有报错,所以可以忽略。编译完成后,会发现文件夹下生成了makefile中定义的.o文件和可执行程序rtkrcv,证明我们成功编译。

在这里插入图片描述
参考资料
[1] raspberry-pi-based-ppk-and-rtk-solutions-with-rtklib
[2] NEO M8T with RTKRCV on Raspberry Pi 3

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Android编译RTKLIB是将RTKLIB适配至Android平台,实现在安卓设备上的RTK(Real Time Kinematic)功能。RTKLIB是一个用于实时差分全球定位系统(GPS)数据处理的开源软件包,通过将差分GPS信号和基准站数据进行处理,可以提供更高精度的定位结果。 要在Android上编译RTKLIB,需要首先准备适当的开发环境和工具。可以使用Android Studio作为主要的开发工具,确保已安装NDK(Native Development Kit)以及相关的构建工具。 然后,需要下载RTKLIB的源代码。将源代码解压缩到一个适当的目录中,并进入代码目录。在终端中运行“./build.sh”命令,这将启动编译过程。在编译过程中,将会生成Android可执行文件(.so文件)以及相应的头文件和库文件。 在Android Studio中,创建一个新的Android项目,将所生成的头文件和库文件添加到项目中。在项目的build.gradle文件中,添加合适的依赖项和链接设置,确保正确地将RTKLIB集成到项目中。 然后,在项目中编写适当的代码来使用RTKLIB的功能。这可能涉及到实时接收和处理GPS信号,同时使用差分数据来提供更精确的定位结果。 最后,可以通过在Android设备上进行调试和测试来验证编译结果。可以连接一个具有导航功能的GPS接收器,并运行项目以获取实时RTK定位结果。 需要注意的是,在编译和使用RTKLIB时,可能会遇到不同的问题和挑战。这可能涉及到编译错误、依赖项问题或设备兼容性等方面。因此,建议详细查阅RTKLIB的文档和相关资源,并在需要时参考社区的讨论和解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值