ここでは次のゴールのための設定を書く。
GoProとWiFi接続する。フライトコントローラとテレメトリーで接続する。GoProとフライトコントローラーをLTE接続する
Raspberry PiのOSがbookwormというバージョンに2024年3月くらいになった。ネットワーク管理がdhcpd+wpa_applicantだったものがnetworkmanagerに変更され、設定の仕方が大きく変わった。
基本作業
ファイルのコピーなどのため、ftpサーバーを入れておきます。
sudo apt -y install vsftpd
インストール後、/etc/vsftpd.confの編集。
write_enable=YES #書き込み可能に(デフォルトではコメントアウト)
pythonパッケージ管理ツールpip
sudo apt install python3-pip
別記事でも書きましたが、pipを利用したパッケージインストールはerror: externally-managed-environmentで失敗します。
~/.pip/pip.conf(ないなら作る)に
[global] break-system-packages = true
を定義すること。docker使えとかうるさいんじゃ。
gitをインストール
sudo apt install git
イーサネット設定
イーサーネットのIPアドレスを固定します。
イーサーの名前を確認します。
nmcli c
イーサの名前がWired connection 1となっているはずです。なんでこんな名前つけるのかね。
慣れ親しんだeth0に変更します。
sudo nmcli connection modify 'Wired connection 1' connection.id eth0
次に目的のeth0 (‘Wired connection 1’)に固定IPを設定します。
sudo nmcli connection modify eth0 ipv4.addresses 192.168.100.1/24
アドレス設定を確認します。
nmcli -f ipv4 connection show eth0
設定がautoなのが気に入らないので以下のコマンドで設定します。
sudo nmcli connection modify eth0 ipv4.method manual
Windows側のイーサーに192.168.100.xを設定します。
これでイーサ接続が確保されます。なお、対抗接続なのでゲートウェイなどなくてOKです。
Macの場合は接続すると、「システム設定」「ネットワーク」に「Ethernetサービス」とか「AX88179A」と出ますから「詳細」「TCP/IP」「IPv4の設定」と進み、やはりIPアドレスを設定します。
PC側の設定をし接続したら、sshで192.168.100.1に繋ぎにいきましょう。これがあれば安心。
(Windowsっていつから複数NICが使用可能になったんだろ?昔はこんなことしてたら動作しなかったぞ。)
以下、GoProとwifi接続するのでsshなどの接続はすべてイーサーネット経由で行います。
どのRaspiも192.168.100.1にしているので弊害も出ます。Raspiを変えるとシステムのフィンガープリントが合わなくなります。
VSCodeのリモート接続などができない場合、一度、ターミナルからssh ユーザー名@ipアドレスを入力してみてください。フィンガープリントがあわない場合は
ssh-keygen -R ipアドレス
で古いフィンガープリントを消して、再度接続を試みます。
必要なパッケージ
DRONE KIT
Flight Controllerのコントロール用です。
git clone https://github.com/dronekit/dronekit-python.git
cd dronekit-python
python setup.py build install --user
ついでにPythonパッケージをいくつかインストールします。製作プログラムで使っているためです。
pip install--user jmespath
GoPro API
pip install open-gopro
GoProとのWiFi接続
GoProとつなぐ時、インターネット接続のWiFiとはつなげません。(できなくはないようですが、海の上で混乱したくないので同時接続は控えております。)
Network ManagerでGoproのapに接続するために事前登録しておきます。
Goproを起動し、QUIKのプレビューを起動します。(WiFiがアクティベートされます)
nmcli dev wifi
今、Raspberry PIから見えているwifi APがリストされます。
*リストされないこともよくあります。その場合
sudo iwlist wlan0 scan
と入力し、いったんスキャンして、あらためてnmcli dev wifiをみてください。
GoProのワイヤレス接続->カメラ情報でAP名とパスワードを入手します。
Raspberry PIに
sudo nmcli dev wifi con GoproのSSID password Goproのパスワード
少し時間がかかりますが、接続できるはずです。(パスワードは最初のこの一回でよい)
nmcli c
で確認します。
接続のコントロールですが、
1. 繋いでいるSSIDを停止する
sudo nmcli connection down 止めたいSSID
2. 定義したことのあるSSIDへ再接続
sudo nmcli connection up つなぎたいSSID
3. SSIDの定義の削除
nmcli connection delete id 削除したいSSID
4. WIFIのオンオフ
sudo nmcli radio wifi on sudo nmcli radio wifi off
この後、GoProで然るべきタイミングで写真を取る時には、GoProをpythonで動かすに続きます。(ここからの作業について依存関係はない)
Raspberry PIとフライトコントローラーをテレメトリー接続
配線についてはこちらを参照
フライトコントローラーの設定
FCに次の設定。テレメトリー2のポートを使う前提です。
-
- SERIAL2_PROTOCOL = 2 MAVLINK2を選択
- SERIAL2_BAUD = 57 57600ボーレート
パラメーター保管を忘れずに。
Raspiの設定
raspi-configから
interface option Serial でシリアル通信を可能とします。
Would you like a login shell to be accesible over serial ? はNO
Would you like the serial port hardware to be enabled ?はyes
Bluetoothを切断
sudo nano /boot/firmware/config.txtで編集します。(Bookwormで変わった)
enable_uart=1
dtoverlay=disable-bt
arm_boost=1
以上の値に変更、もしくは追記し保管します。
さらにBluetoothのモデムの初期化システム・サービスを斬り殺す
sudo systemctl disable hciuart
ここでリブート。/dev/AMA0があるはず
MAVproxy
pip install PyYAML mavproxy --user
.bashrc内を見てなければ、最後にpathの追加を書く。
export PATH="$PATH:$HOME/.local/bin"
mavproxyを最新にする
pip install mavproxy pymavlink --user --upgrade
シェルコマンドを作る。(ここではconnect.shとする)
#!/usr/bin/bash
echo "Connect to FC port 14550 using Mavproxy"
/home/user-id/.local/bin/mavproxy.py --master=/dev/ttyAMA0 --baudrate 57600 --out=tcpin:0.0.0.0:14550 --daemon
実行権を与えておく。
chmod +x connect
サービス化するために
/etc/systemd/system/mavlink.service を作る。
[Unit] Description = mavproxy daemon After=network.target [Service] Type=simple User = tsukasa WorkingDirectory = /home/tsukasa/ ExecStart=/home/tsukasa/connect.sh [Install] WantedBy=multi-user.target
あとはsystemctl start mavlink, systemctl enable mavlinkする。
LTE接続のためのダイアルアップ
このセットアップをやっていれば、サービス化されているはずなので
sudo systemctl start ux302nc で開始し、sudo systemctl stop ux302ncで止まります。
これでLTEを動かし、そのipアドレスとポート5760でミッションプランナーとつながるはずです。
また、MJPG-StreamerをLTEごしにブラウザーで見られるはずです。
TCP/IPの威力ですね。