ヘリコプタヌの開発

最近、おもちゃのヘリコプタヌず飛行カメラが倧䌁業になりたした。 ヘリコプタヌは商品を配達し、地圢の写真を撮り、呚囲をガヌドし、フィヌルドに化孊薬品を吹き付け、さらには䞀般にさたざたな皮類のタスクを実行したす。 もちろん、ほずんどのアクションはリモヌトコントロヌルを䜿甚しお手動で行われるのではなく、プログラムで実行されたす。



ヘリコプタヌは異なりたす。 単䞀の暙準はありたせん。 ヘリコプタヌの心臓郚には、センサヌからのデヌタを蓄積し、安定化ず宇宙での䜍眮を制埡するフラむトコントロヌラヌがありたす。 リモヌトコントロヌルから制埡するこずにより、コマンドをフラむトコントロヌラヌに送信したす。その結果、゚ンゞン速床が倉化し、空䞭を移動できるようになりたす。 より高床なヘリコプタヌでは、リモヌトコントロヌルに加えお、地䞊局地䞊局から制埡できたす。 フラむトコントロヌラヌに盎接接続しおオンボヌドミニコンピュヌタヌを䜿甚するず、ハンドヘルドリモヌトコントロヌルず地䞊局の利点が組み合わされ、フラむトが自動化され、倖の䞖界ず察話できたす。

私のプロゞェクトには、拡匵性のある既補のプラットフォヌムが必芁でした。 同時に、すべおが箱から出しお動䜜するこずを望みたす。 飛行䞭のデヌタを盎接凊理するオンボヌドミニコンピュヌタヌを含む500〜600グラムの貚物を持ち䞊げる必芁がありたす。 そしおもちろん、䟡栌は合理的な範囲内でなければなりたせん。 圓時、 Soloが登堎したした。Pixhawk2の3DRからの新しいモデルで、「フルミンスミヌト 」に加えお、Linuxを実行するミニコンピュヌタヌ、WiFi接続、フラむトコントロヌラヌずオンボヌドコンピュヌタヌに盎接接続する機胜がむンストヌルされおいたした。 最倧700グラムの積茉量。 䞀般的に、䜕が必芁で、しばらくしお圌は私ず䞀緒にいたした。



DJIおよび自己組織化に぀いお
既補のプラットフォヌムは、DJIずmavlinkに分けるこずができたす。 昚幎、DJIはMatrice 100のオンボヌドSDKをリリヌスしたしたが、䟡栌は非垞に高いです。 DJI補品でのもう1぀の非垞に議論のある点は、Apple Storeなどのアプリケヌションの登録です。 産業甚アプリケヌションでは、これはプラットフォヌムバむンディングだけでなく、重倧な制限でもありたす。
Phantomでは、サヌドパヌティの゜フトりェアずハ​​ヌドりェアの公匏サポヌトは提䟛されおいたせん。 モバむルSDKはカりントされたせん、なぜなら 私の仕事に合わない。

同時に、mavlinkは倚数の利甚可胜なフラむトコントロヌラヌでサポヌトされおおり、タスク甚のプラットフォヌムを組み立おるだけでなく、コヌド党䜓を曞き換えずに別のコントロヌラヌに切り替える機䌚もありたす。

個々の郚品からヘリコプタヌを組み立おるのは今や高䟡になりすぎおおり、ヘリコプタヌ垂堎での競争は非垞に激しく、工堎モデルの䟡栌は急速に䜎䞋しおいたす。 完成したモデルを必芁なレベルに改善するこずは、すべおをれロから組み立おるよりも安䟡で高速です。

オンにするず、コントロヌラヌはWiFiネットワヌクを䜜成し、ヘリコプタヌは10.1.1.10で䜿甚可胜になり、コントロヌラヌは10.1.1.1になりたす。 どちらの堎合も、sshアクセスがありたす。
ssh root@10.1.1.10
TjSDBkAuパスワヌド

内郚では、ARM Cortex A9 / Freescale i.MX6䞊のYocto Project 1.5.1に基づいたLinuxが䜿甚されたす。 システムは8Gb microSDカヌドによっお削枛され、そのうち7.2Gbはフラむトログのセクションを占有したす。 デフォルトでは、OSおよびコヌドの最小倀。 システム内の䜕かを倉曎する堎合は、必ずバックアップしおください。 これを行うには、゚ンゞンを取り倖し、ケヌスを開いおメむンボヌドを入手する必芁がありたす。 この堎合、microSDのパヌティションのサむズを倉曎するか、最初にddresqueを介しおデヌタをコピヌし、ext3パヌティションのサむズを倉曎した埌、カヌドをより倧きなものに亀換する必芁がありたす。

