[Calibración IMU] Usar Allan_Variance_ROS

Dirección de fuente abierta: https://github.com/ori-drs/allan_variance_ros

El autor dijo que la prueba pasó en ubuntu 20.04 y también puedo ejecutarla con éxito en ubuntu 18.04 LTS.

motivo de uso

Se dice que el efecto de imu_utils no es bueno, ahora use esta biblioteca de proyecto para la calibración, kalibr es aplicable

Problemas de encuentro

La compilación falla con 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

Tampoco funciona catkin_make.

可能的原因:
Tengo la respuesta. El paquete del que depende mi paquete no es el paquete ros/catkin. Entonces amento incapaz de encontrarlo. Para construir dichos paquetes, los siguientes argumentos de catkin deben pasar por primera vez en la construcción del espacio de trabajo de catkin.

catkin_make --cmake-args -DUSE_CATKIN=ON

Citado de: https://answers.ros.org/question/263381/catkin-unable-to-find-package-inside-workspace/

Hasta ahora, problema resuelto

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

Simplemente actualice la variable de entorno por fin

source ./devel/setup.zsh

Yo soy .zsh, tú puedes ser .bash o algo más.

Extensión de extensión: diferencia de construcción de catkin de catkin_make

Tanto catkin_make como catkin build son herramientas de línea de comandos para compilar paquetes de software ROS. Sus principales diferencias son:

  • Método de construcción: catkin_make usa el método tradicional Makefile para la construcción, mientras que catkin build usa un método de construcción más moderno de CMake, que puede admitir mejor la compilación paralela y las opciones de compilación personalizada.

  • Compilación paralela: catkin build admite compilación paralela, que puede compilar diferentes paquetes de software ROS en múltiples núcleos de CPU al mismo tiempo, mejorando así la velocidad de compilación.

  • Salida de compilación: la salida de compilación generada por catkin build es más clara, más fácil de leer y comprender que catkin_make, y puede admitir mejor la construcción automatizada y las pruebas de integración de los paquetes de software ROS.

  • Opciones personalizadas: catkin build admite más opciones de compilación personalizadas, como advertencias del compilador, optimización de compilación, cobertura de código, etc., que pueden respaldar mejor el control de calidad y las pruebas de los paquetes de software ROS.

En general, catkin build es más moderno, flexible y eficiente que catkin_make Para la compilación y las pruebas de integración de grandes paquetes de software ROS, el uso de catkin build puede brindar mejores resultados y experiencia.

Grabación de conjuntos de datos

Se requiere un mínimo de 3 horas de conjunto de datos para colocar la IMU en una mesa estable.

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

Modificar el archivo yaml

Directorio: /allan_variance_ros/config
solo modifiquelo a nuestros propios parametros, grabe durante casi 10 horas

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

Cómo verificar la longitud del rogbag grabado, primero rosbag play --pause ./yours.bag, luego verifique la siguiente Duración, solo redondee hacia abajo

 [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  

ejecución de resultados

rosrun allan_variance_ros allan_variance [path_to_folder_containing_bag] [path_to_config_file]

Este paso requiere más tiempo para calcular y generará un archivo .csv.
Luego ejecute el siguiente comando para obtener el gráfico y el archivo yaml aplicable a kalibr, para que podamos calibrar 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`

Vale la pena señalar que el archivo yaml generado automáticamente también debe modificar rostopic y update_rate, que no son los datos correctos que se completan automáticamente y deben modificarse manualmente de acuerdo con su propia configuración de IMU.

Por favor agregue una descripción de la imagen
Por favor agregue una descripción de la imagenPueden ver que mi Giroscopio esta mal, hay un problema serio con el eje Z

Supongo que te gusta

Origin blog.csdn.net/kanhao100/article/details/130073156
Recomendado
Clasificación