一. 在ubuntu下使用kalibr标定

Realsense官网上librealsense现在D405只接受ROS2下的环境(相机确实很新)

在ROS1下我想到了改设备ID号的方式进行标定

这里需要注意librealsense以及realsense_ros的版本对应问题,一定要注意这点不然后面roslaunch会报错

D405没有IMU所以标定会简单一些

这里我的librealsense的版本选用的是 2.50.0的版本 realsense_ros选用的是2.3.2的版本

虽然这里不支持D405,但是后面我们可以通过改ID的方式进行roslaunch,不用重装ROS2

libreansense 的安装方法不过多介绍了,可以去看其它博主说的

这里的话我先空着后面总结

realsense_ros的安装总结
1.创建工作站

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/

在src下添加下好的realsense_ros包 2.3.2版本

安装realsense_ros时

2.修改constants.h文件中的

 rs405=0x0B5B

3.编译工程环境,安装realsense_ros

catkin_init_workspace
cd ..
catkin_make clean
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install

如果说你重新安装了librealsense版本,那么这里需要重新对realsense_ros进行编译

这里我之前没注意对应问题,重新装了librealsense
那么就涉及到librealsense的卸载问题

a. 如果您使用了apt-get安装,请运行以下命令卸载

sudo apt-get remove librealsense2-utils
sudo apt-get remove librealsense2-dev
sudo apt-get remove librealsense2-dkms
sudo apt-get remove ros-${ROS_DISTRO}-realsense2-camera

其中${ROS_DISTRO}应替换为您正在使用的ROS发行版,例如melodic或noetic。

b. 如果您手动编译和安装了librealsense和realsense-ros,则可以使用以下命令删除文件:

sudo rm -rf /usr/local/include/librealsense2
sudo rm -rf /usr/local/lib/librealsense*
sudo rm -rf /usr/local/share/realsense-ros

如果您在 ~ /.bashrc或~/.bash_profile中设置了环境变量,请删除与RealSense相关的行。

如果还有残留可以直接在ubuntu内搜索librealsense,直接删除所有跟版本号有关的文件,直到无法直接roslaunch 启动相机节点。紧接着再进行librealsense正确版本的安装。

安装完新的librealsense,在终端启动realsense-viewer 查看现在版本号 是否对应

4.紧接着启用相机节点,添加rviz话题是否正常

roslaunch realsense2_camera rs_camera.launch

rostopic list
#查看话题列表

rviz
#打开rviz订阅几个节点就可以看到效果


下面安装kalibr,这里也不过多介绍

下面是标定步骤
用工具生成标定板

cd ~/kalibr_workspace   //你的工程路径
source ./devel/setup.sh
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.022 --tspace 0.3

步骤一:建立的ROS中的Kalibr的工作空间,新建april_6x6_A4.yaml文件,格式参考上图的yaml,这个是写你标定板的参数内容,和上面的对应,等会传入系统,内容为:

target_type: 'aprilgrid' #gridtype
tagCols: 6                   #number of apriltags
tagRows: 6                 #number of apriltags
tagSize: 0.022            #size of apriltag, edge to edge [m]
tagSpacing: 0.3          #ratio of space between tags to tagSize

测量实际长度后,请自行更改 yaml文件内参数

步骤二:确定realsense D405放在合适位置

新打开终端,运行rviz

rviz

在rviz中将Global Option中的Fixed Frame后面选择camera_link(我这边出错,不选问题不大)

点击Add在topic中分别选择

/camera/color/image_raw、/camera/infra1/image_rect_raw、/camera/infra2/image_rect_raw,打开(双击camera)即添加成功。

如果没有发现infra的, 需要修改节点名称为true, 并重新编译realsense_ros


步骤三:修改相机帧数(官方推荐是4Hz,尽管实际频率不完全准确,但是不影响结果)

rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color

rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 4.0 /infra_left

rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 4.0 /infra_right

步骤四:录制ROS数据包

使用Ctrl+shift+T,打开另一个新的终端运行

rosbag record -O multicameras_calibration /infra_left /infra_right /color

后面三个topic就是转换频率后的topic,我录制了3分钟,录的时候对着标定板移动,按下ctrl+c 结束录制,看到当前文件夹会出现multicameras_calibration.bag文件。

步骤五:使用Kalibr标定

先激活环境变量

source ~/kalibr_workspace/devel/setup.bash

然后运行:

rosrun kalibr kalibr_calibrate_cameras --target checkerboard.yaml --bag  multicameras_calibration.bag --models pinhole-equi pinhole-equi pinhole-equi --topics /infra_left /infra_right /color --bag-from-to 10 100 --show-extraction --approx-sync 0.04

我直接用kailr_calibrate_cameras会提示找不到这个命令,后面发现必须在rosrun下进行

除此之外,这里我提示rosbag中没找到infra_right的节点

然后我改用了下面的代码

rosbag record -O multicameras_calibration /infra_left /color
rosrun kalibr kalibr_calibrate_cameras --target april_6x6_A4.yaml --bag  multicameras_calibration.bag --models pinhole-equi pinhole-equi pinhole-equi --topics /infra_left /infra_right /color --bag-from-to 10 100 --show-extraction

其中–target …/yaml/april_6x6_A4.yaml是标定板的配置文件,注意如果选择棋格盘,注意targetColstargetRows表示的是内侧角点的数量,不是格子数量。–bag multicameras_calibration.bag是录制的数据包,models pinhole-equi pinhole-equi pinhole-equi表示三个摄像头的相机模型和畸变模型(解释参考https://github.com/ethz-asl/kalibr/wiki/supported-models,根据需要选取), —topics /infra_left /infra_right /color表示三个摄像头对应的拍摄的数据话题,–bag-from-to 10 100表示处理bag中10-100秒的数据。–show-extraction表示显示检测特征点的过程,这些参数可以相应的调整。

最终得到的结果为三个文件:

camchain-multicameras_calibration.yaml

report-cam-multicameras_calibration.pdf

results-cam-multicameras_calibration.txt

标定完成