简介
Apriltag是一种视觉基准系统,应用于机器视觉领域,如机器人导航,无人机定位等。Apriltag由一系列的二维码标签组成,每个标签都有一个唯一的ID,识别效率挺高的。
配置环境
机载电脑 ubuntu18.04/20.04
px4固件飞控
飞行平台
机载电脑需配置ROS+mavros+apriltag_ros
mavros安装参考: https://blog.csdn.net/2301_76165902/article/details/132591112?spm=1001.2014.3001.5502
配置流程分为源码安装和二进制(apt)安装
主要安装相机驱动和apriiltag 推荐二进制安装,简单省时!
源码安装
相机安装
cd catkin_ws/src #安装在一个ROS工作空间上
git clone https://github.com/bosch-ros-pkg/usb_cam.git #下载源码
cd .. #回到工作空间
ctakin_make #进行编译
cd usb_cam
mkdir build
cd build
cmake ..
make
测试
roslaunch usb_cam usb_cam.launch #启动launch文件
打开rqt,测试相机图像
rqt_image_view
apriltag安装
先安装依赖
git clone https://github.com/AprilRobotics/apriltag.git # 这个不是ros的功能包
cd apriltag
mkdir build
cd build
cmake ..
make
sudo make install
克隆功能包
git clone https://github.com/AprilRobotics/apriltag_ros.git
在工作空间编译
catkin_make
二进制安装
sudo apt install ros-$ROS_DISTRO-usb-cam
sudo apt install ros-$ROS_DISTRO-apriltag-ros
在终端用roscd进入apriltag_ros
输入ls查看目录!
这里提供了launch文件,不需要自己再次编写
可以修改config配置文件和launch文件
在tags.yaml中修改要识别的ID
tag_bundles:
[
{
name: 'my_bundle',
layout:
[
{id: 0, size: 0.05, x: 0.0000, y: 0.0000, z: 0.0, qw: 1.0, qx: 0.0, qy: 0.0, qz: 0.0}
]
}
]
在最里面添加id即可
修改continuous_detection.launch文件
<launch>
<arg name="launch_prefix" default="" /> <!-- set to value="gdbserver localhost:10000" for remote debugging -->
<arg name="node_namespace" default="apriltag_ros_continuous_node" />
<arg name="camera_name" default="/usb_cam" />
<arg name="image_topic" default="/image_raw" />
<!-- Set parameters -->
<rosparam command="load" file="$(find apriltag_ros)/config/settings.yaml" ns="$(arg node_namespace)" />
<rosparam command="load" file="$(find apriltag_ros)/config/tags.yaml" ns="$(arg node_namespace)" />
<node pkg="apriltag_ros" type="apriltag_ros_continuous_node" name="$(arg node_namespace)" clear_params="true" output="screen" launch-prefix="$(arg launch_prefix)" >
<!-- Remap topics from those used in code to those on the ROS network -->
<remap from="image_rect" to="$(arg camera_name)/$(arg image_topic)" />
<remap from="camera_info" to="$(arg camera_name)/camera_info" />
<param name="publish_tag_detections_image" type="bool" value="true" /> <!-- default: false -->
</node>
</launch>
改成对应的相机图像话题
测试使用
roslaunch usb_cam usb_cam.launch #打开相机
roslaunch apriltag_ros continuous_detection.launch #开启识别
打开rqt
rqt_image_view
可以订阅/tag_detections话题获取相机坐标
无人机辅助定位
模拟无人机在高空中失去GPS信号,依靠地面上的apriltag码辅助定位。
如何订阅话题/tag_detections
apriltag_ros::AprilTagDetection marker;
void apriltag_cb(const apriltag_ros::AprilTagDetectionArray::ConstPtr &msg)
{
int count = msg->detections.size();
if(count!=0)
{
for(int i = 0; i<count; i++)
{
marker = msg->detections[i];
if(marker.id == current_target_id)
{
marker_found = true;
detec_x = marker.pose.pose.pose.position.x;
detec_y = marker.pose.pose.pose.position.y;
detec_z = marker.pose.pose.pose.position.z;
}
}
//ROS_INFO("detec_x=%.2f,detec_y=%.2f,detec_z=%.2f",detec_x,detec_y,detec_z);
}
else
{
marker_found = false;
}
}
其中current_target_id为想要识别的ID
进入/opt/ros/melodic/share/apriltag_ros/msg,查看AprilTagDetection.msg
注意这里的id数据类型为vector,不是int型,注意定义。
可以查看源码,如有错误请指正。
github网址https://github.com/jiezz12/apriltag_location.git
如果有帮助请点一个star,感谢。
补充
本人为二进制下载的,因为源码下载依赖存在报错,遂二进制下载。