Pixhawk精准着陆之IRLock配置
安裝說明
- 下載Pixymon和pixy對應markone的固件,在這里。
固件必須是firmware_IRLOCKpixy_1.0.1.hex
irlock = markone
然后固件里 irlock = pixy
- 給Pixy刷固件的方法
打開PixyMon,將Pixy連接到電腦,然后長按Pixy上的按鈕,進入燒錄過程,松開按鈕并選擇下載好的Markone固件。
刷完固件后,重置Pixy
然后點擊 Raw video才能顯示可見光圖像
Markone上有29個紅外燈,正常情況下僅需要MarkOne的目標信息,因此需要在Pixy的鏡頭上加上紅外濾光片。
- 端口設置
pixy支持I2C、SPI以及串口三種輸出方式,點擊設置按鈕在Interface欄可以看到。將鼠標懸浮在data out port處時會出現相應端口的默認設定值,其中SPI為0,I2C為1….
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- 相機調焦
這一步非常重要
為了實現15米的測距精度,相機的棱鏡需要稍微不聚焦,這能夠讓MarkOne在相機視野中看上去更大,因此可以測得的距離更遠。
將MarkOne信標放到離相機10-15米遠的地方。將IR-Lock對準相機,打開Pixymon并點擊Display raw video來查看相機返回的視頻,可以發現MarkOne看上去像是一個白斑。
通過旋轉鏡頭對焦,直到MarkOne看上去非常清晰。在室外進行對焦更加簡單,因為你能在視頻中看到其他物體。如果你在室內,就只能看到MarkOne信標。完成對焦后,抄任意一個方向傳動棱鏡約1/4圈,這將使得棱鏡稍微不對焦。可以發現markOnede 形狀在返回的視頻中稍微變大了一些。
點擊Action欄下的Default program,你會發現能夠在15米內準確的檢測到IR-Lock.信標的位置由一個白色的方框表示。
視頻鏈接
硬件連接
IR-Lock可以使用3S電池供電,工作電壓范圍為10.2-18V DC。
IR-Lock與Pixhawk的連接示意圖如下
飛控固件&PL設置
精準著陸功能包含在AC3.3的修改版本中,而在AC3.4中,精準著陸已經成為默認的功能了(需要使用額外的距離測量模塊,例如SF10/A激光雷達、聲吶進行高度測量)。
AC3.3* PL固件(APM:Copter V3.3.3-rc2 IR-LOCK Firmware)
- Quad:Arducopter_PL_Quad_3.3.3-rc2.px4
- Source Code: Copter-3.3 Github
- Latest Commit: 593db3….
- 對開發者:如果想要自己編譯源碼,則需要修改一下子模塊中的irlock.cpp文件,將其替換為這個文件。代碼位置: ardupilot\modules\PX4Firmware\src\drivers\irlock
必要參數設置
燒好AC3.3* PL固件后,有三個參數需要修改。其中由兩個是使用精準著陸功能必須修改的,另一個參數控制精準著陸的下降速度
- PRECLND_ENABLED: 將此值置1
- PRECLND_SPEED: 這個參數不需要修改。它可以用于限制在精準著陸期間飛行器的水平速度,但目前在控制代碼中不使用。
- PRECLND_TYPE: 將此值設置成2。此參數對應IR-Lock的傳感器類型。
LAND_SPEED: 下降速度(cm/s)。該值可以降低到低至30cm / s。通常,較低的值可提高精準著陸的精度。
- 飛行模式
AC3.3 * PL固件中包含修改的飛行模式
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 backendif (!_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方向上相對于傳感器測量的與目標對象的角度。
當LAND模式啟動時,飛機開始向目標移動,將角度測量值向零驅動。通常觀察角度測量中的振蕩。
總結
以上是生活随笔為你收集整理的Pixhawk精准着陆之IRLock配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Epson机械手程序开发(2)软件和电脑
- 下一篇: QSetting的用法