【IMU标定】使用Allan_Variance_ROS

开源地址: https://github.com/ori-drs/allan_variance_ros

作者表示在ubuntu 20.04测试通过,本人在ubuntu 18.04 LTS也能成功运行。

使用原因

据说imu_utils效果不好,现在改用此项目库标定,kalibr适用

遇到问题

使用catkin编译失败

kanhao100@ubuntu-x86 ~/Allan_Variance_ROS
 % catkin build allen_variance_ros
--------------------------------------------------------------------------------
Profile:                     default
Extending:             [env] /home/kanhao100/catkin_ws1/devel:/home/kanhao100/kalibr_workspace/devel:/opt/ros/melodic
Workspace:                   /home/kanhao100/Allan_Variance_ROS
--------------------------------------------------------------------------------
Build Space:        [exists] /home/kanhao100/Allan_Variance_ROS/build
Devel Space:        [exists] /home/kanhao100/Allan_Variance_ROS/devel
Install Space:      [unused] /home/kanhao100/Allan_Variance_ROS/install
Log Space:         [missing] /home/kanhao100/Allan_Variance_ROS/logs
Source Space:       [exists] /home/kanhao100/Allan_Variance_ROS/src
DESTDIR:            [unused] None
--------------------------------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
--------------------------------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
--------------------------------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
--------------------------------------------------------------------------------
Workspace configuration appears valid.
--------------------------------------------------------------------------------
[build] Found '1' packages in 0.0 seconds.                                     
[build] Given package 'allen_variance_ros' is not in the workspace

使用catkin_make也不行。

可能的原因:
I got the answer. The package on which my package depend upon is not ros/catkin package. So catkin unable to find it. For building such packages following catkin arguments needs to pass at the first time buidling of catkin workspace.

catkin_make --cmake-args -DUSE_CATKIN=ON

引用自:https://answers.ros.org/question/263381/catkin-unable-to-find-package-inside-workspace/

至此,问题解决

kanhao100@ubuntu-x86 ~/Allan_Variance_ROS
 % catkin_make --cmake-args -DUSE_CATKIN=ON
Base path: /home/kanhao100/Allan_Variance_ROS
Source space: /home/kanhao100/Allan_Variance_ROS/src
Build space: /home/kanhao100/Allan_Variance_ROS/build
Devel space: /home/kanhao100/Allan_Variance_ROS/devel
Install space: /home/kanhao100/Allan_Variance_ROS/install
Creating symlink "/home/kanhao100/Allan_Variance_ROS/src/CMakeLists.txt" pointing to "/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"
####
#### Running command: "cmake /home/kanhao100/Allan_Variance_ROS/src -DUSE_CATKIN=ON -DCATKIN_DEVEL_PREFIX=/home/kanhao100/Allan_Variance_ROS/devel -DCMAKE_INSTALL_PREFIX=/home/kanhao100/Allan_Variance_ROS/install -G Unix Makefiles" in "/home/kanhao100/Allan_Variance_ROS/build"
####
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using CATKIN_DEVEL_PREFIX: /home/kanhao100/Allan_Variance_ROS/devel
-- Using CMAKE_PREFIX_PATH: /home/kanhao100/catkin_ws1/devel;/home/kanhao100/kalibr_workspace/devel;/opt/ros/melodic
-- This workspace overlays: /home/kanhao100/catkin_ws1/devel;/home/kanhao100/kalibr_workspace/devel;/opt/ros/melodic
-- Found PythonInterp: /usr/bin/python2 (found suitable version "2.7.17", minimum required is "2") 
-- Using PYTHON_EXECUTABLE: /usr/bin/python2
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/kanhao100/Allan_Variance_ROS/build/test_results
-- Found gtest sources under '/usr/src/googletest': gtests will be built
-- Found gmock sources under '/usr/src/googletest': gmock will be built
-- Found PythonInterp: /usr/bin/python2 (found version "2.7.17") 
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.7.29
-- BUILD_SHARED_LIBS is on
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~  traversing 1 packages in topological order:
-- ~~  - allan_variance_ros
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'allan_variance_ros'
-- ==> add_subdirectory(allan_variance_ros)
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Found OpenMP_C: -fopenmp (found version "4.5") 
-- Found OpenMP_CXX: -fopenmp (found version "4.5") 
-- Found OpenMP: TRUE (found version "4.5")  
-- OpenMP found will try to link!
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    USE_CATKIN


