开源地址: 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轴存在严重问题

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: