ethz-asl / ethzasl_msf

MSF - Modular framework for multi sensor fusion based on an Extended Kalman Filter (EKF)
Other
1.01k stars 437 forks source link

Simple Guide for windows VS 2017 build #175

Closed lingerer closed 4 years ago

lingerer commented 5 years ago

This guide is base on #4 @sxsong1207 's fork,relative #173 . When you check @sxsong1027 's fork on windows,It will got these problem:

  1. namespace mpl_:: change to boost::mpl::

  2. add sincos function in sincos.h

After this you can build the lib. But this lib is basically a template lib ,when you use in you project it still will generate many error,Here's the solution:

1.modified msf_tmp.h, change any error match Eigen::Matrix<double,N,1 to Eigen::Matrix<double,N,1,MAXROW,MAXCOL> here's the sample:

template<typename T>
struct CoreStateLengthForType;
template<int NAME, int N, int STATE_T, int OPTIONS, int MAXROW, int MAXCOL>
struct CoreStateLengthForType<
    const msf_core::StateVar_T<Eigen::Matrix<double, N, 1,MAXROW,MAXCOL>, NAME, STATE_T,
        OPTIONS>&> {
  enum {
    value = 0
  };
  // Not a core state, so length is zero.
};template<typename T>
struct CoreStateLengthForType;
template<int NAME, int N, int STATE_T, int OPTIONS, int MAXROW, int MAXCOL>
struct CoreStateLengthForType<
    const msf_core::StateVar_T<Eigen::Matrix<double, N, 1,MAXROW,MAXCOL>, NAME, STATE_T,
        OPTIONS>&> {
  enum {
    value = 0
  };
  // Not a core state, so length is zero.
};

2.change usleep() to other vs c++ code

3.when using lib,you must add BOOST_NO_CXX11_VARIADIC_TEMPLATES define

4.I highly recommend change msf_types.h to use std::shared_ptr and std::dynamic_pointer_cast

5.@sxsong1207's fork using yaml to implement a config,you can change that in config.h

This is a brief steps for windows vs build. I think to make this lib ros and linux indepent need quite some work,thanks @sxsong1207 to make it easier, but this lib need data type and config refactors to make it a complete cross platform and ros free lib.