• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

使用Realsense 测试 aruco 包

人工智能 合工大机器人实验室 2091次浏览 0个评论

aruco是一种类似二维码的定位标记辅助工具,通过在环境中部署Markers,可以辅助机器人进行定位,弥补单一传感器的缺陷,纠正误差。在之前的手眼标定easy_handeye程序中,需要使用这个工具进行手眼标定。正好手上有realsense深度相机,就根据资料进行了简单的测试。如下图是手眼标定程序包中的一段:  
  通过github下载aruco相关的ROS包,里面会提供现成的Markers,也可以通过aruco包自己生成,或者通过网站http://chev.me/arucogen/可以生成这种图案.该包应用的场景很多,很重要的功能就是物体位姿估计对物体进行定位。从GitHub上下载包后,里面包括了三个包,其中aruco包中只有一个可运行的节点,发现官网文档没细说,我简单的看了以下程序,发现可以通过运行该节点并指定参数来生成图案:  

$ rosrun aruco optimalmarkers 1 marker 500
第一个参数是生成图案的个数   
第二个参数是名称+标记id      
第三个参数是输出标记图像的像素大小  

 
  另外一个msgs包不用细看:   * aruco_ros/Marker.msg   Header header uint32 id geometry_msgs/PoseWithCovariance pose float64 confidence   * aruco_ros/MarkerArray.msg   Header header aruco_ros/Marker[] markers   重点关注aruco_ros这个包:包中有三个launch文件,分别是single、double、publish,原本的用例是通过USB摄像头工作的,对于realsense或者其他相机,就需要修改参数,修改single.launch如下:  

<launch>
 
    <arg name="markerId"        default="582"/>
    <arg name="markerSize"      default="0.034"/>    <!-- in m -->
    <arg name="eye"             default="left"/>
    <arg name="marker_frame"    default="aruco_marker_frame"/>
    <arg name="ref_frame"       default=""/>  <!-- leave empty and the pose will be published wrt param parent_name -->
    <arg name="corner_refinement" default="LINES" /> <!-- NONE, HARRIS, LINES, SUBPIX -->
 
 
    <node pkg="aruco_ros" type="single" name="aruco_single">
<!--        <remap from="/camera_info" to="/stereo/$(arg eye)/camera_info" />-->
<!--        <remap from="/image" to="/stereo/$(arg eye)/image_rect_color" />-->
        <remap from="/camera_info" to="/camera/color/camera_info" />
        <remap from="/image" to="/camera/color/image_raw" />
        <param name="image_is_rectified" value="True"/>
        <param name="marker_size"        value="$(arg markerSize)"/>
        <param name="marker_id"          value="$(arg markerId)"/>
        <param name="reference_frame"    value="$(arg ref_frame)"/>   <!-- frame in which the marker pose will be refered -->
<!--        <param name="camera_frame"       value="stereo_gazebo_$(arg eye)_camera_optical_frame"/>-->
        <param name="camera_frame"       value="/camera_link"/>
        <param name="marker_frame"       value="$(arg marker_frame)" />
        <param name="corner_refinement"  value="$(arg corner_refinement)" />
    </node>
 
</launch>
 

  即将原本的usb或者stereo换成realsense发布的信息,将相机坐标系更换成camera_link:  

<remap from="/camera_info" to="/camera/color/camera_info" />        
<remap from="/image" to="/camera/color/image_raw" />
 
<param name="camera_frame"       value="/camera_link"/>

  接下来依次启动节点,让相机观察图案:  

$ roslaunch realsense2_camera rs_camera.launch
 
# 不指定参数,使用默认参数
$ roslaunch aruco_ros single.launch 
# 或指定参数
$ roslaunch aruco_ros single.launch markerId:=26 markerSize:=0.08 eye:="right"
# 或指定姿态相对的参考坐标系
$ roslaunch aruco_ros single.launch markerId:=26 markerSize:=0.08 eye:="right" ref_frame:=/base_link
 
# 观察识别效果
$ rosrun image_view image_view image:=/aruco_single/result
 
# 查看位姿
$ rostopic echo /aruco_single/pose

  如图所示可以检测到Marker,并识别出其ID,但是对于普通usb摄像头要想得到pose,还需要使用ROS的标定工具对摄像头进行标定,获取其相机内参和畸变系数,标定完成后文件会默认保存在~/.ros/camera_info/head_camera.yaml。如果没有进行标定,在启动摄像头时也会提示~/.ros/camera_info/head_camera.ya不存在。参考:https://blog.csdn.net/learning_tortosie/article/details/83147232  
  对于realsense之类的深度相机,出厂就有默认标定好的参数了,所以不需要像usb摄像头那样,只要launch文件中的参数设置正确,就可以获取pose信息,对于测试所用的图案的参数<arg name=”markerId”        default=”582″/>,注意ID要匹配  


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明使用Realsense 测试 aruco 包
喜欢 (0)

您必须 登录 才能发表评论!

加载中……