-- Build files have been written to: /home/kanhao100/Allan_Variance_ROS/build
####
#### Running command: "make -j8 -l8" in "/home/kanhao100/Allan_Variance_ROS/build"
####
Scanning dependencies of target std_msgs_generate_messages_cpp
Scanning dependencies of target rosgraph_msgs_generate_messages_nodejs
Scanning dependencies of target geometry_msgs_generate_messages_nodejs
Scanning dependencies of target actionlib_generate_messages_lisp
Scanning dependencies of target std_srvs_generate_messages_nodejs
Scanning dependencies of target topic_tools_generate_messages_nodejs
Scanning dependencies of target geometry_msgs_generate_messages_py
Scanning dependencies of target actionlib_generate_messages_nodejs
[  0%] Built target geometry_msgs_generate_messages_nodejs
[  0%] Built target std_msgs_generate_messages_cpp
[  0%] Built target rosgraph_msgs_generate_messages_nodejs
[  0%] Built target std_srvs_generate_messages_nodejs
[  0%] Built target topic_tools_generate_messages_nodejs
[  0%] Built target geometry_msgs_generate_messages_py
[  0%] Built target actionlib_generate_messages_lisp
[  0%] Built target actionlib_generate_messages_nodejs
Scanning dependencies of target actionlib_generate_messages_py
Scanning dependencies of target topic_tools_generate_messages_py
Scanning dependencies of target roscpp_generate_messages_lisp
Scanning dependencies of target std_srvs_generate_messages_cpp
Scanning dependencies of target actionlib_msgs_generate_messages_cpp
Scanning dependencies of target rosgraph_msgs_generate_messages_eus
Scanning dependencies of target actionlib_msgs_generate_messages_eus
Scanning dependencies of target sensor_msgs_generate_messages_cpp
[  0%] Built target actionlib_generate_messages_py
[  0%] Built target topic_tools_generate_messages_py
[  0%] Built target actionlib_msgs_generate_messages_cpp
[  0%] Built target std_srvs_generate_messages_cpp
[  0%] Built target actionlib_msgs_generate_messages_eus
[  0%] Built target rosgraph_msgs_generate_messages_eus
[  0%] Built target roscpp_generate_messages_lisp
[  0%] Built target sensor_msgs_generate_messages_cpp
Scanning dependencies of target std_msgs_generate_messages_py
Scanning dependencies of target geometry_msgs_generate_messages_lisp
Scanning dependencies of target topic_tools_generate_messages_eus
Scanning dependencies of target std_msgs_generate_messages_nodejs
Scanning dependencies of target rosgraph_msgs_generate_messages_lisp
Scanning dependencies of target std_srvs_generate_messages_py
[  0%] Built target std_msgs_generate_messages_py
Scanning dependencies of target std_srvs_generate_messages_lisp
Scanning dependencies of target topic_tools_generate_messages_lisp
[  0%] Built target topic_tools_generate_messages_eus
[  0%] Built target std_msgs_generate_messages_nodejs
[  0%] Built target geometry_msgs_generate_messages_lisp
[  0%] Built target std_srvs_generate_messages_py
[  0%] Built target rosgraph_msgs_generate_messages_lisp
Scanning dependencies of target rosgraph_msgs_generate_messages_cpp
Scanning dependencies of target tf2_msgs_generate_messages_cpp
Scanning dependencies of target topic_tools_generate_messages_cpp
[  0%] Built target topic_tools_generate_messages_lisp
Scanning dependencies of target actionlib_msgs_generate_messages_lisp
[  0%] Built target std_srvs_generate_messages_lisp
Scanning dependencies of target actionlib_msgs_generate_messages_py
[  0%] Built target rosgraph_msgs_generate_messages_cpp
Scanning dependencies of target sensor_msgs_generate_messages_nodejs
[  0%] Built target tf2_msgs_generate_messages_cpp
[  0%] Built target topic_tools_generate_messages_cpp
[  0%] Built target actionlib_msgs_generate_messages_lisp
Scanning dependencies of target actionlib_generate_messages_cpp
Scanning dependencies of target roscpp_generate_messages_cpp
[  0%] Built target actionlib_msgs_generate_messages_py
[  0%] Built target sensor_msgs_generate_messages_nodejs
Scanning dependencies of target roscpp_generate_messages_nodejs
Scanning dependencies of target tf2_msgs_generate_messages_nodejs
[  0%] Built target actionlib_generate_messages_cpp
[  0%] Built target roscpp_generate_messages_cpp
Scanning dependencies of target geometry_msgs_generate_messages_eus
Scanning dependencies of target roscpp_generate_messages_eus
Scanning dependencies of target tf2_msgs_generate_messages_py
[  0%] Built target tf2_msgs_generate_messages_nodejs
Scanning dependencies of target tf2_msgs_generate_messages_lisp
[  0%] Built target roscpp_generate_messages_nodejs
Scanning dependencies of target tf2_msgs_generate_messages_eus
[  0%] Built target geometry_msgs_generate_messages_eus
Scanning dependencies of target actionlib_generate_messages_eus
[  0%] Built target roscpp_generate_messages_eus
Scanning dependencies of target std_srvs_generate_messages_eus
Scanning dependencies of target sensor_msgs_generate_messages_lisp
[  0%] Built target tf2_msgs_generate_messages_py
[  0%] Built target tf2_msgs_generate_messages_eus
Scanning dependencies of target sensor_msgs_generate_messages_eus
[  0%] Built target tf2_msgs_generate_messages_lisp
Scanning dependencies of target std_msgs_generate_messages_lisp
[  0%] Built target actionlib_generate_messages_eus
[  0%] Built target std_srvs_generate_messages_eus
[  0%] Built target sensor_msgs_generate_messages_lisp
Scanning dependencies of target rosgraph_msgs_generate_messages_py
[  0%] Built target sensor_msgs_generate_messages_eus
Scanning dependencies of target roscpp_generate_messages_py
Scanning dependencies of target sensor_msgs_generate_messages_py
Scanning dependencies of target actionlib_msgs_generate_messages_nodejs
Scanning dependencies of target geometry_msgs_generate_messages_cpp
Scanning dependencies of target std_msgs_generate_messages_eus
[  0%] Built target rosgraph_msgs_generate_messages_py
[  0%] Built target std_msgs_generate_messages_lisp
[  0%] Built target roscpp_generate_messages_py
[  0%] Built target geometry_msgs_generate_messages_cpp
[  0%] Built target std_msgs_generate_messages_eus
[  0%] Built target actionlib_msgs_generate_messages_nodejs
[  0%] Built target sensor_msgs_generate_messages_py
Scanning dependencies of target allan_variance_ros
[ 12%] Building CXX object allan_variance_ros/CMakeFiles/allan_variance_ros.dir/src/ImuMeasurement.cpp.o
[ 37%] Building CXX object allan_variance_ros/CMakeFiles/allan_variance_ros.dir/src/AllanVarianceComputor.cpp.o
[ 37%] Building CXX object allan_variance_ros/CMakeFiles/allan_variance_ros.dir/src/yaml_parsers.cpp.o
[ 50%] Linking CXX shared library /home/kanhao100/Allan_Variance_ROS/devel/lib/liballan_variance_ros.so
[ 50%] Built target allan_variance_ros
Scanning dependencies of target allan_variance
Scanning dependencies of target imu_simulator
[ 75%] Building CXX object allan_variance_ros/CMakeFiles/imu_simulator.dir/src/ImuSimulator.cpp.o
[ 75%] Building CXX object allan_variance_ros/CMakeFiles/allan_variance.dir/src/allan_variance.cpp.o
[ 87%] Linking CXX executable /home/kanhao100/Allan_Variance_ROS/devel/lib/allan_variance_ros/allan_variance
[ 87%] Built target allan_variance
[100%] Linking CXX executable /home/kanhao100/Allan_Variance_ROS/devel/lib/allan_variance_ros/imu_simulator
[100%] Built target imu_simulator

