水中スラスター購入しました
先日ネットで見つけた水中スラスターを購入しました。
ダンボール箱で到着。
内容物は、スラスター、ネジ、ESC、説明書。
サイズ感とネジ取り付け部分はこんな感じ。外形70㎜です。
モーター裏面の接続部分は防水。
ESCは45Aで双方向に回転できます。
動画はこちら。
BECがついてないので、サーボコントローラを左いっぱいに絞った状態で接続。それからボリュームを回していくと、サーボがセンターくらいで初期化のビープが鳴ります。その後は、ボリュームを左右に回すと、スラスターが正逆転。
最後にサーボコントローラをスイープさせると、スラスターの回転も交互に回転してます。
もちろん、電源投入時にサーボコントローラをセンターに合わせておくと、最初からセンターで初期化されます。
購入はこちら。
ボート水中モーター、Funien 1000KV水中ブラシレスモーター時計回り4ブレードプロペラ付き12-24V防水電気モータードライブエンジン(RCベイトボートネストシップ用)
ダンボール箱で到着。
内容物は、スラスター、ネジ、ESC、説明書。
サイズ感とネジ取り付け部分はこんな感じ。外形70㎜です。
モーター裏面の接続部分は防水。
ESCは45Aで双方向に回転できます。
動画はこちら。
BECがついてないので、サーボコントローラを左いっぱいに絞った状態で接続。それからボリュームを回していくと、サーボがセンターくらいで初期化のビープが鳴ります。その後は、ボリュームを左右に回すと、スラスターが正逆転。
最後にサーボコントローラをスイープさせると、スラスターの回転も交互に回転してます。
もちろん、電源投入時にサーボコントローラをセンターに合わせておくと、最初からセンターで初期化されます。
購入はこちら。
ボート水中モーター、Funien 1000KV水中ブラシレスモーター時計回り4ブレードプロペラ付き12-24V防水電気モータードライブエンジン(RCベイトボートネストシップ用)
Arduinoで自作のフライトコントローラでトライコプター
自作のフライトコントローラによるQuadcopterの安定した動画を残ってなかったですが、探してみたらtricopterは自作のコントローラでそこそこ安定したものが動画で残ってたようです。
Arduinoで自作のフライトコントローラでクワッドコプター
10年くらい前に作った、自作のフライトコントローラが探したら出てきました。ArduinoのIDEでAtmega328PにUSBシリアル変換を使ってプログラムを書き込み。
受信機の信号を4チャンネル入れて、クワッド区コプター用にESCの出力を4チャンネル持ってて6DOFのIMUをI2Cで読みとって、あとはソフト頑張ってギリギリ浮くくらいまでには作りました。
数学的に弱いので移動平均と積算で簡易的なフィルタを作って姿勢を読み取って制御してたのでなかなか厳しかったです。
その時の動画はこちら。
これよりもう少し安定するところまでできたのですが、APMを購入したので乗せ換えてしまって動画は残ってませんでした。
今は、昨日試したMadgwickフィルタとか簡単に使えるライブライブラリが用意されてるのでもっと安定して飛ばせるかも。
受信機の信号を4チャンネル入れて、クワッド区コプター用にESCの出力を4チャンネル持ってて6DOFのIMUをI2Cで読みとって、あとはソフト頑張ってギリギリ浮くくらいまでには作りました。
数学的に弱いので移動平均と積算で簡易的なフィルタを作って姿勢を読み取って制御してたのでなかなか厳しかったです。
その時の動画はこちら。
これよりもう少し安定するところまでできたのですが、APMを購入したので乗せ換えてしまって動画は残ってませんでした。
今は、昨日試したMadgwickフィルタとか簡単に使えるライブライブラリが用意されてるのでもっと安定して飛ばせるかも。
BMP280 気圧センサ
ボッシュの高精度気圧センサを買ってみた。
以前のBMP085はあるけど、それより精度上がってるかな?と思って。
在庫を探したら、他にも気圧センサ持ってる。STマイクロエレクトロニクスのLPS331AP
これも結構精度良かった。
早速ピンをハンダ付けして、Arduinoで動作確認。
I2Cで接続かと思って接続して動かそうとしても、not foundになる。
サンプルを読んだら、デジタルピンで接続するようになってる。
ほか、参照したサイトは以下。
Arduinoで気圧センサー(GY-BMP280)を使い気圧を取得してみた‼
https://toccho.net/2022/05/10/gy-bmp280-arduino/
プロッタで表示。
データは少しスムージングしてる。
絶対値より相対値が欲しいので、相対値としては、0.02hPaくらい、感覚的には30㎝上下くらいの変化が取れてる。
以前のBMP085はあるけど、それより精度上がってるかな?と思って。
在庫を探したら、他にも気圧センサ持ってる。STマイクロエレクトロニクスのLPS331AP
これも結構精度良かった。
早速ピンをハンダ付けして、Arduinoで動作確認。
I2Cで接続かと思って接続して動かそうとしても、not foundになる。
サンプルを読んだら、デジタルピンで接続するようになってる。
ほか、参照したサイトは以下。
Arduinoで気圧センサー(GY-BMP280)を使い気圧を取得してみた‼
https://toccho.net/2022/05/10/gy-bmp280-arduino/
プロッタで表示。
データは少しスムージングしてる。
絶対値より相対値が欲しいので、相対値としては、0.02hPaくらい、感覚的には30㎝上下くらいの変化が取れてる。
Madgwickフィルタを使ってみよう その3
センサを探している間に、もうちょっと戻ってMadgwickフィルタを調べる。
そもそもMadgwickってなに?
Madgwick Filterを読んでみた
https://qiita.com/fumiya_sato/items/df28dff5ccc653183235
この中の記述
MadgwickフィルタのMadgwickは提唱した人の名前だそうだ。
原論文は、An efficient orientation filter for inertial and inertial/magnetic sensor arrays
”カルマンフィルタに比べて、高速で同程度以上の精度を実現したらしいフィルタです.”
”収束が遅いらしいとか・・・?”
ここまでわかって安心。
この記事の中で最初に出てくる、クォータニオンというのもいまいち理解できてないので検索。
クォータニオンとは何ぞや?:基礎線形代数講座
https://techblog.sega.jp/entry/2021/06/15/100000
この中の記述...
”クォータニオンは日本語では四元数(しげんすう)と訳されるもので、1843年にハミルトンにより発見された複素数を拡張した代数体系であり、3次元の回転の表現としても多くの利点を備えている。”
これで分かった気になって先に進む。
Sparkfunの6DOFセンサが読み出せたので、こちらの記事のMadgwickフィルタのサンプルに FreeSixIMU のライブラリとセンサの読み取り値を読み取った入れ込む。
MadgwickフィルタのライブラリをArduinoで使う
https://qiita.com/Ninagawa123/items/9520bad3c78ee40194fc
しかし、フィルタ動いてる気配がない。0付近の値がふらふらしてるだけ。
多分違うセンサを使ってるせい。そりゃそうだ。
数値の大きさとか、軸の並びとか、変化分の極性とか違う可能性はある。
なので、再度MPU-6050がどんな値を出してるのか、フィルタにどんな値を入れればいいのかを確認。
こちらのサイトをからMPU6050の値を確認。動画から、重力加速度を1として、角速度を度/秒くらいの値にしてやればいいようだ。傾きや変化の向きも確認した。
Arduinoから MPU6050の値を取得してみる
https://garchiving.com/how-to-use-mpu6050-in-arduino/
Sparkfunの6DOFは、重力加速度が220くらい、角速度が度/秒に直すと4倍くらいの値が出てたので、単純に値を割ってMadgwickフィルタに与える。
すると、Arduinoのシリアルポートからそれっぽい値が出だした。
次にProsessingを起動、サイトのコードをコピペ。動かしてもポートが読めないとのエラー。
ポートを調べて、0番に直す。
int available_serialport = 0;
すると画面上で平板が動き出した。でも回転してもヨー軸が回らない。
値が上手く取り込めてないのかと、dataの読み出し部分を確認しても問題なし。
画面の表示部分を読んでみたら、そもそもサイトのコードでヨー軸を回転させてない。
なので、コードに1行追加。
rotateY(radians(data[2])); //YAW軸追加
再起動すると、画面上で平板がセンサを動かした通りに動き出した。
やってみて分かったのは、初期状態を水平にしてから起動した方がいい。ひっくり返した状態から起動すると、正しい状態を得るのに時間がかかる。
レスポンスは早い。
これを使ってドローンを自作できるかも、と思った。
そもそもMadgwickってなに?
Madgwick Filterを読んでみた
https://qiita.com/fumiya_sato/items/df28dff5ccc653183235
この中の記述
MadgwickフィルタのMadgwickは提唱した人の名前だそうだ。
原論文は、An efficient orientation filter for inertial and inertial/magnetic sensor arrays
”カルマンフィルタに比べて、高速で同程度以上の精度を実現したらしいフィルタです.”
”収束が遅いらしいとか・・・?”
ここまでわかって安心。
この記事の中で最初に出てくる、クォータニオンというのもいまいち理解できてないので検索。
クォータニオンとは何ぞや?:基礎線形代数講座
https://techblog.sega.jp/entry/2021/06/15/100000
この中の記述...
”クォータニオンは日本語では四元数(しげんすう)と訳されるもので、1843年にハミルトンにより発見された複素数を拡張した代数体系であり、3次元の回転の表現としても多くの利点を備えている。”
これで分かった気になって先に進む。
Sparkfunの6DOFセンサが読み出せたので、こちらの記事のMadgwickフィルタのサンプルに FreeSixIMU のライブラリとセンサの読み取り値を読み取った入れ込む。
MadgwickフィルタのライブラリをArduinoで使う
https://qiita.com/Ninagawa123/items/9520bad3c78ee40194fc
しかし、フィルタ動いてる気配がない。0付近の値がふらふらしてるだけ。
多分違うセンサを使ってるせい。そりゃそうだ。
数値の大きさとか、軸の並びとか、変化分の極性とか違う可能性はある。
なので、再度MPU-6050がどんな値を出してるのか、フィルタにどんな値を入れればいいのかを確認。
こちらのサイトをからMPU6050の値を確認。動画から、重力加速度を1として、角速度を度/秒くらいの値にしてやればいいようだ。傾きや変化の向きも確認した。
Arduinoから MPU6050の値を取得してみる
https://garchiving.com/how-to-use-mpu6050-in-arduino/
Sparkfunの6DOFは、重力加速度が220くらい、角速度が度/秒に直すと4倍くらいの値が出てたので、単純に値を割ってMadgwickフィルタに与える。
すると、Arduinoのシリアルポートからそれっぽい値が出だした。
次にProsessingを起動、サイトのコードをコピペ。動かしてもポートが読めないとのエラー。
ポートを調べて、0番に直す。
int available_serialport = 0;
すると画面上で平板が動き出した。でも回転してもヨー軸が回らない。
値が上手く取り込めてないのかと、dataの読み出し部分を確認しても問題なし。
画面の表示部分を読んでみたら、そもそもサイトのコードでヨー軸を回転させてない。
なので、コードに1行追加。
rotateY(radians(data[2])); //YAW軸追加
再起動すると、画面上で平板がセンサを動かした通りに動き出した。
やってみて分かったのは、初期状態を水平にしてから起動した方がいい。ひっくり返した状態から起動すると、正しい状態を得るのに時間がかかる。
レスポンスは早い。
これを使ってドローンを自作できるかも、と思った。