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

您所在的位置:网站首页 RTK界面怎样改为手写 如何在linux下编译RTKLIB(实时RTK程序rtkrcv)

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

2024-07-10 17:04| 来源: 网络整理| 查看: 265

文章目录 一、RTKLIB Demo5代码下载二、RTKLIB的makefile三、编译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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3