image

RobotCup杯自主建图二维码标记功能实现


writerlIcht                      emaillIcht.gzl@gmail.com                 date:  2021.3.1

 

 

25

        参加RobotCup自主建图大赛,其中需要自主建图用geotiff格式地图以及识别出二维码并标记出来。针对硬件平台Jetson Nano以及cartographer配置了一套可行方法。

 

首先需要在小车摄像头画面中识别出二维码(识别过程)

第一步:驱动Jetson nano自带的的双目摄像头、捕捉到小车前方的画面 切入点:已知双目摄像头型号IMX219-83 Stereo Camera;应用平台为Ubuntu18.4 ROS版本为Melodic。 解决过程:找到该摄像头在ROS中的驱动功能包:jetson_camera 配置参数:该功能包中的launch文件jetson_camera.launch中可修改视频输出的分辨率、帧率、坐标名等。

第二步:在摄像头捕捉到的画面中识别出二维码 切入点:已有摄像头获取到的实时图像帧信息 解决过程:找到专门识别二维码图像的算法即zbar应用于ROS中的功能包:zbar_ros 配置参数:订阅图像话题名称:image (sensor_msgs/Image);发布识别出二维码的图像信息话题名:barcode (std_msgs/String);参数~throttle_repeated_barcodes:识别二维码的延时时间。

以上是识别过程,launch文件位置为:zbar_ros/launch/arcode.launch

 

二、捕捉到画面中的二维码后需要在slam生成的地图上标记出二维码当前的位置

第一步:生成geotiff格式的地图 切入点:每个ros中的slam算法都能发布map话题其中包含了ros中通用的地图信息。 解决过程:找到ros中能生成geotiff格式地图的功能包:hector_geotiff。但是使用该功能包需要使用两个service即:nav_msgs/GetMap和hector_nav_msgs/GetRobotTrajectory。然而小车所使用的slam方法是cartographer,不提供这两个服务。所以需要自行编写这两个服务(人不在实验室源码未贴出)。

第二步:在地图上标记二维码的位置 切入点:hector_geotiff源码中有在geotiff上绘制轨迹以及画标记的接口 解决过程:service/topic编程用容器记录识别二维码位置的x、y坐标,在调用hector_geotiff保存地图的时候使用geotiff_writer中的drawpath接口绘制出所有二维码的位置(人不在实验室源码未贴出)。

以上是标记过程,需要调用接口和编写相关程序,文件位置应该在Thinkpad小笔记本上

缺点:二维码位置还只是预估的,精度确实,假定小车通过摄像头图像识别二维码时二维码在小车正前方0.5m(对焦位置)。