利用px4flow实现四旋翼室内定点悬停

摘自:https://blog.csdn.net/zhengyuxin0507/article/details/81416465

利用px4flow实现四旋翼室内定点悬停
zheng_zju 2018-08-04 23:46:56 4827 收藏 23
版权

    最近博主在玩一个无人机比赛,需要完成一些室内飞行的任务。于是,为了增强飞行的可靠性,用到了px4flow光流模块,当然这需要和pixhawk飞控来配套使用。首先简单介绍一下这个模块,它是基于光流不不变性假设,求解xy平面的速度。px4flow还自带超声波模块,用于测量高度。所以,飞控只要使xy平面速度为0,且高度不变,就能实现室内定点悬停。该模块的详细说明可以参考http://www.pixhawk.com/zh/modules/px4flow

调试这个模块的时候,也遇到了不少坑,在此罗列一下,免得以后我忘记了再踩一遍。。。
1 如何用QGroundControl来启用光流模块?

    博主在网上搜资料的时候,铺天盖地都是MP怎么启用光流模块的资料,但很少有人说QGroundControl怎么启用它。其实,个人认为,QGroundControl要比MP来得简洁好用很多(个人观点,不喜勿喷),所以一定想把这个坑踩了。

    跟大家推荐这篇文章http://ardupilot.org/copter/docs/common-px4flow-overview.html,从模块说明、驱动安装、测试方法、测试视频都有,非常全,博主是按照他的说明一步一步来的。但是,重点来了,他并没有告诉我们如何用QGroundControl来enable光流模块。博主就去自己倒腾了一番,总算找到了enable的方式。其实跟MP一样,只要改一个参数就可以啦。如图所示,我们只要修改EKF2_AID_MASK参数为2,即开启光流,禁用gps就可以啦。

2 px4flow的供电问题

   其实这是一个坑点。我把px4flow直接接到I2C接口上,然后解锁,发现飞控一直报错,报错信息是电压低。我很无语,查了资料,发现还真有人跟我出过同样的问题。这里吐槽一下px4,在设计飞控的扩展模块的时候,并未考虑硬件稳定性。我尝试了电源再分一路给px4flow供电,效果也并不理想,依旧会出现电压低的报错信息。后来,我发现,把数传拔了,就能成功解锁了。推测原因应该是数传分走了飞控的一部分电流。说实话这个真的是玄学,将就着用吧,反正没数传也不影响飞行。

    最后,经过了几天的调试,飞机终于在室内能够定点悬停了。悬停时的效果和px4flow的demo效果差不多,我把动图也传上来,大家可以在动图上看看。

    点赞 7
    评论 24
    分享
    收藏 23

