ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

imu标定

imu标定 使用工具版本Ubuntu20.04 ros-noeticgnuplot-5.0.5imu_tkCMAKEproject(imu_tk) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) cmake_minimum_required (VERSION 2.8) cmake_policy(SET CMP0015 NEW) if (${CMAKE_BUILD_TYPE} STREQUAL ) set(CMAKE_BUILD_TYPE Release) endif() if(NOT DEFINED BUILD_IMU_TK_EXAMPLES) set(BUILD_IMU_TK_EXAMPLES ON) endif(NOT DEFINED BUILD_IMU_TK_EXAMPLES) find_package(Boost REQUIRED) find_package(Eigen3 REQUIRED) find_package(Ceres REQUIRED) find_package(catkin REQUIRED COMPONENTS rosbag sensor_msgs ) catkin_package( INCLUDE_DIRS include LIBRARIES imu_tk CATKIN_DEPENDS rosbag sensor_msgs ) include_directories(/usr/include/eigen3) include_directories(./include /usr/include ${catkin_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIR} ${CERES_INCLUDE_DIRS}) #Vis3D #find_package(Qt5 COMPONENTS QtCore QtGui QtOpenGL REQUIRED ) find_package(Qt5 COMPONENTS Core Gui Widgets OpenGL REQUIRED) find_package(OpenGL REQUIRED) find_package(GLUT REQUIRED) #include(${QT_USE_FILE}) add_definitions(${QT_DEFINITIONS}) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) include_directories( include ${catkin_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} ) set(IMU_TK_VIS_EXTRA_SOURCES ./src/vis_extra/gl_camera.cpp ./src/vis_extra/opengl_3d_scene.cpp ) set(IMU_TK_VIS_EXTRA_HEADERS ./include/imu_tk/vis_extra/opengl_3d_scene.h ) qt5_wrap_cpp(IMU_TK_VIS_EXTRA_HEADERS_MOC ${IMU_TK_VIS_EXTRA_HEADERS}) aux_source_directory( ./src IMU_TK_CORE_SRC ) set( IMU_TK_SRC ${IMU_TK_CORE_SRC} ${IMU_TK_VIS_EXTRA_HEADERS_MOC} ${IMU_TK_VIS_EXTRA_SOURCES} ) add_library(imu_tk STATIC ${IMU_TK_SRC}) target_link_libraries(imu_tk Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL) set_target_properties(imu_tk PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib) set (IMU_TK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE STRING imu_tk include directories) set (IMU_TK_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib CACHE STRING imu_tk libraries directories) set (IMU_TK_LIBS imu_tk ${CERES_LIBRARIES} Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} CACHE STRING imu_tk libraries) message( ${IMU_TK_LIBS} ) add_executable(imu_calib_node apps/imu_calib_node.cpp) target_link_libraries(imu_calib_node ${IMU_TK_LIBS} ${catkin_LIBRARIES}) if( BUILD_IMU_TK_EXAMPLES ) add_executable(test_imu_calib apps/test_imu_calib.cpp) #qt5_use_modules(test_imu_calib Core Gui Widgets OpenGL) target_link_libraries( test_imu_calib ${IMU_TK_LIBS}) set_target_properties( test_imu_calib PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) add_executable(test_integration apps/test_integration.cpp) #qt5_use_modules(test_integration Core Gui Widgets OpenGL) target_link_libraries( test_integration ${IMU_TK_LIBS}) set_target_properties( test_integration PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) endif( BUILD_IMU_TK_EXAMPLES )录制ros包同样的打开imu数据。用rosbag record命令记录imu 信息在记录的过程中要多imu进行一定的操作旋转停留36-50次。IMU需要标定的参数主要是确定性误差和随机误差确定性误差主要标定biasscale和misalignment随机误差主要标定noise和random walkimu_tk是用于求取确定性误差的开源工具。打开imu命令为roslaunch lpms_ig1 lpmsig1.launchCould not find a package configuration file provided by Qt5Qtcore withany of the following names:Qt50tcoreconfig.cmakegt5qtcore-config.cmakeAdd the installation prefix of ot50tcore to CMAKE PREFIX PATH or setQt5QtCore DIR to a directory cont并运行rosrun imu_tk imu_calib_node bag名字 topic名字rosrun imu_tk imu_calib_node /home/hnu/robot_car/2026-09-28-15-10-20.bag /imu/data成功之后会在目录下生成两个文件imu_acc.calib和imu_gyro.calib.其中的参数分别表示加速度计和陀螺仪的非对齐误差、biase、scale。如图如果执行过程中出现gnuplot: not found的错误安装一下就好sudo apt-get install gunplot下载imu_utils和code_utilsimu_utils下载地址为https://github.com/gaowenliang/imu_utilscode_utils下载地址为 https://github.com/gaowenliang/code_utils安装依赖sudo apt-get install libdw-dev先把code_utils放在src下catkin build编译有个先后顺序的编译报错code_utils-master/src/sumpixel_test.cpp:2:24: fatal error: backward.hpp:No such file or directory填坑 在code_utils下面找到sumpixel_test.cpp修改#include backward.hpp为 #include “code_utils/backward.hpp”再编译。然后重新catkin build编译成功再把imu_utils也放到工作空间的src下面不要删除之前的文件同样编开始录制imu话题保持imu不动2个小时你没听错2个小时指令rosbag record topic名字 -o imu.bagrosbag record /imu/data -o imu.bag在主目录下生成imu.bag文件在imu_utils文件下的launch文件目录下添加一个launch文件我这里添加的是 imu.launch并把以下代码复制进文件代码中的/imu/data改成自己imu的topic。launch node pkgimu_utils typeimu_an nameimu_an outputscreen param nameimu_topic typestring value /IMU_data/ param nameimu_name typestring value imutest/ param namedata_save_path typestring value $(find imu_utils)/data// param namemax_time_min typeint value 120/ param namemax_cluster typeint value 100/ /node /launch之后执行roslaunch imu_utils imu.launch新开一个命令端口记得开启ros。回放录制了两个小时的imu数据。rosbag play -r 250 imu.bag这里的imu.bag替换成自己的bag文件名。在执行的命令端口等待一段时间自动结束之后会在imu_utils文件下的data文件目录下生成一个imutest_imu_param.yaml的文件文件中有16个数据表示陀螺仪和加速度计的高斯白噪声和随机游走误差到现在随机误差标定结束。%YAML:1.0 --- type: IMU name: imutest Gyr: unit: rad/s avg-axis: gyr_n: 3.4692268267587600e-04 gyr_w: 1.1257261060196834e-05 x-axis: gyr_n: 2.8481426941671267e-04 gyr_w: 1.0112560170976478e-05 y-axis: gyr_n: 4.1428540484421351e-04 gyr_w: 1.4734776689705731e-05 z-axis: gyr_n: 3.4166837376670178e-04 gyr_w: 8.9244463199082925e-06 Acc: unit: m/s^2 avg-axis: acc_n: 1.6441969330278847e-02 acc_w: 7.9843421789303466e-04 x-axis: acc_n: 1.2975895451652108e-02 acc_w: 2.6923211449265396e-04 y-axis: acc_n: 1.3347436773079705e-02 acc_w: 7.4091792261632915e-04 z-axis: acc_n: 2.3002575766104726e-02 acc_w: 1.3851526165701213e-03
返回列表