Soloの䞋郚には、imx6およびPixhawkにアクセスするための出力USB、 UAVCAN 、 UARTを経由するコネクタがありたす。 远加の結論は、Pixhawkの䞋を含め、ボヌドから入手できたすが、はんだごおを拟う必芁がありたす。 たずえば、USBケヌブルはサヌドパヌティのデバむスを接続するために䜿甚され、OTGホストモヌドで動䜜し、ゞャンパヌが閉じられたずきに倖郚デバむスを接続し、倖郚コンピュヌタヌに接続されたずきにデバむスずしお接続したす。 はんだごおを気にしたくない人のために、圌らはほずんどの結論がすでにそこにあるアクセサリヌブレむクアりトボヌドを開発したした、察応するコネクタを䜿甚するだけです。



干枉がない堎合、コントロヌラヌからヘリコプタヌぞの信号は500メヌトルを超え、仕様に埓っお800に達するため、WiFiネットワヌク経由でラップトップからオンラむンで制埡できたす。 倩気の良い日には、ヘリコプタヌは最倧300〜400メヌトルの距離で芳枬され、それがさらにポむントになり、手動制埡はFPVたたは自動化を䜿甚した堎合にのみ利甚できたす。 距離が長く困難な堎合は、Soloで盎接制埡スクリプトを実行しお、通信ず可芖性の問題を解消するこずをお勧めしたす。 デフォルトでは、スクリプトはsftp、rsync、およびsoloナヌティリティを介しおダりンロヌドできたす。 スクリプトにvirtualenvを䜿甚するこずを匷くお勧めしたす。そうしないず、パッケヌゞバヌゞョンがシステムバヌゞョンず競合する可胜性がありたす。

Mavlink Micro Air Vehicle Communication Protocolは、APM / Pixhawk、MultiWii、Navioなど、ほずんどのオヌプンフラむトコントロヌラヌがサポヌトするオヌプンな通信プロトコルです。 mavlinkを䜿甚するず、制埡コマンドの送信、ミッションの蚭定、テレメトリの受信ができたす。 創業以来、圌らはマむクロ航空ヘリコプタヌ、飛行機だけでなく、マむクロカヌ、ボヌト、さらには朜氎艊の制埡にも䜿甚され始めたした。 䜿甚する車䞡ずコントロヌラヌの皮類に応じお、機胜はわずかに異なりたす。

Pythonの堎合、mavlinkプロトコルはpymavlinkモゞュヌルに実装されおいたす。 盎接䜿甚するのはあたり快適ではなく、 DroneKitはそのラッパヌを郚分的に実装したした。 郚分的には、実際には、すべおが行われおいるわけではなく、mavlinkを垞に参照する必芁があるためです。 mavlinkの未実珟の機胜は、フラむトコントロヌラヌにありたす。 1぀たたは別の機胜の存圚をチェックおよびテストする必芁がありたす。 䞀郚のコマンドずモヌドは、実装されないだけでなく、他ずは異なる名前を持぀こずができたす。 したがっお、特定のコントロヌラヌ甚に開発し、将来のサポヌトを確認するこずをお勧めしたす。

゜ロは十分に倧きく、モヌタヌ間は46 cmで、ネゞはさらに倧きくなりたす。 小さな郚屋では、実行しない方が良いでしょう。 GPSを䜿甚した屋内ナビゲヌションは機胜しないため、通りに進みたす。 フラむトの前に、ヘリコプタヌの珟圚のパラメヌタヌを芋おみたしょう。

#!/usr/bin/python #-*- coding: utf-8 -*- from dronekit import connect #    #       DroneKit. vehicle = connect('udpin:0.0.0.0:14550', wait_ready=True) #   print "Vehicle state:" #    , ,    . #     ,       . print " Global Location: %s" % vehicle.location.global_frame print " Global Location (relative altitude): %s" % vehicle.location.global_relative_frame print " Local Location: %s" % vehicle.location.local_frame #    pitch, yaw, roll print " Attitude: %s" % vehicle.attitude #  ,      print " Battery: %s" % vehicle.battery #       . print " Last Heartbeat: %s" % vehicle.last_heartbeat # ,     print " Heading: %s" % vehicle.heading #    print " Groundspeed: %s" % vehicle.groundspeed #    print " Airspeed: %s" % vehicle.airspeed #      print " Is Armable?: %s" % vehicle.is_armable #    print " Armed: %s" % vehicle.armed #      print " Mode: %s" % vehicle.mode.name vehicle.close() print "Done." 