————————————————
版权声明:本文为CSDN博主「zheng_zju」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhengyuxin0507/article/details/81416465

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
mini四轴飞行器除了在室外各种超炫动作,但在室内若想不碰壁,就要求mini四轴飞行器具有悬停功能,四轴要有定高功能?小四轴不像大四轴有完善的GPS模块,而且小四轴的重量也很难加装GPS。这个时候选择智能光学流动传感器PX4Flow就是比较好的方案了。 PX4Flow是一款智能光学流动传感器。传感器拥有原生 752×480 像素分辨率,计算光学流的过程中采用了4倍分级和剪裁算法,计算速度达到250Hz(白天,室外),具备非常高的感光度。与其他滑鼠传感器不同,它可以以120Hz(黑暗,室内)的计算速度在室内或者室外暗光环境下工作,而无需照明LED。你也可以对它重新编程,用于执行其他基础的,高效率的低等级机器视觉任务。 PX4Flow主要特征: MT9V034机器视觉CMOS传感器,全局快门 4×4分级图像算法,光流运算速度从120Hz(室内)至250Hz(室外) 高感光度,24×24 μm高像素 板载16位精度陀螺,最大感应角速率2000°/s,最大数据更新速度780 Hz,默认使用高精度模式时最大角速率500°/s 板载输入输出一体化超声波传感器 USB bootloader USB数据波特率最高921600(包含地面站软件QGroundControl所使用的摄像机实时视角) USB供电模式 电路板开孔适合MatrixVision Bluefox MV(摄像机中心作为基准) 电路城语:此资料为卖家免费分享,不提供技术支持,请大家使用前验证资料的正确性!如涉及版权问题,请联系管理员删除! 附件包含以下资料:
以下是一个简单的C++程序,它使用mavros库向PX4飞控发布指令,让四旋翼无人机悬停: ```c++ #include <ros/ros.h> #include <mavros_msgs/CommandBool.h> #include <mavros_msgs/CommandTOL.h> #include <mavros_msgs/OverrideRCIn.h> int main(int argc, char **argv) { // 初始化ROS节点 ros::init(argc, argv, "hover"); ros::NodeHandle nh; // 发布mavros命令 ros::Publisher rc_pub = nh.advertise<mavros_msgs::OverrideRCIn>("/mavros/rc/override", 10); ros::Publisher arming_pub = nh.advertise<mavros_msgs::CommandBool>("/mavros/cmd/arming", 10); ros::Publisher set_mode_pub = nh.advertise<mavros_msgs::SetMode>("/mavros/set_mode", 10); // 等待连接到飞控 while(ros::ok() && !ros::service::exists("/mavros/set_mode", true)) { ROS_INFO("Waiting for service /mavros/set_mode to become available"); ros::Duration(1).sleep(); } // 解锁飞控 mavros_msgs::CommandBool arming_cmd; arming_cmd.request.value = true; if(!arming_pub.call(arming_cmd) || !arming_cmd.response.success) { ROS_ERROR("Failed to arm the vehicle"); return -1; } // 将飞控模式设置为悬停模式 mavros_msgs::SetMode set_mode_cmd; set_mode_cmd.request.custom_mode = "ALT_HOLD"; if(!set_mode_pub.call(set_mode_cmd) || !set_mode_cmd.response.success) { ROS_ERROR("Failed to set the vehicle mode to ALT_HOLD"); return -1; } // 发布悬停指令 mavros_msgs::OverrideRCIn rc_cmd; rc_cmd.channels[0] = 1500; // 油门通道,1500表示无动作 rc_cmd.channels[1] = 1500; // 副翼通道,1500表示无动作 rc_cmd.channels[2] = 1500; // 方向舵通道,1500表示无动作 rc_cmd.channels[3] = 1500; // 升降舵通道,1500表示无动作 rc_cmd.channels[4] = 1500; // 油门自动控制通道,1500表示关闭自动控制 rc_cmd.channels[5] = 1500; // 油门自动控制通道,1500表示关闭自动控制 rc_cmd.channels[6] = 1500; // 油门自动控制通道,1500表示关闭自动控制 rc_cmd.channels[7] = 1500; // 油门自动控制通道,1500表示关闭自动控制 rc_pub.publish(rc_cmd); // 等待5秒钟 ros::Duration(5).sleep(); // 关闭无人机 arming_cmd.request.value = false; if(!arming_pub.call(arming_cmd) || !arming_cmd.response.success) { ROS_ERROR("Failed to disarm the vehicle"); return -1; } return 0; } ``` 这个程序首先通过mavros库初始化ROS节点,并创建了三个发布器,用于发布解锁飞控、设置飞控模式和控制指令。接下来,程序进入一个while循环,等待连接到飞控。一旦连接成功,程序发送解锁指令并等待响应。如果解锁成功,则将飞控模式设置为悬停模式,并等待响应。最后,程序使用mavros库的OverrideRCIn消息类型发布了一个悬停的控制指令。这个指令将无人机的所有通道都设定为1500,表示无动作。程序等待5秒钟后,发送一个解锁指令将无人机关闭。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值