最后更新一下环境变量就好了

source ./devel/setup.zsh

我是.zsh,你有可能是.bash或者其他。

扩展引申-catkin_make 的catkin build区别

catkin_make和catkin build都是用于编译ROS软件包的命令行工具,它们的主要区别在于:

  • 构建方式:catkin_make使用的是传统的Makefile方式进行构建,而catkin build则采用了CMake的更加现代化的构建方式,可以更好地支持并行编译和自定义编译选项。

  • 并行编译:catkin build支持并行编译,可以在多个CPU核心上同时编译不同的ROS软件包,从而提高编译速度。

  • 编译输出:catkin build生成的编译输出比catkin_make更加清晰、易于阅读和理解,可以更好地支持ROS软件包的自动化构建和集成测试。

  • 自定义选项:catkin build支持更多的自定义编译选项,例如编译器警告、编译优化、代码覆盖率等,可以更好地支持ROS软件包的质量控制和测试。

总的来说,catkin build比catkin_make更加现代、灵活和高效,对于大型ROS软件包的编译和集成测试来说,使用catkin build可以带来更好的效果和体验。

数据集的录制

需要至少3个小时数据集,将IMU放在平稳的桌面上。

rosbag record /imu -O ./IMU_Calibration_imsee_`date "+%Y%m%d-%H:%M:%S"`.bag

