开源地址: 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轴存在严重问题
相关文章
发表评论