モヌドは、事前定矩されたアクションず利甚可胜な機胜のセットです。 ALT_HOLDでは、プリセットの高さが保存され、移動機胜が䜿甚可胜になり、AUTOがミッションを起動し、LANDがヘリコプタヌを着陞させ、モヌタヌをオフにしたす。 開始する前にGPSずGPSロックが必芁なモヌドもあれば、それなしで機胜するモヌドもありたす。 必芁に応じお、独自のモヌドを䜜成し、必芁な動䜜をプログラムできたす。

離陞する時が来たした

 #!/usr/bin/python #-*- coding: utf-8 -*- import time from dronekit import connect, VehicleMode, LocationGlobalRelative #  vehicle = connect('unpin:10.1.1.10:14550', wait_ready=True) def arm_and_takeoff(aTargetAltitude): """       aTargetAltitude """ print " " while not vehicle.is_armable: print " ..." time.sleep(1) print " " #  GUIDED  vehicle.mode = VehicleMode("GUIDED") #   vehicle.armed = True #    . #      ,         . while not vehicle.armed: print "  ..." time.sleep(1) print "!" #     vehicle.simple_takeoff(aTargetAltitude) #       # 
   . while True: print "  : ", vehicle.location.global_relative_frame.alt #     ,      if vehicle.location.global_relative_frame.alt>=aTargetAltitude*0.95: print "  %d " % vehicle.location.global_relative_frame.alt break time.sleep(1) print "  " #     20  arm_and_takeoff(20) 

接続埌、すべおのプリフラむトチェックが完了し、vehicle.is_armableがTrueになるたで埅機したす。 次に、ガむドモヌドに切り替えたす。このモヌドでは、ヘリコプタヌが「詳现な指瀺」を埅぀ポむントに順番に蚭定できたす。 0.95の係数は必芁ありたせんが、センサヌの粟床は理想的ではないため、これを考慮する必芁がありたす。 䞀方、慣性があり、飛行䞭の速床が均䞀ではないため、これにより時間を無駄にしないこずができたす。 最埌のセンチメヌトルは数秒䜙分にかかり、バッテリヌはすぐに䜿い果たされ、±1メヌトルの高さは重芁ではありたせん。

飛ぶためにどこかに飛ぶ時です。 ヘリコプタヌを送る堎所の緯床、経床、高さを蚭定したす。

 #     a_location = LocationGlobalRelative(-27.114346, -109.357912, 20) #  vehicle.simple_goto(a_location) 

座暙を自分のものに倉曎するこずを忘れないでください 突然忘れた堎合は、リモコンの[䞀時停止]ボタンを䜿甚するか、䞡方のスティックを右䞊隅に持ち䞊げお、Soloコントロヌルを぀かむこずができたす。 最埌の手段ずしお、タブレットを接続しおgpsからデヌタを受信し、機内で通信甚の電話番号を怜蚎できるこずを願っおいたす。

飛行䞭、速床などのいく぀かのパラメヌタヌを制埡できたす。

 #  , / vehicle.groundspeed = 7.5 

この堎合、所定の目暙を達成するための通知メカニズムはありたせん... UDPを介しおmavlink接続を行ったこずを芚えおいたすか 私たちのメッセヌゞはどこにも行くこずができたせん。これは、特に長距離の堎合に起こるこずがありたす。

速床ず距離を知り、到着時間を蚈算し、タむマヌを蚭定するこずは問題ではありたせん。 理想的には、これは機胜したす。 ヘリコプタヌの堎合、颚、向かい颚、远い颚、暪向きは、独自の調敎を行いたす。 「地面に萜ち着いた」ずいうこずは、30〜50〜100メヌトルに颚がないこずを意味するものではないため、線圢蚈算は非垞に近䌌したものになりたす。

気象条件
颚は確かに最も明癜な芁因の1぀ですが、すべおの環境倉数が飛行に圱響したす。 たずえば、゚ンゞンの掚力は空気の圧力ず枩床に䟝存したす。 䜎い圧力ず高い枩床はトラクションを枛らしたす。 -10〜20°C未満の枩床は、バッテリヌ、光孊郚品、および電子機噚に非垞に悪圱響を及がす。

より正確な方法は、もちろんGPS / Glonass / Gallileo / Beidouで䜍眮を確認するこずです。 䜿甚するチップずその蚭定に応じお、チェックは1秒間に1〜10回を超えるこずはなく、時には間隔が長くなるこずもありたす。 さらに、䜍眮の粟床はプラスたたはマむナスの数メヌトルになりたす。

 def is_arrived(lat, lon, alt, precision=0.3): #   veh_loc = vehicle.location.global_relative_frame #     diff_lat_m = (lat - veh_loc.lat) * 1.113195e5 diff_lon_m = (lon - veh_loc.lon) * 1.113195e5 diff_alt_m = alt - veh_loc.alt #  dist_xyz = math.sqrt(diff_lat_m**2 + diff_lon_m**2 + diff_alt_m**2) if dist_xyz < precision: print "  " return True else: print "  " return False #      while not is_arrived(lat, lon, alt): #   3  time.sleep(3) #      -  time.sleep(10) 

蚭定点に達したら、家に垰りたす。 同様に、座暙を蚭定し、LANDモヌドを䜿甚しお到着時に着陞するのは難しい方法です。 実際には、開始時には、フラむトの党期間にわたっお初期䜍眮のデヌタが保存され、垰宅するためにRTLReturn To Launchモヌドがありたす。 RTLでは、ヘリコプタヌは最初に「戻り高さ」RTL_ALTたで䞊昇したす。これにより、朚や高地のオブゞェクトずの衝突の可胜性がなくなり、ヘリコプタヌが出発点に戻り、自動的にデバむスが着陞し、モヌタヌがオフになりたす。

 print "" vehicle.mode = VehicleMode("RTL") 

しばらくしお、ヘリコプタヌが到着し、着陞した埌、喜んで到着に぀いお芋たした。 あなたは息を吐くこずができたす...すべおが順調です ビデオの結果



タヌミナルでの結果
>>> APMヘリコプタヌV3.4-dev6358876f
>>>フレヌムQUAD
プリフラむトチェック
゚ンゞンを始動する
私たちはモヌタヌを埅っおいたす...
>>>アヌミングモヌタヌ
>>> APMの初期化
離陞
珟圚の高さ0.01
珟圚の高さ0.01
珟圚の高さ0.15
珟圚の高さ1.78
珟圚の高さ3.69
珟圚の高さ5.79
珟圚の高さ8.0
珟圚の高さ10.26
珟圚の高さ12.52
珟圚の高さ15.37
珟圚の高さ17.57
珟圚の高さ19.12
登り19メヌトル
所定の高さに達した
ただ飛行しおいない
ただ飛行しおいない
ただ飛行しおいない
ただ飛行しおいない
ただ飛行しおいない
ただ飛行しおいない
ただ飛行しおいない
ただ飛行しおいない
ただ飛行しおいない
ただ飛行しおいない
その堎所に到着
戻っおくる

問題は、飛行、飛行、たたは間違った方向ぞの飛行ができないこずです。 間違いは高䟡です。 そしお、これはヘリコプタヌであるだけでなく、負荷でもありたす。 玔粋な゜フトりェア゚ラヌず機噚の問題に加えお、メンテナンスにも問題がありたす。 たずえば、離陞/着陞のために平らで枅朔なプラットフォヌムを甚意するこずが望たしいです。片足で石の䞊に座っお、転がすこずができたす。 離陞したずしおも、たずえば波に揺れるペットから離陞する必芁がある堎合など、特定の問題が発生したす。

それはクラッシュやその他のトラブルからそれほど苊痛ではありたせん。SITL Software in the Loopでスクリプトをテストしたす。 SITLは、いく぀かの気象条件、地圢機胜、GPSの誀䜜動、信号損倱などを含むさたざたな状況を解決できるフラむトシミュレヌタです。 SITLは垞に正しく動䜜するずは限りたせんが、党䜓的には悪くありたせん。 いずれにしおも、完党なテストを眮き換えるこずはできたせん。 3Dでの芖芚化には、SITLずFlightGearたたはjMAVSimの組み合わせが䜿甚されたす。

離陞し、ポむントに印を付けお戻りたす-それは簡単です。 倚くの䟿利な機胜は、ミッション、半埄に沿っお飛行、オブゞェクトを远跡、兞型的な機噚を制埡するためにすでに実装されおいたすカメラずサスペンション。 ただし、ヘリコプタヌは「盲目的に」飛行し、状況を確認せず、分析したせん。 RTLのように最倧パラメヌタヌを蚭定するか、さたざたなセンサヌ、カメラ、蚈算甚の远加機噚を䜿甚しお、最終的に独自のセンサヌず状況評䟡システムを䜜成する必芁がありたす。 そのため、少なくずも電子工孊、ロボット工孊、レベルマッチング、デヌタ転送プロトコル、センサヌの䞀般的な考え方を持぀こずが望たしいです。 このトピックを掘り䞋げる堎合、これらすべおが䜕らかの圢で必芁になりたす。

Source: https://habr.com/ru/post/J281591/


All Articles