ROS 实验 - 普通摄像头做 AR tag 跟踪

9920阅读 0评论2019-08-02 iibull
分类:其他平台

用了下 D435 + ar-track-alvar, 两个单独开还好, 全开发现 四核CPU 都是 100%.

发现在开启了 realsense2 的 
关键是这两个项目还不得不开, 否则 ar-track-alvar 得不到响应的话题数据.
暂时对源码不熟悉, 无法优化, 网上也没有什么资料, 实验下用普通摄像头的效果如何.
其实修改 ar_track_alvar的  参数可以把CPU降到 80%, 但是刷新率太低了.
=========================================================
sudo apt-get install ros-kinetic-ar-track-alvar ros-kinetic-usb-cam
 启用 摄像头, 使用的默认设置, 应该需要改动 usb_cam_node 的配置 
roslaunch usb_cam usb_cam-test.launch  文件大概内容

点击(此处)折叠或打开

  1. <launch>
  2.   <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
  3.     <param name="video_device" value="/dev/video0" />
  4.     <param name="image_width" value="640" />
  5.     <param name="image_height" value="480" />
  6.     <param name="pixel_format" value="yuyv" />
  7.     <param name="camera_frame_id" value="usb_cam" />
  8.     <param name="io_method" value="mmap"/>
  9.   </node>
  10.   
  11.   <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
  12.     <remap from="image" to="/usb_cam/image_raw"/>
  13.     <param name="autosize" value="true" />
  14.   </node>
  15. </launch>
=========================================================
### usb_cam_ar_track.launch.  

点击(此处)折叠或打开

  1. <launch>
  2.     <node pkg="tf" type="static_transform_publisher" name="world_to_cam" args="0 0 0 0 0 0 map usb_cam 10" />
  3.     //map usb_cam 都是 frame_id. 这里切记 args 里边的结果 x,y,z 以及rpy会累加计算到

  4.     <arg name="marker_size" default="12.0" />
  5.     <arg name="max_new_marker_error" default="0.05" />
  6.     <arg name="max_track_error" default="0.05" />
  7.     <arg name="cam_image_topic" default="/usb_cam/image_raw" />
  8.     <arg name="cam_info_topic" default="/usb_cam/camera_info" />
  9.     <arg name="output_frame" default="/map" />
  10.     <node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen">
  11.         <param name="marker_size" type="double" value="$(arg marker_size)" />
  12.         <param name="max_new_marker_error" type="double" value="$(arg max_new_marker_error)" />
  13.         <param name="max_track_error" type="double" value="$(arg max_track_error)" />
  14.         <param name="output_frame" type="string" value="$(arg output_frame)" />
  15.         <remap from="camera_image" to="$(arg cam_image_topic)" />
  16.         <remap from="camera_info" to="$(arg cam_info_topic)" />
  17.     </node>
  18. </launch>
roslaunch usb_cam_ar_track.launch 
=========================================================
rostopic echo /ar_pose_marker 可看到输出的信息. 记得先要完成标定啊各位. 向下看两行
RViz 中应该可以看到 关于 的TF信息.
=========================================================
摄像头标定camera calibration, 解决畸变问题
https://blog.csdn.net/heyijia0327/article/details/43538695
一定要标定, 否则是读不到
自己用word A4打印了一 张 10行x8列的正方形黑白块图. 每个块的边长为 2.42厘米.
启动了 usb_cam 后, 确认没有加载 head_camera.yaml, 然后执行
rosrun camera_calibration cameracalibrator.py --size 9x7 --square 0.0242 image:=/usb_cam/image_raw camera:=/usb_cam
x详细内容参考 
注意 9x7 是内部角点, 即黑白块交叉的十字架的个数.
square 为边长.
然后在可见的可视窗口中, 不断移动标定板出现在视野中的左边,右边,上边和下边,标定板既有倾斜的,也有水平的
界面中的, 并还要有棋盘占住大部分视野的图片
x:表示标定板在视野中的左右位置。
y:表示标定板在视野中的上下位置。
size:标定板在占视野的尺寸大小,也可以理解为标定板离摄像头的远近。
skew:标定板在视野中的倾斜位置
不断移动标定板,直到CALIBRATE按钮变亮,点击该按钮就会进行标定。标定过程将持续一两分钟,并且标定界面会变成灰色,无法进行操作,耐心等待即可
标定完成以后,你将看到窗口中的图像为标定后的结果,纠正了畸变

点击COMMIT按钮将结果保存到默认文件夹. /home/user/.ros/camera_info/head_camera.yaml

重启 usb_cam/ar_track_alvar 即可读取打印的标签了

CPU  4x25% 
rostopic hz /ar_pose_marker
subscribed to [/ar_pose_marker]
average rate: 8.010

上一篇:ROS 使用 奥比中光 astra_camera + ar_track_alvar
下一篇:ROS 导航 move_base costmap planner 的调试说明