安装依赖
sudo apt-get install -y \
git wget autoconf automake nano \
libeigen3-dev libboost-all-dev libsuitesparse-dev \
doxygen libopencv-dev \
libpoco-dev libtbb-dev libblas-dev liblapack-dev libv4l-dev
sudo apt-get install -y python3-dev python3-pip python3-scipy \
python3-matplotlib ipython3 python3-wxgtk4.0 python3-tk python3-igraph
建立工作空间
mkdir kalibr_workspace
cd kalibr_workspace
mkdir src
cd src
下载kalibr并编译
git clone https://github.com/ethz-asl/kalibr.git
catkin_make
source devel/setup.bash
或者直接把setup.bash加到~/.bashrc
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.025 --tspace 0.3 --eps
最终会在kalibr的工作空间下生成target.pdf
文件。
安装相机节点
sudo apt-get install ros-noetic-usb-cam
修改配置文件(主要是相机编号video_device
和分辨率,有时也需要修改图像编码pixel_format
)
roscd usb_cam
sudo gedit launch/usb_cam-test.launch
可以查询所有相机编号,我用的realsense D435i,RGB相机是video6(一个一个试出来的QAQ)
启动相机节点
roslaunch usb_cam usb_cam-test.launch
此时的ros节点如下图所是,后面需要用到的topic是图中红框圈起来的。
降低相机输出频率为4Hz
# rosrun topic_tools throttle messages [相机话题] 4.0 [自定义改变频率的相机话题名字]
# 此时要保证相机节点是启动的
rosrun topic_tools throttle messages /usb_cam/image_raw 4.0 /usb_cam/image_raw_throttle
录制bag
# rosbag record [相机话题] -O [保存的bag名字]
rosbag record /usb_cam/image_raw_throttle -O cam_calib.bag
设置标定板配置文件,保存为.yaml文件
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.025 #size of apriltag, edge to edge [m]
tagSpacing: 0.3 #ratio of space between tags to tagSize
相机标定
支持的相机模型
rosrun kalibr kalibr_calibrate_cameras \
--bag bag/cam_calib.bag \
--topics /usb_cam/image_raw_throttle \
--models pinhole-radtan \
--target config/apriltag.yaml \
--show-extraction
标定结果一般与bag文件保存在一起,以YAML格式储存的标定结果,它可以直接用来作为相机-IMU校正的输入;txt文件是相机标定的详细参数,重投影误差小于1个像素,该结果可用。
如果生成reporter报错,那么需要修改~/.config/qt5ct/qt5ct.conf
配置文件,将style=Fusion
改为 style=gtk3
**安装imu串口通信 **
sudo apt install ros-noetic-serial
获取imu串口号,图中是ttyACM0
,有些教程显示的是ttyUSB0
,是一样的。
使用轮趣科技N100_imu,下载官方的ROS_SDK,百度网盘链接:https://pan.baidu.com/s/1TLguF28svpFfcGHnBRzLgQ?pwd=q9dp,提取码:q9dp
建立新的工作空间,把/fdilink_ahrs_ROS1/fdilink_ahrs
复制到工作空间/src
下,然后catkin_make
编译,编译成功后记得把/devel/setup.bash
文件source
一下,或者加到~/.bashrc
中。
修改/home/zxc/imu_workspace/src/fdilink_ahrs/launch
目录下的ahrs_data.launch
文件,主要修改端口号,与上一步的串口号对应。
注意:每次重新接IMU时要设置一下权限
sudo chmod 666 /dev/ttyACM0
启动imu节点
roslaunch fdilink_ahrs ahrs_data.launch
可以用rostopic echo /imu
打印信息
rviz可视化
打开rviz,添加imu,设置话题,Global Options
固定坐标系设置为gyro_link
静置imu,录制bag,尽量时间长一点,录制2h左右。
rosbag record /imu -O imu.bag
由于imu_utils
依赖code_utils
,所以必须先编译code_utils
,后编译imu_utils
,此外code_utils
依赖ceres
,需要先全局安装ceres
安装依赖
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
下载编译
wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar -zxvf ceres-solver-1.14.0.tar.gz
cd ceres-solver-1.14.0
mkdir build
cd build
cmake ..
make -j8
sudo make install
安装依赖
sudo apt-get install libdw-dev
下载code_utils
git clone https://github.com/gaowenliang/code_utils.git
编译code_utils
需要修改部分文件
CMakeLists.txt
修改set(CMAKE_CXX_FLAGS “-std=c++11”)为set(CMAKE_CXX_FLAGS “-std=c++14”)
src/sumpixel_test.cpp
修改头文件
#include "backward.hpp"
为#include “code_utils/backward.hpp”
添加头文件:
#include"opencv2/imgcodecs/legacy/constants_c.h"
CV_MINMAX
改为NORM_MINMAX
src/mat_io_test.cpp
CV_LOAD_IMAGE_UNCHANGED
改为cv::IMREAD_UNCHANGED
CV_LOAD_IMAGE_GRAYSCALE
改为cv::IMREAD_GRAYSCALE
由于我把这个包放在之前imu的工作空间下了,所以单独编译
catkin_make -DCATKIN_WHITELIST_PACKAGES="code_utils"
下载imu_utils
git clone https://github.com/gaowenliang/imu_utils.git
编译imu_utils
需要修改2个文件
CMakeLists.txt
修改
set(CMAKE_CXX_FLAGS "-std=c++11")
为set(CMAKE_CXX_FLAGS "-std=c++14")
src/imu_an.cpp
添加头文件:
#include
也单独编译
catkin_make -DCATKIN_WHITELIST_PACKAGES="imu_utils"
新建一个launch文件
按照如下设置,主要修改IMU话题名称和标定文件保存的位置。
启动标定
roslaunch imu_utils calibrate.launch
rosbag play -r 200 imu.bag // 200 倍速播放rosbag
标定完结果会保存在launch文件设置的存储位置,一堆txt文件和一个yaml文件。
启动相机、imu节点
roslaunch usb_cam usb_cam-test.launch
rosrun topic_tools throttle messages /usb_cam/image_raw 4.0 /cam
roslaunch fdilink_ahrs ahrs_data.launch
录制bag
rosbag record /imu /cam -O cam_imu.bag
充分激励imu六个轴的运动,参考B站搬运视频,俯仰角、偏航角、横滚角、上下平移、左右平移、前后平移,各弄三次,幅度尽量大一点,之后再混合运动三次,录制时间大概一两分钟。
Kalibr标定
需要三个配置文件:标定板配置文件、imu内参文件、相机内参文件;
一个bag文件:imu和相机联合录制的bag
rosrun kalibr kalibr_calibrate_imu_camera \
--imu /home/zxc/kalibr_workspace/config/imu.yaml \
--cam /home/zxc/kalibr_workspace/config/cam_calib-camchain.yaml \
--target /home/zxc/kalibr_workspace/config/apriltag.yaml \
--bag /home/zxc/kalibr_workspace/bag/cam_imu.bag --show-extraction
注意:
(1)imu和相机内参文件包含了imu和相机节点话题,要和录制bag时候的话题对应
(2)相机的配置文件可以直接用相机标定生成的.yaml文件,imu的配置文件需要修改成如下格式
#Accelerometers
accelerometer_noise_density: 5.43036e-03 #Noise density (continuous-time)
accelerometer_random_walk: 1.44598e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 4.9700e-03 #Noise density (continuous-time)
gyroscope_random_walk: 6.8522e-05 #Bias random walk
rostopic: /imu #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the values above)
相机标定https://blog.csdn.net/yangjinghui2019/article/details/130727459
N100在ROS下通信 http://www.jnnr.cn/a/605589.html
ubuntu安装ceres库https://blog.csdn.net/szylight2022/article/details/127313907
IMU标定https://blog.csdn.net/qq_39607707/article/details/125061020#t7
IMU和相机联合标定https://rupingcen.blog.csdn.net/article/details/109592631