修改yaml文件

目录:/allan_variance_ros/config
修改成我们的自己的参数就好, 我是录制了将近10个小时

imu_topic: '/imu'
imu_rate: 200
measure_rate: 200 # Rate to which imu data is subsampled
sequence_time: 33693 # 3 hours in seconds

如何查看录制的rogbag的长度呢,先rosbag play --pause ./yours.bag,然后查看后面的Duration,向下取整即可

 [PAUSED ]  Bag Time: 1681146198.943360   Duration: 0.000000 / 33693.485264
 [PAUSED ]  Bag Time: 1681146198.943360   Duration: 0.000000 / 33693.485264 
 [PAUSED ]  Bag Time: 1681146198.943360   Duration: 0.000000 / 33693.485264 
 [PAUSED ]  Bag Time: 1681146198.943360   Duration: 0.000000 / 33693.485264  

结果运行

rosrun allan_variance_ros allan_variance [path_to_folder_containing_bag] [path_to_config_file]

这一步需要较多的时间运算,会产生.csv文件。
然后运行下面的命令,获取图表和kalibr适用的yaml文件,这样我们就能进行kalibr标定了

kanhao100@ubuntu-x86 ~/Allan_Variance_ROS
 % rosrun allan_variance_ros analysis.py --data /media/kanhao100/Disk/IMU_Calib_dataset/allan_variance.csv
ACCELEROMETER:
X Velocity Random Walk:  0.00119 m/s/sqrt(s)  0.07125 m/s/sqrt(hr)
Y Velocity Random Walk:  0.00116 m/s/sqrt(s)  0.06977 m/s/sqrt(hr)
Z Velocity Random Walk:  0.00115 m/s/sqrt(s)  0.06919 m/s/sqrt(hr)
X Bias Instability:  0.00017 m/s^2  2250.65952 m/hr^2
Y Bias Instability:  0.00013 m/s^2  1717.25184 m/hr^2
Z Bias Instability:  0.00023 m/s^2  2961.27446 m/hr^2
X Accel Random Walk:  0.00002 m/s^2/sqrt(s)
Y Accel Random Walk:  0.00002 m/s^2/sqrt(s)
Z Accel Random Walk:  0.00003 m/s^2/sqrt(s)
GYROSCOPE:
X Angle Random Walk:  0.00402 deg/sqrt(s)  0.24107 deg/sqrt(hr)
Y Angle Random Walk:  0.00403 deg/sqrt(s)  0.24179 deg/sqrt(hr)
Z Angle Random Walk:  1.10252 deg/sqrt(s)  66.15125 deg/sqrt(hr)
X Bias Instability:  0.00071 deg/s  2.55690 deg/hr
Y Bias Instability:  0.00111 deg/s  4.00401 deg/hr
Z Bias Instability:  0.25041 deg/s  901.47384 deg/hr
X Rate Random Walk:  0.00014 deg/s/sqrt(s)
Y Rate Random Walk:  0.00012 deg/s/sqrt(s)
Z Rate Random Walk:  0.02970 deg/s/sqrt(s)
Writing Kalibr imu.yaml file.
Make sure to update rostopic and rate.
imu.yaml
`#Accelerometer
accelerometer_noise_density: 0.0011875687094351768 
accelerometer_random_walk: 3.4507397639049556e-05 

#Gyroscope
gyroscope_noise_density: 0.019242619731178523 
gyroscope_random_walk: 0.000518288810809063 

rostopic: '/sensors/imu' #Make sure this is correct
update_rate: 400.0 #Make sure this is correct`

值得注意的是,自动生成的yaml文件还需要修改rostopic和update_rate,其不是自动填入的正确数据,需要根据自己的IMU设置进行手动修改。

请添加图片描述
请添加图片描述可以看到我这个Gyroscope是不对的,Z轴存在严重问题

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值