【まとめ】コンパニオンコンピュータ セットアップ 2024/4版

Linux
image_print

ここでは次のゴールのための設定を書く。

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接続のためのダイアルアップ

ここを見てLTE USBドングルを導入

このセットアップをやっていれば、サービス化されているはずなので

sudo systemctl start ux302nc で開始し、sudo systemctl stop ux302ncで止まります。

これでLTEを動かし、そのipアドレスとポート5760でミッションプランナーとつながるはずです。

また、MJPG-StreamerをLTEごしにブラウザーで見られるはずです。

TCP/IPの威力ですね。

タイトルとURLをコピーしました