0、本机基础环境:
CUDA:11.4 Jetpack:5.1.2 L4T:35.4.1 Ubuntu:20.04 focal camera:zedm
软件包:GitHub - zinuok/VINS-Fusion-ROS2: ROS2 version of VINS-Fusion
Ceres 2.2 (这样是在部署系统时遇到的主要问题),由于死心眼,不想将Ceres 降到2.2以下,在部署系统遇到了如下问题:
(首先贴一下一些博主的改错方法
XTDrone和PX4学习期间问题记录(一)_error: ‘class ceres::problem’ has no member named -CSDN博客
使用Ceres-Sovler进行四元数求解优化:LocalParameterization->Manifold_ceres::localparameterization-CSDN博客 )
1、
VINS-Fusion-ROS2/global_fusion/src/globalOpt.cpp:117:20: error: ‘LocalParameterization’ is not a member of ‘ceres’
117 | ceres::LocalParameterization* local_parameterization = new ceres::QuaternionParameterization();
类是这种的更改ceres::LocalParameterization*为ceres::Manifold*
2、
VINS-Fusion-ROS2/camera_models/include/camodocal/gpl/EigenQuaternionParameterization.h:4:10: fatal error: ceres/local_parameterization.h: 没有那个文件或目录
4 | #include "ceres/local_parameterization.h"
更改#include "ceres/local_parameterization.h" -> #include "ceres/manifold.h"
3、
VINS-Fusion-ROS2/camera_models/src/calib/CameraCalibration.cc:512:17: error: ‘class ceres::Problem’ has no member named ‘SetParameterization’; did you mean ‘SetParameterLowerBound’?
512 | problem.SetParameterization(transformVec.at(i).rotationData(),
Ceres 2.2版本开始,LocalParameterization
方法不可用,需要用Manifold
替代。
/ 上略 /
// Build the problem.
double q[4];
ceres::Problem problem;
/****************************************/
/* 省略调用AddResidualBlock() q是参数之一*/
/****************************************/
ceres::Manifold* quaternion_manifold = new ceres::QuaternionManifold;
problem.SetManifold(q, quaternion_manifold);
/ 下略 //
就是将problem.SetParameterization 改为 problem.SetManifold
4、
VINS-Fusion-ROS2/loop_fusion/src/pose_graph.h:138:24: error: ‘AutoDiffLocalParameterization’ in namespace ‘ceres’ does not name a template type
138 | return (new ceres::AutoDiffLocalParameterization<AngleLocalParameterization,
将AutoDiffParameterization
-> AutoDiffManifold
5、
/usr/local/include/ceres/autodiff_manifold.h:161:22: error: ‘class AngleLocalParameterization’ has no member named ‘Plus’
161 | return functor_->Plus(x, delta, x_plus_delta);
参考博主写的,这里不想复述了。 XTDrone和PX4学习期间问题记录(一)_error: ‘class ceres::problem’ has no member named -CSDN博客
6、
ceres::LocalParameterization *local_parameterization = new PoseLocalParameterization();
改为-> ceres::Manifold* local_parameterization = new ceres::EigenQuaternionManifold();
7、最后祝贺你:
Finished <<< vins [1min 21s]
Summary: 4 packages finished [1min 22s]
1 package had stderr output: vins
1、运行代码
1、ros2 run vins vins_node /home/nvidia/RosTest/VinsFusion/src/VINS-Fusion-ROS2/config/euroc/euroc_stereo_imu_config.yaml
2、ros2 launch vins vins_rviz.launch.xml
3、ros2 bag play MH_01_easy.db3