Skip to content
Snippets Groups Projects
Commit 40c17028 authored by Joaquim Casals Buñuel's avatar Joaquim Casals Buñuel
Browse files

CMake refactor

parent a5b6ac84
No related branches found
No related tags found
2 merge requests!20new tag,!19new tag
......@@ -43,15 +43,84 @@ IF(NOT BUILD_TESTS)
OPTION(BUILD_TESTS "Build Unit tests" ON)
ENDIF(NOT BUILD_TESTS)
ADD_SUBDIRECTORY(src)
# rtklib path
SET(RTKLIB_DIR deps/RTKLIB)
SET(RTKLIB_SRC_DIR ${RTKLIB_DIR}/src)
# driver source files
SET(SOURCES
src/gnss_utils.cpp
src/observations.cpp
src/navigation.cpp
src/TDCP.cpp
src/utils.cpp)
SET(RTKLIB_SRC
${RTKLIB_SRC_DIR}/pntpos.c
${RTKLIB_SRC_DIR}/rtkcmn.c
${RTKLIB_SRC_DIR}/sbas.c
${RTKLIB_SRC_DIR}/ephemeris.c
${RTKLIB_SRC_DIR}/preceph.c
${RTKLIB_SRC_DIR}/qzslex.c
${RTKLIB_SRC_DIR}/rtcm.c
${RTKLIB_SRC_DIR}/rtcm2.c
${RTKLIB_SRC_DIR}/rtcm3.c
${RTKLIB_SRC_DIR}/rtcm3e.c
${RTKLIB_SRC_DIR}/ionex.c
${RTKLIB_SRC_DIR}/rinex.c)
# application header files
SET(HEADERS
include/gnss_utils/gnss_utils.h
include/gnss_utils/utils.h
include/gnss_utils/observations.h
include/gnss_utils/navigation.h
include/gnss_utils/TDCP.h
${RTKLIB_SRC_DIR}/rtklib.h)
# Eigen #######
FIND_PACKAGE(Eigen3 REQUIRED)
# Boost #######
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED OFF)
set(Boost_USE_STATIC_RUNTIME OFF)
FIND_PACKAGE(Boost REQUIRED)
# Adding libraries' directories
link_directories(/usr/lib/x86_64-linux-gnu/)
# Adding include directories
INCLUDE_DIRECTORIES(include/ ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${RTKLIB_SRC_DIR})
# create the shared library
ADD_LIBRARY(gnss_utils SHARED ${SOURCES} ${RTKLIB_SRC})
TARGET_LINK_LIBRARIES(gnss_utils ${Boost_LIBRARIES})
# Installing
INSTALL(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib/iri-algorithms
ARCHIVE DESTINATION lib/iri-algorithms)
INSTALL(FILES ${HEADERS} DESTINATION include/iri-algorithms/gnss_utils)
INSTALL(FILES ../Findgnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
# Examples
ADD_SUBDIRECTORY(src/examples)
if(BUILD_TESTS)
# Enables testing for this directory and below.
# Note that ctest expects to find a test file in the build directory root.
# Therefore, this command should be in the source directory root.
#include(CTest) # according to http://public.kitware.com/pipermail/cmake/2012-June/050853.html
enable_testing()
MESSAGE("Building tests.")
enable_testing()
endif()
# Testing
if(BUILD_TESTS)
add_subdirectory(test)
endif()
FIND_PACKAGE(Doxygen)
......@@ -94,4 +163,4 @@ ELSE(UNIX)
COMMENT "uninstall only implemented in unix"
TARGET uninstall
)
ENDIF(UNIX)
\ No newline at end of file
ENDIF(UNIX)
......@@ -43,13 +43,13 @@ namespace GNSSUtils
Navigation & _navigation,
const prcopt_t & _prcopt);
ComputePosOutput computePosOwn(const Observations & _observations,
Navigation & _navigation,
const prcopt_t & _prcopt);
// ComputePosOutput computePosOwn(const Observations & _observations,
// Navigation & _navigation,
// const prcopt_t & _prcopt);
int pntposOwn(const obsd_t *obs, int n, const nav_t *nav,
const prcopt_t *opt, sol_t *sol, double *azel, ssat_t *ssat,
char *msg);
// int pntposOwn(const obsd_t *obs, int n, const nav_t *nav,
// const prcopt_t *opt, sol_t *sol, double *azel, ssat_t *ssat,
// char *msg);
int estposOwn(const obsd_t *obs, int n, const double *rs, const double *dts,
const double *vare, const int *svh, const nav_t *nav,
......
# rtklib path
SET(RTKLIB_DIR ../deps/RTKLIB)
SET(RTKLIB_SRC_DIR ${RTKLIB_DIR}/src)
# driver source files
SET(SOURCES
gnss_utils.cpp
observations.cpp
navigation.cpp
TDCP.cpp
utils.cpp)
SET(RTKLIB_SRC
${RTKLIB_SRC_DIR}/pntpos.c
${RTKLIB_SRC_DIR}/rtkcmn.c
${RTKLIB_SRC_DIR}/sbas.c
${RTKLIB_SRC_DIR}/ephemeris.c
${RTKLIB_SRC_DIR}/preceph.c
${RTKLIB_SRC_DIR}/qzslex.c
${RTKLIB_SRC_DIR}/rtcm.c
${RTKLIB_SRC_DIR}/rtcm2.c
${RTKLIB_SRC_DIR}/rtcm3.c
${RTKLIB_SRC_DIR}/rtcm3e.c
${RTKLIB_SRC_DIR}/ionex.c
${RTKLIB_SRC_DIR}/rinex.c)
# application header files
SET(HEADERS
../include/gnss_utils/gnss_utils.h
../include/gnss_utils/utils.h
../include/gnss_utils/observations.h
../include/gnss_utils/navigation.h
../include/gnss_utils/TDCP.h
${RTKLIB_SRC_DIR}/rtklib.h)
# Eigen #######
FIND_PACKAGE(Eigen3 REQUIRED)
# Boost #######
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED OFF)
set(Boost_USE_STATIC_RUNTIME OFF)
FIND_PACKAGE(Boost REQUIRED)
# Adding libraries' directories
link_directories(/usr/lib/x86_64-linux-gnu/)
# Adding include directories
INCLUDE_DIRECTORIES(../include/ ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${RTKLIB_SRC_DIR})
# create the shared library
ADD_LIBRARY(gnss_utils SHARED ${SOURCES} ${RTKLIB_SRC})
TARGET_LINK_LIBRARIES(gnss_utils ${Boost_LIBRARIES})
# Installing
INSTALL(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib/iri-algorithms
ARCHIVE DESTINATION lib/iri-algorithms)
INSTALL(FILES ${HEADERS} DESTINATION include/iri-algorithms/gnss_utils)
INSTALL(FILES ../Findgnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
# Testing
if(BUILD_TESTS)
MESSAGE("Building tests.")
add_subdirectory(test)
endif()
# Examples
ADD_SUBDIRECTORY(examples)
\ No newline at end of file
......@@ -52,54 +52,54 @@ namespace GNSSUtils
return output;
}
ComputePosOutput computePosOwn(const GNSSUtils::Observations & _observations,
GNSSUtils::Navigation & _navigation,
const prcopt_t & _prcopt)
{
// Remove duplicated satellites
uniqnav(&(_navigation.getNavigation()));
// Define error msg
char msg[128] = "";
GNSSUtils::ComputePosOutput output;
sol_t sol;
sol = {{0}};
output.pos_stat = pntposOwn(_observations.data(), _observations.size(),
&(_navigation.getNavigation()),
&_prcopt, &sol, NULL, NULL, msg);
if (output.pos_stat == 0)
{
std::cout << "Bad computing: " << msg << "\n";
}
output.time = sol.time.time;
output.sec = sol.time.sec;
output.pos = Eigen::Vector3d(sol.rr);
// std::cout << "Compute pos: " << output.pos.transpose() << "\n";
output.vel = Eigen::Vector3d(&sol.rr[3]);
output.pos_covar << sol.qr[0], sol.qr[3], sol.qr[5],
sol.qr[3], sol.qr[1], sol.qr[4],
sol.qr[5], sol.qr[3], sol.qr[2];
// XXX: segmentation fault here.
// if (sol.dtr != NULL)
// {
// output.rcv_bias << sol.dtr[0], sol.dtr[1], sol.dtr[2], sol.dtr[3], sol.dtr[4], sol.dtr[5];
// }
output.type = sol.type;
output.stat = sol.stat;
output.ns = sol.ns;
output.age = sol.age;
output.ratio = sol.ratio;
output.lat_lon = ecefToLatLonAlt(output.pos);
return output;
}
// ComputePosOutput computePosOwn(const GNSSUtils::Observations & _observations,
// GNSSUtils::Navigation & _navigation,
// const prcopt_t & _prcopt)
// {
// // Remove duplicated satellites
// uniqnav(&(_navigation.getNavigation()));
// // Define error msg
// char msg[128] = "";
// GNSSUtils::ComputePosOutput output;
// sol_t sol;
// sol = {{0}};
// output.pos_stat = pntposOwn(_observations.data(), _observations.size(),
// &(_navigation.getNavigation()),
// &_prcopt, &sol, NULL, NULL, msg);
// if (output.pos_stat == 0)
// {
// std::cout << "Bad computing: " << msg << "\n";
// }
// output.time = sol.time.time;
// output.sec = sol.time.sec;
// output.pos = Eigen::Vector3d(sol.rr);
// // std::cout << "Compute pos: " << output.pos.transpose() << "\n";
// output.vel = Eigen::Vector3d(&sol.rr[3]);
// output.pos_covar << sol.qr[0], sol.qr[3], sol.qr[5],
// sol.qr[3], sol.qr[1], sol.qr[4],
// sol.qr[5], sol.qr[3], sol.qr[2];
// // XXX: segmentation fault here.
// // if (sol.dtr != NULL)
// // {
// // output.rcv_bias << sol.dtr[0], sol.dtr[1], sol.dtr[2], sol.dtr[3], sol.dtr[4], sol.dtr[5];
// // }
// output.type = sol.type;
// output.stat = sol.stat;
// output.ns = sol.ns;
// output.age = sol.age;
// output.ratio = sol.ratio;
// output.lat_lon = ecefToLatLonAlt(output.pos);
// return output;
// }
/* single-point positioning COPIED FROM RTKLIB ------------------------------
* compute receiver position, velocity, clock bias by single-point positioning
......@@ -117,66 +117,66 @@ namespace GNSSUtils
* receiver bias are negligible (only involving glonass-gps time offset
* and receiver bias)
*-----------------------------------------------------------------------------*/
int pntposOwn(const obsd_t *obs, int n, const nav_t *nav,
const prcopt_t *opt, sol_t *sol, double *azel, ssat_t *ssat,
char *msg)
{
prcopt_t opt_=*opt;
double *rs,*dts,*var,*azel_,*resp;
int i,stat,vsat[MAXOBS]={0},svh[MAXOBS];
sol->stat=SOLQ_NONE;
if (n<=0) {strcpy(msg,"no observation data"); return 0;}
trace(3,"pntpos : tobs=%s n=%d\n",time_str(obs[0].time,3),n);
sol->time=obs[0].time; msg[0]='\0';
rs=mat(6,n); dts=mat(2,n); var=mat(1,n); azel_=zeros(2,n); resp=mat(1,n);
if (opt_.mode!=PMODE_SINGLE) { /* for precise positioning */
#if 0
opt_.sateph =EPHOPT_BRDC;
#endif
opt_.ionoopt=IONOOPT_BRDC;
opt_.tropopt=TROPOPT_SAAS;
}
/* satellite positons, velocities and clocks */
satposs(sol->time,obs,n,nav,opt_.sateph,rs,dts,var,svh);
/* estimate receiver position with pseudorange */
stat=estposOwn(obs,n,rs,dts,var,svh,nav,&opt_,sol,azel_,vsat,resp,msg);
/* raim fde */
if (!stat&&n>=6&&opt->posopt[4]) {
stat=raim_fde(obs,n,rs,dts,var,svh,nav,&opt_,sol,azel_,vsat,resp,msg);
}
/* estimate receiver velocity with doppler */
//if (stat) estvel(obs,n,rs,dts,nav,&opt_,sol,azel_,vsat);
if (azel) {
for (i=0;i<n*2;i++) azel[i]=azel_[i];
}
if (ssat) {
for (i=0;i<MAXSAT;i++) {
ssat[i].vs=0;
ssat[i].azel[0]=ssat[i].azel[1]=0.0;
ssat[i].resp[0]=ssat[i].resc[0]=0.0;
ssat[i].snr[0]=0;
}
for (i=0;i<n;i++) {
ssat[obs[i].sat-1].azel[0]=azel_[ i*2];
ssat[obs[i].sat-1].azel[1]=azel_[1+i*2];
ssat[obs[i].sat-1].snr[0]=obs[i].SNR[0];
if (!vsat[i]) continue;
ssat[obs[i].sat-1].vs=1;
ssat[obs[i].sat-1].resp[0]=resp[i];
}
}
free(rs); free(dts); free(var); free(azel_); free(resp);
return stat;
}
// int pntposOwn(const obsd_t *obs, int n, const nav_t *nav,
// const prcopt_t *opt, sol_t *sol, double *azel, ssat_t *ssat,
// char *msg)
// {
// prcopt_t opt_=*opt;
// double *rs,*dts,*var,*azel_,*resp;
// int i,stat,vsat[MAXOBS]={0},svh[MAXOBS];
// sol->stat=SOLQ_NONE;
// if (n<=0) {strcpy(msg,"no observation data"); return 0;}
// trace(3,"pntpos : tobs=%s n=%d\n",time_str(obs[0].time,3),n);
// sol->time=obs[0].time; msg[0]='\0';
// rs=mat(6,n); dts=mat(2,n); var=mat(1,n); azel_=zeros(2,n); resp=mat(1,n);
// if (opt_.mode!=PMODE_SINGLE) { /* for precise positioning */
// #if 0
// opt_.sateph =EPHOPT_BRDC;
// #endif
// opt_.ionoopt=IONOOPT_BRDC;
// opt_.tropopt=TROPOPT_SAAS;
// }
// /* satellite positons, velocities and clocks */
// satposs(sol->time,obs,n,nav,opt_.sateph,rs,dts,var,svh);
// /* estimate receiver position with pseudorange */
// stat=estposOwn(obs,n,rs,dts,var,svh,nav,&opt_,sol,azel_,vsat,resp,msg);
// /* raim fde */
// if (!stat&&n>=6&&opt->posopt[4]) {
// stat=raim_fde(obs,n,rs,dts,var,svh,nav,&opt_,sol,azel_,vsat,resp,msg);
// }
// /* estimate receiver velocity with doppler */
// //if (stat) estvel(obs,n,rs,dts,nav,&opt_,sol,azel_,vsat);
// if (azel) {
// for (i=0;i<n*2;i++) azel[i]=azel_[i];
// }
// if (ssat) {
// for (i=0;i<MAXSAT;i++) {
// ssat[i].vs=0;
// ssat[i].azel[0]=ssat[i].azel[1]=0.0;
// ssat[i].resp[0]=ssat[i].resc[0]=0.0;
// ssat[i].snr[0]=0;
// }
// for (i=0;i<n;i++) {
// ssat[obs[i].sat-1].azel[0]=azel_[ i*2];
// ssat[obs[i].sat-1].azel[1]=azel_[1+i*2];
// ssat[obs[i].sat-1].snr[0]=obs[i].SNR[0];
// if (!vsat[i]) continue;
// ssat[obs[i].sat-1].vs=1;
// ssat[obs[i].sat-1].resp[0]=resp[i];
// }
// }
// free(rs); free(dts); free(var); free(azel_); free(resp);
// return stat;
// }
int estposOwn(const obsd_t *obs, int n, const double *rs, const double *dts,
const double *vare, const int *svh, const nav_t *nav,
......
File moved
File moved
File moved
File moved
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment