おそらく、必要に応じて、誰もが今すぐクアドロコプターで飛ぶことができます。 しかし、自律制御の問題を解決するために、リモートコントロールのスティックを動かしてドローンを絶えず監視する必要はありません-この設定では、ソリューションは多くのリソースを必要とする場合があります:購入、組み立て、はんだ付け、構成、離陸、落下、落下後-サイクルの最初に戻ります。
Aeronetの審査員/教師にプロジェクトを教える際、すでに基本的な知識を持っているロボット工学/コンピューターサイエンスの教師向けに、無人車両の「トピックへのエントリ」プログラミングを簡素化する必要があります。
ドローンフライトのプログラミングの基本を学ぶ簡単な方法があります。これは、仮想シミュレーション環境であり、この記事で使用方法を段階的に説明します。
基本的なドローンプログラミングスキルをアップグレードするために何かを購入する必要はありません。PX4プロジェクトのjMAVSimドローンシミュレーターを使用するだけです。 PX4は、飛行と地上移動の両方のさまざまな無人車両で使用するために設計された強力なオープンソースソフトウェアスイートです。 プロジェクトソフトウェアのソースコードはGithubにあります。
当初、PX4の作成者は開発環境としてLinux Ubuntu LTSを推奨しています。 Macのサポートもあります。 今年、Windows用のシミュレーションおよび開発環境がCygwinに登場しました。これにより、コンピューターサイエンスの授業でWindowsを使用するロシアの教育機関の生活が簡素化されます。
次に、LinuxおよびWindowsでシミュレーターをインストール、ビルド、実行するプロセスを見ていきます。
Linux UbuntuでのjMAVSimのインストールと実行
PX4開発者は、標準システムとしてLinux Ubuntu 16.04 LTSを推奨しています。 Linuxでは、サポートされているすべてのシステム(NuttX、Qualcomm Snapdragon Flight、Linux、シミュレーション環境、ROSに基づくハードウェアプラットフォーム)のPX4パッケージを構築できます。
まず、ダイヤルアウトグループにユーザーを追加します。
sudo usermod -a -G dialout $USER
変更を有効にするためにシステムにログインしましょう。
jmavsimを含むPixhawk / NuttXの開発ツールチェーンは、 ubuntu_sim_nuttx.shスクリプトを使用して自動的にインストールされます。 スクリプトをユーザーディレクトリにダウンロードし、コマンドを使用して実行する必要があります
source ubuntu_sim_nuttx.sh
スクリプトからの質問はすべて肯定的に回答されます。
スクリプトの最後に、コンピューターを再起動します。
フライトを制御し、ビルドするコントローラーのソースコードをダウンロードすることは残ります。
githubでPX4フライトコントローラーソフトウェアリポジトリを複製します。
git clone https://github.com/PX4/Firmware.git
ファームウェアフォルダーには、フライトコントローラー(およびシミュレーター)で実行される完全なソースコードがあります。 将来的には、学習と修正の両方の目的で役立ちます。 ファームウェアリポジトリのコピーされたフォルダーに移動します。
cd src/Firmware
シミュレーターをコンパイルして実行します。
make px4_sitl jmavsim
最初のコンパイルプロセスには時間がかかります。 正常に完了すると、PX4コンソールが画面に表示されます。
コンソールにコマンドを入力して、ドローンを飛行中に送信できます。
pxh> commander takeoff
ドローン-コマンドcommander land
、シミュレーションの停止-CTRL + Cまたはコマンドのshutdown
。
WindowsにjMAVSimをインストールして実行する
PX4 Cygwinツールボックスは2018年に登場しました。 これは、Windows用のPX4をコンパイル/開発する最も強力な方法です。 インストールするには、 GithubまたはAmazonからインストールファイルをダウンロードして実行します。
デフォルトでは、ツールチェーンはC:\ PX4フォルダーにインストールされます。
インストーラの最後のステップで、「PX4リポジトリのクローンを作成し、jMAVSimでシミュレーションをビルドおよび実行する」ボックスをチェックできます(PX4リポジトリをクローンし、jMAVSimシミュレータをコンパイルして実行します)。
開発環境は、インストールディレクトリ(デフォルトではC:\ PX4)のrun-console.batファイルを使用してCygwinで起動されます。
インストールプロセス中にjMAVSim起動チェックボックスをチェックするのを忘れた場合-Cygwinでは、次のコマンドを使用してリポジトリのクローンを作成し、シミュレータを実行できます。
git clone --recursive -j8 https://github.com/PX4/Firmware.git cd Firmware make px4_sitl jmavsim
コンパイル後、PX4コンソールとシミュレータウィンドウが画面に表示されます。
私のWindowsでは、 シミュレーターの開発者に報告されているように、空と木はまだ表示されておらず、黒い背景ではありません。
ドローンを制御するためのコンソールコマンドは同じです:離陸- commander takeoff
、着陸- commander land
、シミュレーションの停止-CTRL + Cまたはshutdown
。
QGroundControl Ground Stationプログラムでのフライト
QGroundControlプログラムを使用すると、PX4またはArduPilotプラットフォームでドローンを完全に構成できるだけでなく、GPSを介した自律屋外飛行を計画および実行できます。
プログラムコードは完全にオープンであり、Windows、OS X、Linux、iOS、Androidのプラットフォームで動作します。 目的のプラットフォームのインストールファイルは、プログラムWebサイトのダウンロードセクションからダウンロードできます。
Windowsの場合、 このファイルをダウンロードして実行します 。
インストールと起動後、jMAVSimがコンピューターで既に実行されている場合、プログラムは自動的に接続します。
Fly-Takeoffボタンを使用して飛行中にドローンを起動し、着陸することができます-Land。 GPSポイントで仮想飛行を実行することもできます。
mavrosを使用した自律飛行のプログラミング
jMAVSim仮想ドローンはmavlinkプロトコルを使用して制御できます。mavlinkプロトコルは、いくつかの記事で説明されています(たとえば、 1、2 )。 mavlink通信を実装するには、 ROS(ロボットオペレーティングシステム)システムのmavrosパッケージを使用します 。
PX4開発者は、ROS Kineticの使用を推奨しています。
mavrosパッケージは、ROS(たとえば、LinuxまたはRaspberry PIを搭載した仮想マシン)を実行しているコンピューターとフライトコントローラー(実環境またはシミュレーター環境)間のMAVLinkプロトコルを介した通信を提供します。
mavrosパッケージは、ROS Kineticの完全インストール中に他のパッケージとともにインストールされます。
mavrosパッケージは、roslaunchコマンドによるシミュレーターへの接続で起動され、シミュレーターが実行されているコンピューターのIPアドレスとポートを示します。
roslaunch mavros px4.launch fcu_url:="udp://@192.168.0.22:14557"
jmaVSimが実行されているホストでシミュレーターが実行されていない場合、mavrosに接続する前に、jMAVSimコンソールのparam set MAV_BROADCAST 1
を使用してネットワーク経由でmavlinkメッセージングを有効にする必要があります。 コマンドが実行されると、mavlinkプロトコルに使用されるホストIPアドレスが表示されます。 ポートは、シミュレータコンソールでmavlink status
コマンドを使用してmavlink status
ことができます。
次のコマンドを使用して、フライトコントローラーへの接続の成功を確認する必要があります。
rostopic echo /mavros/state
接続が成功すると、いわゆるメッセージがコンソールに表示されます。 mavlinkハートビート、1秒間に約1回:
メッセージが表示されない/更新されない/フィールドConnected = Falseの場合-フライトコントローラーとの通信が確立されていないため、理由を確認する必要があります。
この記事の執筆時点では、Windowsの場合、param set MAV_BROADCAST 1コマンドの後、jMAVSimコンソールのメッセージがループで表示され始めました。
WARN [mavlink] getting required buffer size failed.
シミュレーターをWindowsで正しく動作させるには、src / modules / mavlink / mavlink_main.cppファイルの1029行目を追加する必要があります。
#if defined(__APPLE__) && defined(__MACH__) || defined(__CYGWIN__)
コマンドmake px4_sitl jmavsim
使用してシミュレータを再コンパイル/再起動します。
この問題は開発者に報告されており 、将来のリリースで修正される可能性があります。
接続に成功したら、ROSシステムコンソールの次のコマンドを使用して、自律飛行でドローンを起動できます。
- オフボードモードで航空機を飛行させるための目標ポイントを毎秒5回発行します。 ドローンがオフボード自律飛行モードから「抜け落ちない」ようにするには、毎秒数回、ターゲットポイントを常に公開する必要があります。
rostopic pub -r 5 /mavros/setpoint_position/local geometry_msgs/PoseStamped "header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' pose: position: x: 0.0 y: 0.0 z: 5.0 orientation: x: 0.0 y: 0.0 z: 0.0 w: 0.0"
- ドローンをオフボードモードに設定します(新しい別のターミナルセッションで):
rosservice call /mavros/set_mode "base_mode: 0 custom_mode: 'OFFBOARD'"
- ドローンをフライトモード(つまり、「フィード」)にするコマンドを送信します。
rosservice call /mavros/cmd/arming "value: true"
最後のコマンドを実行した後、仮想ドローンは離陸し、5メートルの高さでホバリングします。
シンプルなPythonコードを使用してドローンを起動することもできます。
import rospy from geometry_msgs.msg import PoseStamped from mavros_msgs.srv import CommandBool, SetMode rospy.init_node("offbrd",anonymous=True) rate=rospy.Rate(5) setpoint_pub=rospy.Publisher("/mavros/setpoint_position/local",PoseStamped,queue_size=10) arming_s=rospy.ServiceProxy("/mavros/cmd/arming",CommandBool) set_mode=rospy.ServiceProxy("/mavros/set_mode",SetMode) setpt=PoseStamped() setpt.pose.position.z=5 for i in range (0,10): setpoint_pub.publish(setpt) rate.sleep() set_mode(0,"OFFBOARD") arming_s(True) while (rospy.is_shutdown()==False): setpoint_pub.publish(setpt) rate.sleep()
上記のコードは、コマンドライン呼び出しの例と同じROSサービスへの呼び出しを使用しています。
コードをテキストファイル(fly_jmavsim.pyなど)にコピーし、 python fly_jmavsim.py
を使用してコマンドラインから実行する必要があります。
この例をデバッグする過程で、jMAVSimシミュレーターの機能に遭遇しました。通常の操作には強力なプロセッサーが必要です。 Linux仮想マシンでは、彼は何とか10 FPSしか計算できず、離陸後すぐに落ちました。 ラップトップ上で、私が記事を書いている間、彼はまた定期的にコントロールを失い、クラッシュしました。 ラップトップがネットワークから給電されるのを助けました-なぜなら バッテリーから電力が供給されると、省電力モードがアクティブになり、プロセッサーのパフォーマンスが過小評価され、シミュレーターに直接影響します。
与えられた例に基づいて、希望する人は自律飛行プログラムを開発できます(正方形、円、任意の軌道など)。 このような演習の実行は、実際のクアドロコプターで自律ミッションをプログラミングするための準備に役立ちます。
フライトの成功をお祈りします!
参照:
ロボットオペレーティングシステム(ROS)
オートパイロットPX4