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.
Pueden ver que mi Giroscopio esta mal, hay un problema serio con el eje Z