Skip to main content

开源VIO运行记录

 VINS-Mono
运行VINS-Mono项目出现一些问题,记录如下:
启动launch文件时,vins_estimator模块莫名奇妙的挂掉
检查发现,ceres中要求的Eigen的版本与实际安装的版本不一致,
第一步:根据Ceres中要求的版本,安装相应的Eigen版本

但是在终端中编译时还是会有报错,再Clion中不会报错,编译后的结果运行也正常。

第二步:
 打开/usr/local/lib/cmake/Ceres/CeresConfig.cmake
 在设置Eigen版本及检查版本的地方,去掉相关的版本限制

备注:CLion中使用的cmake可能和终端中使用的cmake不是一个,取决于clion中的设置。因此运行的结果不完全一致

编译新的版本,只需要在vins_estimater中指定ceres的1.13的版本就直接能编译过去。

很多问题都是eigen和ceres的版本问题


okvis-ros
是okvis的ros版本
编译时再会自动下载借个库,但是在下载Opengv时会出问题,
修改如下:
先离线下载,然后将Cmakelist中的在线下载关闭掉,将Opengv部分的SOURCE_DIR指向离线包,
 ExternalProject_Add(opengv_external
    #GIT_REPOSITORY https://github.com/laurentkneip/opengv
    UPDATE_COMMAND ""
    PATCH_COMMAND # forcing static libs
        COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/cmake/opengv/CMakeLists.txt ${CMAKE_CURRENT_BINARY_DIR}/opengv/src/opengv/CMakeLists.txt
        COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/cmake/opengv/opengvConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/opengv/src/opengv/opengvConfig.cmake.in
        COMMENT "Forcing our own CMakeLists.txt to build OpenGV (static library support)."
    CMAKE_ARGS
      -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
      -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
      -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS_WSUPPRESS} # suppress warnings...
    PREFIX ${CMAKE_CURRENT_BINARY_DIR}/opengv
    SOURCE_DIR /home/wk/GRC_ws/src/okvis_ros/opengv
    INSTALL_DIR ${CMAKE_BINARY_DIR}
    BUILD_IN_SOURCE 0
    BUILD_COMMAND make -j${N_CORES}
    INSTALL_COMMAND make install
)

Comments

Popular posts from this blog

电子书籍整理

状态估计: 神书:  stste estimation for robotics.  barfoot 微分集合&李群: 李群的大部头神书: Notes on Differential Geometry and Lie Groups INTRODUCTION TODIFFERENTIAL GEOMETRY Introduction to Smooth Manifolds & Lie Groups INTRODUCTION TO DIFFERENTIABLEMANIFOLDS  (笔记类型,一百多页) 一个很好的教学笔记: Lie groups, Lie Algebras, projective geomtry and optimization for 3D Geometry, Engineering and Computer Vision 张量:  A Student’s Guide to Vectors and Tensors

ROS、惯导、OpenCV、开源算法中坐标表示的理解

ros中tf系统的坐标表示: http://wiki.ros.org/tf/Overview/Transformations tf中坐标转换方向 ros中各个坐标系的定义: http://www.ros.org/reps/rep-0105.html#odom rovio算法中的坐标表示: https://github.com/ethz-asl/rovio/wiki/Coordinate-Frames-and-Notation 变换的理解:       两个坐标系的同一个点,由c1系转换到c2系,称为坐标变换,或俗称点变换;只考虑两个坐标系的变换,称为基变换,俗称坐标系变换。坐标变换和基变换方向相反,但表达的坐标系是同一个。变换要考虑变换的方向和描述的坐标系两个问题。 一般的变换中,都是以坐标系下的一个坐标点作为参照进行转换推导,参见《视觉SLAM14讲》P41的推导。因此,得到的变换R、t,是坐标的变换,即简单的理解为点的变换。 在VIO中一样,IMU即使看不到点,也以其坐标系下的 一个点作为参考(比如,将重力从n系转换到b系,将重力看作一个点)。 考虑点P在1、2坐标系的表示分别为P1、P2, 坐标点P从P1变换到P2: P2 = R_21*P1+ t_21_2 坐标系1、2的坐标基变换则为从2变换到1: R_12 、 t_12_2 因此,坐标变换的描述坐标系为终点坐标系,基变换的描述坐标系为起点坐标系 在tf/message的ros框架下,以tf为例: 描述坐标系为frame_id, -> 全局坐标系 坐标基变换(坐标系变换):frame_id -> child_frame_id 坐标变换(点变换):child_frame_id -> frame_id 在ros message中变换也是基于坐标基的变换。  有的是基于点的,查看源码的注释,比如loockTransform(),注释中就说了是变换data。sendTrsnform()中通过frame_id和child_frame_id进行识别。 更新: 最直接的记忆方式就跟据全局坐标系, 比如,标定结果中,T_cam0_imu, 意味着将点从imu坐标系转换到cam0坐标系,对于...

ros调试----rosparm

当程序有许多参数传入时,通常会通过rosparm进行传递, 传递形式为在roslaunch文件中的node中,使用rosparm,比如 <node pkg="tvio" type="image_processor_node" name="image_processor"  output="screen" >       <rosparam command="load" file="$(arg calibration_file)"/>       <param name="grid_row" value="4"/>       <param name="grid_col" value="5"/>       <remap from="~imu" to="/xsens_imu_data"/>       <remap from="~cam0_image" to="/camera/left/image_raw"/>       <remap from="~cam1_image" to="/camera/right/image_raw"/>  </node> 其中,calibration_file为指定的rosparam格式的yaml文件。 可以通过launch文件启动调试,但是不是很习惯,还是喜欢用Clion的可视化调试。 方法: 1)在终端中手动加载rosparam参数: python /opt/ros/kinetic/bin/rosparam  load  /xxxx/camchain.yaml 参数一旦加载后,会保持在本机上的参数服务器中(是不是和roscore相关),程序运行就能读取到。 2)remap中的参数项通过程序的命令行参数形式传入: image_processor   ~imu:=/xsens_imu_data...