ROS与duckietbot指南-相机校准
ROS与duckietbot指南-相机校准
说明:
- 介绍如何校准相机
内部校准:
- 启动笔记本和duckietbot,并联网,同时下载校准的棋盘(calibration checkerboard)
- 步骤1:笔记本打开三个终端
- 步骤2:终端1执行,启动游戏杆
$ cd ~/duckietown
$ source environment.sh
$ roslaunch duckietown joystick.launch veh:=robot name
- 步骤3:终端2执行,相机校准
$ cd ~/duckietown
$ source environment.sh
$ source set_ros_master.sh robot name
$ roslaunch duckietown intrinsic_calibration.launch veh:=robot name raw:=true
将棋盘放在相机的前面,直到看到重叠在棋盘上的彩色线条。
如果整个棋盘在相机的视野范围内,您将只会看到彩色的线条。
您还应该在显示窗口的侧栏中看到彩色条。
这些条表示相机视野中棋盘的当前距离:
- X:观察到的水平范围(左右)
- Y:观察到的垂直范围(上下)
- Size:棋盘尺寸的观察范围(从相机方向向前 - 向后)
- Skew:棋盘与相机方向之间的相对倾斜度
此外,请确保通过将机械对焦环旋转到相机的镜头上来对焦图像。
现在向右/向左,向上/向下移动棋盘,并通过相对于图像平面的各种角度倾斜棋盘。
每次移动后,请确保暂停足够长的时间,以使棋盘变为突出显示。
收集足够的数据后,所有四个指示条将变为绿色。
按边栏中的“CALIBRATE”按钮。
校准可能需要一些时间。
请注意,屏幕可能会变暗。 不要担心,校准是否正常。
- 如果您对校准感到满意,可以按侧栏中的“COMMIT”按钮保存结果。
- 自动保存到
~/duckietown/catkin_ws/src/00-infrastructure/duckietown/config/baseline/calibration/camera_intrinsic/robot name.yaml
- 更新配置到github
$ git checkout -b git username-devel
$ git add ~/duckietown/catkin_ws/src/00-infrastructure/duckietown/config/baseline/calibration/camera_intrinsic/robot name.yaml
$ git commit -m "add robot name intrinsic calibration file"
$ git push origin git username-devel
- 并更新到树莓派本地
$ ssh username@robot name.local
$ cd ~/duckietown
$ git fetch
$ git checkout git username-devel
外部校准:
- 排列Duckiebot和棋盘。 请注意,车轮的轴线应与y轴对齐。
- 显示了Duckiebot的校准棋盘的视图。 为了确保正确的校准,在后面不要放杂物。
- 步骤1:在笔记本上打开四个终端
- 步骤2:终端1:启动游戏杆
$ cd ~/duckietown
$ source environment.sh
$ roslaunch duckietown joystick.launch veh:=robot name
- 步骤3:终端2:启动相机
$ cd ~/duckietown
$ source environment.sh
$ source set_ros_master.sh robot name
$ roslaunch duckietown camera.launch raw:=1 veh:=robot name
- 步骤4:终端3:启动ground_projection
$ cd ~/duckietown
$ source environment.sh
$ source set_ros_master.sh robot name
$ roslaunch ground_projection ground_projection.launch veh:=robot name local:=1
- 步骤5:终端4:检测
$ cd ~/duckietown
$ source environment.sh
$ source set_ros_master.sh robot name
$ rostopic list
- 效果:
/robot name/camera_node/camera_info
/robot name/camera_node/framerate_high_switch
/robot name/camera_node/image/compressed
/robot name/camera_node/image/raw
/robot name/camera_node/raw_camera_info
- ground_projection节点有两个服务。
- 它们在运行期间不使用。 它们只提供一个命令行界面来触发外部校准(并进行调试)。
$ rosservice list
- 效果:
/robot name/ground_projection/estimate_homography
/robot name/ground_projection/get_ground_coordinate
- 查看图像,rqt_image_view
$ rosrun rqt_image_view rqt_image_view
选择图像话题
/robot name/camera_node/image/compressed
执行命令:
$ rosservice call /robot name/ground_projection/estimate_homography
- 执行外部校准并自动保存到文件
~/duckietown/catkin_ws/src/00-infrastructure/duckietown/config/baseline/calibration/camera_extrinsic/robot name.yaml
- 文件提交到github,并更新到树莓派
参考:
- http://book.duckietown.org/master/duckiebook/camera_calib.html#sec:camera-calib
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号