以下の内容は先日「Add a Discussion」ではなく「Send Message to Group」に誤って投稿してしまいました。
もしかしたら一部の方にメールで届いてるかもしれません。。。
ご迷惑をおかけしてすみません。
はじめまして
ただいまNAVIO2+Rasberry pi3とArduCopterを使ってクワッドローターを製作中です。
現在、Win用のWifiコントローラーアプリケーションを作成しておりUDPでRaspberry Piに上昇や下降の命令を送信したいのですが、
ArduCopter側でそういったUDPのデータを受信して処理を行う機能はありますでしょうか。
なければArduCopterにUDPの送受信用のプログラムを追加しようと考えています。
その際にですが、受けとった電文から上昇、下降などを行いたいのですが、
上昇、下降などの処理を行っているソースはArduCopterのどのファイルに記載されていますでしょうか。
もしご存知の方がいらっしゃいましたらご教示お願いします。
Replies
返事が遅くなってしまい申し訳ございません。
すみませんでした。--masterを指定しておりませんでした。
改めて--masterを指定しましたが、実行できませんでした。
pi@navio:~ $ mavproxy.py --master=Win環境のIP:14550
Failed to connect to Win環境のIP:14550 : [Errno 99] Cannot assign requested address
ネットワークの接続ができていないと思い、Raspberry側とWindows側でpingの確認を行いましたが、
問題なくつながっておりました。
murata,katsutoshi said:
ちょっと確認です。
> pi@navio:~ $ mavproxy.py Win側のIPアドレス:14550
で、下記URLにかかれております、「--master=」をつけておられるか不明でしたので。
つけておられるとは思いますが。確認させていただきました。
http://ardupilot.github.io/MAVProxy/html/getting_started/quickstart...
Simone said:
初歩的な間違いでした・・・mavproxyをインストールしていませんでした。
mavproxyをインストールし、実行してみましたが、以下のエラーが発生してしまいました。
シリアル通信モジュールが接続できていないのでしょうか?
Navio2にはXbeeモジュールをつけてはいますが・・・
pi@navio:~ $ mavproxy.py Win側のIPアドレス:14550
Auto-detected serial ports are:
/dev/ttyS0
Connecting to /dev/ttyS0
Connect /dev/ttyS0 source_system=255
Failed to connect to /dev/ttyS0 : Could not configure port: (5, 'Input/output error')
Traceback (most recent call last):
File "/usr/local/bin/mavproxy.py", line 1042, in <module>
load_module(m, quiet=True)
File "/usr/local/bin/mavproxy.py", line 272, in load_module
module = m.init(mpstate)
File "/usr/local/lib/python2.7/dist-packages/MAVProxy/modules/mavproxy_mode.py", line 83, in init
return ModeModule(mpstate)
File "/usr/local/lib/python2.7/dist-packages/MAVProxy/modules/mavproxy_mode.py", line 12, in __init__
self.add_command('mode', self.cmd_mode, "mode change", self.available_modes())
File "/usr/local/lib/python2.7/dist-packages/MAVProxy/modules/mavproxy_mode.py", line 35, in available_modes
mode_mapping = self.master.mode_mapping()
AttributeError: 'NoneType' object has no attribute 'mode_mapping'
書き方は合っていると思うのです。
でもWindowsだと引数の書き方が違うのでしょうか。。。
あるいはmavproxyがちゃんと動いていないとか?
vehicle_state.pyを実行してみましたが、ダメでした・・・
pingは双方向で通るのですが、何でですかね…
C:\dronekit-python-master\examples\vehicle_state>python vehicle_state.py --connect 192.168.24.57:14550
Connecting to vehicle on: 192.168.24.57:14550
Traceback (most recent call last):
File "vehicle_state.py", line 37, in <module>
vehicle = connect(connection_string, wait_ready=True)
File "build\bdist.win-amd64\egg\dronekit\__init__.py", line 2808, in connect
File "build\bdist.win-amd64\egg\dronekit\mavlink.py", line 128, in __init__
File "C:\WinPython-64bit-2.7.12.2Zero\python-2.7.12.amd64\lib\site-packages\pymavlink-2.0.6-py2.7.egg\pymavlink\mavutil.py", line 1210, in mavlink_connection
return mavudp(device, source_system=source_system, input=input, use_native=use_native)
File "C:\WinPython-64bit-2.7.12.2Zero\python-2.7.12.amd64\lib\site-packages\pymavlink-2.0.6-py2.7.egg\pymavlink\mavutil.py", line 850, in __init__
self.port.bind((a[0], int(a[1])))
File "C:\WinPython-64bit-2.7.12.2Zero\python-2.7.12.amd64\lib\socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 10049] 要求したアドレスのコンテキストが無効です。
まずvehicle_state.pyで値は取れていますか?
SITLから実機に切り替える時は結構手間取りますね〜
あれから検証を行いましたが、以下の点で現在躓いております。
1)simple_gotoを実行してもドローンと接続できない
公式リファレンスを参考にしてWin環境にてサンプルプログラムのsimple_goto.pyを実行してもエラーがかえって来ます。
●Win側
C:\dronekit-python-master\examples\simple_goto>python simple_goto.py --connect ドローン側のIPアドレス:14550
Connecting to vehicle on: ドローン側のIPアドレス:14550
UDP ports must be specified as host:port
●Raspberry Pi側
pi@navio:~ $ sudo ArduCopter-quad -A udp:WindowsのIPアドレス:14550
Raspberry Pi 2 with BCM2709!
2)公式サポート対象のWinPythonおよびActivePythonが起動しない。
WinPythonとActivePythonをWindows10環境で起動しようとしましたが、起動しません。
これらのIDEはWindows10で動作しないのでしょうか。
お二人ともありがとうございました。
まずはMissionPlannerの機能で試して検証してみたいと思います
UDP云々は分かりませんが、PCにジョイスティック(ゲームパッド等)を接続してMissionPlannerから操作するという機能があったはず。
また、MissionPlannerのPythonスクリプトでも操作が可能です。(Script.SendRC(int Channel, int PWM, bool SendNow)で送受信機の実物が無くてもRC信号の処理が可能)
ArduCopter側での処理はどちらも同じかもしれません。プログラムの方は見てないのでわかりませんが・・・
また、高度を数値で設定したいのであれば[GCS_Mavlink.cpp]のhandle_change_alt_request等が役に立つかもしれません。MissionPlannerのFlightData内のタブのActionからChangeAltで操作可能な、高度指定の関数だったかなと思います。実際に使ったことがないのでどういう動きになるかは想像しかできませんが。
どこにあげてよいのかわからなかったので、とりあえず、私が立ち上げたディスカッションに一例を挙げました。
下記がその内容です。
参考になれば幸いです。
====
その他:「ArduCopterの上昇下降について」オール配信へのコメント
通信プロトコルとしては、「MAVproxy」を使用して行うとよいでしょう。
例えば、下記のような構築になるかと。
http://air.pawana.jp/2015/07/raspberry-pi-navio-setup/
WINに、Dronekit環境を構築して、Pythonにて開発。
http://python.dronekit.io/contributing/developer_setup_windows.html
参考例は、exampleフォルダのsImple_goto.pyをみていただければ、takeoff、移動、ランディングの処理が書かれています。
http://python.dronekit.io/examples/simple_goto.html