具有四月标签板检测的 ROS
Last updated
Last updated
本维基页面描述了如何设置能够实现室内自主飞行的系统。该系统基于带有Raspberry Pi 3和USB摄像头的四轴飞行器。来自相机的图像用于计算树莓派上的姿势估计,结果作为MAVLink消息发送到飞行控制器。 相机是向下看的,在地板上有一个AprilTag板,如下所示:
系统使用 ROS 来完成它必须执行的所有任务。来自USB相机模块的图像由usb_cam节点捕获,apriltag_ros节点计算姿势估计,然后由vision_to_mavros节点处理,并使用MAVROS将相关消息发送到飞行控制器。所有这些ROS软件包都在Raspberry Pi 3上运行。
节点发布和主题,节点订阅这些主题并向主题发布camera_pose消息,将ROS消息转换为MAVLink消息并发送到飞控。usb_camcamera/imagecamera/camera_infoapriltag_rosmavros/vision_pose/posemavros
消息SET_GPS_GLOBAL_ORIGIN和SET_HOME_POSITION在系统准备好运行之前发送。将 EKF 设为主页的两种方法:
使用任务规划器(右键单击>设置 EKF 主页>设置原点)
与脚本set_origin.py。
四轴飞行器上的飞行控制器和树莓派 3 通过串行端口连接,而树莓派 3 和台式电脑通过 WiFi 连接。台式 PC 仅用于配置和可视化目的。RViz用于ROS中的PC可视化。
配备Pixhack自动驾驶仪,CUAV PX4FLOW和TeraRanger One的小型四轴飞行器。通过此设置,您可以按照维基使用 PX4FLOW 实现非 GPS 飞行。
Raspberry Pi 3 Model B,配备运行Ubuntu Mate 16.16的04GB micro SD卡,连接到朝向地面的USB摄像头,相机的x轴在右侧。
注意
除了朝下之外,相机的安装方向没有硬性限制,但需要进行帧转换以对齐帧以适应不同的相机方向。
为您的相机安装 ROS 驱动程序:
对于 USB 摄像头:sudo apt-get install ros-kinetic-usb-cam
对于RPi相机模块:您可以按照此说明启用相机,然后安装raspicam_node。
按照 ROS 维基校准并获取相机的校准文件。
将 gsoc.launch 文件中的 替换为校准文件的正确路径。camera_info_url param
提示
预生成的标签图像可以在apriltag-imgs上找到。您还可以使用四月标签生成来设计自己的标签。
使用地面站(即任务规划器)连接到飞行控制器,并检查是否设置了如下所示的参数:
首先,让我们分别测试每个 ROS 节点并修复出现的任何问题:
usb_cam
节点:
在 RPi 上:roslaunch usb_cam usb_cam-test.launch
如果 RPi 未连接到显示器,请在使用 Linux Ubuntu 的 PC 上查看原始图像:export ROS_MATER_URI=http://<rpi-ip>:11311 && rqt_image_view
验证是否有来自相机的图像。
MAVROS
节点:
在 RPi 上:roslaunch mavros apm.launch fcu_url:=<tty-port>:<baud-rate>
验证 MAVROS 是否运行正常。例如,应显示 FCU 是“已连接的”。rostopic echo /mavros/state
Apriltag node
和节点:vision_to_mavros
确保指向相机校准文件的正确路径。camera_info_url
在 RPi 上:roslaunch vision_to_mavros apriltags_to_mavros.launch
打开 RViz 并查看和主题。使用 ,您应该会看到相机在标签框中摆姿势,z 轴朝下。如果您的相机的 x 轴指向右侧,则将与机身框架对齐。如果相机的 x 轴指向不同的方向,则需要相应地修改 的参数。/tf/mavros/vision_pose/pose/tf/mavros/vision_pose/posevision_to_mavros
如果每个节点都能成功运行,则可以执行接地测试:
在 RPi 上:如上所述启动所有节点。查看有关 RViz 的主题。移动车辆,看看姿势是否根据运动而变化。/mavros/vision_pose/pose
通过SET_GPS_GLOBAL_ORIGIN和SET_HOME_POSITION发送 MAVLink 消息将 EKF 设置为主页。
使用任务规划器:右键单击地图上的任意点> >。Set Home HereSet EKF Origin Here
使用代码:您可以使用此 Python 脚本set_origin.py。
安装 :按照此处的说明进行操作。pymavlink
运行脚本:。rosrun vision_to_mavros set_origin.py
设置EKF的原点后,地图上将出现一个四轴飞行器图标。
举起载具,四处移动,同时将标签板保持在摄像机的视野中,并在任务规划器上观察载具的轨迹。
如果最后一步成功,您可以继续进行飞行测试。
在稳定状态下起飞以检查四轴飞行器是否稳定。
在摄像机可以很好地查看标签的高度处,切换到 Alt-Hold 以调整水平位置。观察RViz和任务规划器上的反馈,看看是否检测到标签。
查看任务规划器地图,确认系统仍在跟踪。
切换到 Loiter,但随时准备在出现任何问题时切换回 Alt-Hold。
否则,四轴飞行器应稳定悬停在标签上方。
注意
对于EKF接受的外部导航数据,数据速率需要高于某个阈值(通常为10Hz)。如果您也使用 RPi,首先我们需要调整与计算成本相关的参数以实现可接受的检测率,要么通过增加 ,这将以降低准确性为代价提高检测率,要么增加,如果您没有运行任何其他东西并且有一些 CPU 备用。相关的优化参数位于文件 settings.yaml 中。tag_decimatetag_threads