Pixhawk精准着陆之IRLock配置

sensorandMarkers01

pixy

安装说明

  • 下载Pixymon和pixy对应markone的固件,在这里

固件必须是firmware_IRLOCKpixy_1.0.1.hex

irlock = markone

然后固件里 irlock = pixy

  • 给Pixy刷固件的方法

打开PixyMon,将Pixy连接到电脑,然后长按Pixy上的按钮,进入烧录过程,松开按钮并选择下载好的Markone固件。

刷完固件后,重置Pixy

reset

然后点击 Raw video才能显示可见光图像

raw

Markone上有29个红外灯,正常情况下仅需要MarkOne的目标信息,因此需要在Pixy的镜头上加上红外滤光片。

  • 端口设置

pixy支持I2C、SPI以及串口三种输出方式,点击设置按钮在Interface栏可以看到。将鼠标悬浮在data out port处时会出现相应端口的默认设定值,其中SPI为0,I2C为1….

configureparams

SPI、I2C、串口的协议输出的帧完全相同,每个帧中的对象按大小排序,最大的对象先发送。小端形式发送,一个新的换帧有两个同步信号0xaa55表示

Bytes    16-bit words   Description
----------------------------------------------------------------
0, 1     0              sync (0xaa55)
2, 3     1              checksum (sum of all 16-bit words 2-6)
4, 5     2              signature number
6, 7     3              x center of object
8, 9     4              y center of object
10, 11   5              width of object
12, 13   6              height of object

focus

code

  • 相机调焦

这一步非常重要

为了实现15米的测距精度,相机的棱镜需要稍微不聚焦,这能够让MarkOne在相机视野中看上去更大,因此可以测得的距离更远。

将MarkOne信标放到离相机10-15米远的地方。将IR-Lock对准相机,打开Pixymon并点击Display raw video来查看相机返回的视频,可以发现MarkOne看上去像是一个白斑。

通过旋转镜头对焦,直到MarkOne看上去非常清晰。在室外进行对焦更加简单,因为你能在视频中看到其他物体。如果你在室内,就只能看到MarkOne信标。完成对焦后,抄任意一个方向传动棱镜约1/4圈,这将使得棱镜稍微不对焦。可以发现markOnede 形状在返回的视频中稍微变大了一些。

点击Action栏下的Default program,你会发现能够在15米内准确的检测到IR-Lock.信标的位置由一个白色的方框表示。

视频链接

硬件连接

power

IR-Lock可以使用3S电池供电,工作电压范围为10.2-18V DC。

IR-Lock与Pixhawk的连接示意图如下

connect

port

directrion

飞控固件&PL设置

精准着陆功能包含在AC3.3的修改版本中,而在AC3.4中,精准着陆已经成为默认的功能了(需要使用额外的距离测量模块,例如SF10/A激光雷达、声呐进行高度测量)。

  • AC3.3* PL固件(APM:Copter V3.3.3-rc2 IR-LOCK Firmware

  • 必要参数设置

    烧好AC3.3* PL固件后,有三个参数需要修改。其中由两个是使用精准着陆功能必须修改的,另一个参数控制精准着陆的下降速度

param

  • PRECLND_ENABLED: 将此值置1
  • PRECLND_SPEED: 这个参数不需要修改。它可以用于限制在精准着陆期间飞行器的水平速度,但目前在控制代码中不使用。
  • PRECLND_TYPE: 将此值设置成2。此参数对应IR-Lock的传感器类型。
  • LAND_SPEED: 下降速度(cm/s)。该值可以降低到低至30cm / s。通常,较低的值可提高精准着陆的精度。

    • 飞行模式

    AC3.3 * PL固件中包含修改的飞行模式

modes

  • LAND: 飞机中心对准IR目标下降,同时以参数PREC_LND SPEED中规定的下降速率下降。应用滚动或俯仰将立即禁用自动精准着陆控制。

  • LOITER: 在保持高度的同时,中心在IR目标上。应用滚动或俯仰将立即禁用自动精度着陆控制。

  • AUTO (LAND): 当执行脚本任务时,LAND命令将使对角线对准IR对象,同时以参数PREC_LND SPEED中规定的下降速率下降。

    出现异常,请切换到Stabilize模式

    首次飞行时,可以使用STABLIZE模式起飞并手动将飞机飞到MarkOne信标上方附近。然后切换到LOITER或者LOITER模式。如果信标在传感器视觉范围内,你会看到飞机会朝着信标移动。

    注意: 如果你在LOITER/LAND模式下触碰了横滚或俯仰摇杆,精准着陆控制将失效。

    • PL日志解读

记录的精准着陆变量可以在“PL”标题下找到。

bX/bY: Angle-to-target measurement in the body-frame reference BEFORE accounting for roll/pitch of copter.在考虑飞机的横滚、俯仰之前测得的机体坐标系中距目标的角度。

eX/eY: Angle-to-target measurement in the earth-frame reference AFTER accounting for roll/pitch of copter.考虑飞机的横滚、俯仰之后测得的地球坐标系中距目标的角度。

pX/pY: Calculated distance of target from copter in earth-frame. Note that the distance calculation depends on the altitude measurement. Also, the altitude variable in this particular instance is range limited, such that a negative value or very small value is not used to calculate the position.算得的在地球坐标系中目标与飞机直接的距离。注意距离的测量取决于高度的测量。同时,在这个特殊实例中的高度变量范围有限,因此将不使用负值或非常小的值来计算位置。

 // get body-frame angles to target from backend
    if (!_backend->get_angle_to_target(_bf_angle_to_target.x, _bf_angle_to_target.y)) {
        _have_estimate = false;
    }

  float x_rad = _bf_angle_to_target.x - _ahrs.roll;
  float y_rad = -_bf_angle_to_target.y + _ahrs.pitch;

    // rotate to earth-frame angles
    _ef_angle_to_target.x = y_rad*_ahrs.cos_yaw() - x_rad*_ahrs.sin_yaw();
    _ef_angle_to_target.y = y_rad*_ahrs.sin_yaw() + x_rad*_ahrs.cos_yaw();

    // get current altitude (constrained to no lower than 50cm)
    float alt = max(alt_above_terrain_cm, 50.0f);

    // convert earth-frame angles to earth-frame position offset
    _target_pos_offset.x = alt*tanf(_ef_angle_to_target.x);
    _target_pos_offset.y = alt*tanf(_ef_angle_to_target.y);
    _target_pos_offset.z = 0;  // not used

下图显示了5次连续精准着陆。绿线表示飞机的高度。红线(’bX’)表示传感器在x方向上相对于传感器测量的与目标对象的角度。

log

当LAND模式启动时,飞机开始向目标移动,将角度测量值向零驱动。通常观察角度测量中的振荡。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值