目录
- 一. 在ubuntu下使用kalibr标定
- realsense_ros的安装总结
- 下面是标定步骤
一. 在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的安装总结
- 创建工作站
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/
在src下添加下好的realsense_ros包 2.3.2版本
安装realsense_ros时
- 修改constants.h文件中的
rs405=0x0B5B
- 编译工程环境,安装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 查看现在版本号 是否对应
- 紧接着启用相机节点,添加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
是标定板的配置文件,注意如果选择棋格盘,注意targetCols
和targetRows
表示的是内侧角点的数量,不是格子数量。–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
标定完成