1.ROS中摄像头的使用
创建一个catkin工作空间:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
编译工作空间:
cd ~/catkin_ws/
catkin_make (这里可以指定特定的包进行编译比如:catkin_make -DCATKIN_WHITELIST_PACKAGES="webots_ros")
source devel/setup.bash
下载摄像头源码https://github.com/ros-drivers/usb_cam
将包解压并放入上面的src
#打开一个窗口启动ros
roscore
#进入到刚才创建的工作空间
cd catkin_ws
#编译
catkin_make
#新打开一个窗口测试摄像头
roslaunch usb_cam usb_cam-test.launch
摄像头参数可在usb_cam-test.launch更改
再打开一个窗口输入rqt_graph查看消息,看到usb_cam节点向/usb_cam/image_raw发布了消息,image_view订阅了该消息,消息内容即为图像帧,由image_view显示
2.单目相机的标定
参考链接:https://blog.csdn.net/zhangqian_shai/article/details/86705754
#noetic摄像头标定工具安装
sudo apt-get install ros-noetic-camera-calibration
#启动摄像头
roslaunch usb_cam usb_cam-test.launch
#开始标定
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam
cameracalibrator.py 标定程序需要以下几个输入参数。
1)size:标定棋盘格的内部角点个数,这里使用的棋盘一共有多少行,每行有个内部角点。
2)square:这个参数对应每个棋盘格的边长,单位是米。
3)image和camera:设置摄像头发布的图像话题。
按照x(左右)、y(上下)、size(前后)、skew(倾斜)等方式移动棋盘,直到x,y,size,skew的进度条都变成绿色位置。
感觉差不多了就按下CALIBRATE按钮,等一段时间就可以完成标定。
完成后点击SAVE,然后再COMMIT,在终端后会有标定结果yaml文件地址.打开后,按照Asus.yaml的格式修改,命名为xx(名字自定).yaml,复制到/home/xxx/src/ORB_SLAM3/Examples/ROS/ORB_SLAM3目录下,标定完成。
注意:默认rosrun是调用/usr/bin/python,但是我的Ubuntu20.04没有那个文件,只有python2,python3,python3.8,这个时候我就找到 cameracalibrator.py文件,正常情况下的位置应该在/opt/ros/noetic/lib/camera_calibration/cameracalibrator.py,利用sudo vim cameracalibrator.py打开编辑后,把第一行改为:
3.双目相机的标定
cd catkin_ws/src
git clone https://github.com/ros-perception/image_pipeline.git
cd ..
rosdep install --from-paths src --ignore-src # 安装image_pipeline 所需的依赖
catkin_make
遇到打印信息:deprecated pixel format used, make sure you did set range correctly
解决方法,参考https://blog.csdn.net/elephant_why/article/details/103202631
{AVPixelFormat pixFormat;switch (avcodec_context_->pix_fmt) {case AV_PIX_FMT_YUVJ420P :pixFormat = AV_PIX_FMT_YUV420P;break;case AV_PIX_FMT_YUVJ422P :pixFormat = AV_PIX_FMT_YUV422P;break;case AV_PIX_FMT_YUVJ444P :pixFormat = AV_PIX_FMT_YUV444P;break;case AV_PIX_FMT_YUVJ440P :pixFormat = AV_PIX_FMT_YUV440P;break;default:pixFormat = avcodec_context_->pix_fmt;break;}avcodec_context_->pix_fmt = pixFormat;}
我用的普通摄像头,没有像realsense那样有专门的工具包,双目标定一直有问题,希望看到的给我个指引