2016/07/20(水) [n年前の日記]
#1 [raspberrypi] Raspberry Pi3でサーボモータを制御。その2
Raspberry Pi3 + マイクロサーボモータ SG92R で、Python + pigpio を使って制御してみたり。
_servo_pwm3.py
sudo python servo_pwm3.py として実行。こんな感じに。
動いた。かつ、ガクブルしてない。
一応ソース内の説明を少しだけ。
上記のソースでは、念のために、サーボモータにパルス幅を送ってから 0.5秒後に、該当ピンに 0 を送ってサーボモータの制御をオフにしている。この処理は必要なのか不要なのか、ちょっと分かってない。
どうして0.5秒かと言うと…。SG92R のスペックは「0.1s/60度」のはずなので、180度動かすとしても0.3秒で足りるはず。故に、0.5秒も経過すれば、目的の角度に到達してるだろうと踏んでいる。が、ホントにそうなってくれるのかどうかは分かってない。スペック上はそうなるはずだけど…。
_pigpio library を眺めると、pigpio を使えば他にも色々できる模様。
_servo_pwm3.py
#!/usr/bin/python # -*- coding: utf-8 -*- import pigpio import time SERVO_X = 18 # GPIO START_V = 500 # us END_V = 2400 # us def get_pulsewidth(ang): ang += 90.0 if ang < 0.0: ang = 0.0 if ang > 180.0: ang = 180.0 w = (END_V - START_V) * (float(ang) / 180.0) + START_V return w pi1 = pigpio.pi() try: for ang in [0, -90, 0, 90, 0, -90, -45, 0, 45, 90, 45, 0]: w = get_pulsewidth(ang) print "ang = %f , pulse width = %f" % (ang, w) pi1.set_servo_pulsewidth(SERVO_X, w) time.sleep(0.5) pi1.set_servo_pulsewidth(SERVO_X, 0) time.sleep(2.5) except KeyboardInterrupt: pass print "Done." pi1.stop()
sudo python servo_pwm3.py として実行。こんな感じに。
動いた。かつ、ガクブルしてない。
一応ソース内の説明を少しだけ。
- 事前に、sudo pigpio で、pigpioのデーモンを起動しておく。
- import pigpio で、pigpio用のモジュールをインポート。
- pi1 = pigpio.pi() で、pigpio と接続。
- pi1.set_servo_pulsewidth(GPIOピン番号, パルス幅) で、サーボモータ制御用のパルス幅を送信。パルス幅の単位はマイクロ秒(us)。
- pi1.set_servo_pulsewidth(GPIOピン番号, 0) で、該当ピンのPWM制御を切る。
- pi1.stop() で、pigpioとの接続を切る。
上記のソースでは、念のために、サーボモータにパルス幅を送ってから 0.5秒後に、該当ピンに 0 を送ってサーボモータの制御をオフにしている。この処理は必要なのか不要なのか、ちょっと分かってない。
どうして0.5秒かと言うと…。SG92R のスペックは「0.1s/60度」のはずなので、180度動かすとしても0.3秒で足りるはず。故に、0.5秒も経過すれば、目的の角度に到達してるだろうと踏んでいる。が、ホントにそうなってくれるのかどうかは分かってない。スペック上はそうなるはずだけど…。
_pigpio library を眺めると、pigpio を使えば他にも色々できる模様。
◎ ランダムに動く版を書いてみたり。 :
_servo_pwm3_2.py
「ギュイッ!」的なモータ駆動音さえなければ、何かのディスプレイに使えそうな予感。いや、「ギュイッ!」がマジでうるさくて、このままではダメだけど。
#!/usr/bin/python # -*- coding: utf-8 -*- import pigpio import time import random SERVO_X = 18 # GPIO START_V = 500 # us END_V = 2400 # us def get_pulsewidth(ang): ang += 90.0 if ang < 0.0: ang = 0.0 if ang > 180.0: ang = 180.0 w = (END_V - START_V) * (float(ang) / 180.0) + START_V return w pi1 = pigpio.pi() try: old_ang = 0 for i in range(10): while True: ang = random.randint(0, 18) * 10 - 90 if ang != old_ang: break w = get_pulsewidth(ang) print "ang = %f , pulse width = %f" % (ang, w) pi1.set_servo_pulsewidth(SERVO_X, w) time.sleep(0.4) pi1.set_servo_pulsewidth(SERVO_X, 0) time.sleep(0.1) old_ang = ang except KeyboardInterrupt: pass time.sleep(1) pi1.set_servo_pulsewidth(SERVO_X, get_pulsewidth(0)) time.sleep(0.5) pi1.set_servo_pulsewidth(SERVO_X, 0) time.sleep(1) print "Done." pi1.stop()
「ギュイッ!」的なモータ駆動音さえなければ、何かのディスプレイに使えそうな予感。いや、「ギュイッ!」がマジでうるさくて、このままではダメだけど。
[ ツッコむ ]
#2 [raspberrypi] 電池ボックスに繋げられそうなヨサゲなコネクタは無いものか
Raspberry Pi3 でサーボモータ制御の実験をしているわけだけど、サーボモータを動かすために、単三電池 x 4、の電源を使ってるのがちょっと気になってるわけで。
電池ボックスから線が出ているわけだけど。コレを _ワニ口クリップ・ミノムシクリップ を使ってブレッドボードに接続しているのが…気になる…。何かもうちょっと抜き差しが楽な状態にできないか。つまりはヨサゲなコネクタは無いものかと。
電池ボックスから線が出ているわけだけど。コレを _ワニ口クリップ・ミノムシクリップ を使ってブレッドボードに接続しているのが…気になる…。何かもうちょっと抜き差しが楽な状態にできないか。つまりはヨサゲなコネクタは無いものかと。
◎ FAN接続用のアレはどうか。 :
この手のコネクタと言えば…。PCパーツというか、FANを接続する時に使う、
_あの3ピンコネクタ
はどうだろう。
と思ってググってみたけど、コレがなかなか売ってないようで。あんなに製品が出回ってるのに、コネクタは売ってないのか…。でもまあ、FAN関係で流れる電流なんて、えてして500mAも行かないわけで。ソレを考えると電源用コネクタとしてアレを使うのもどうなんだ、という気もしてくるなと。
と思ってググってみたけど、コレがなかなか売ってないようで。あんなに製品が出回ってるのに、コネクタは売ってないのか…。でもまあ、FAN関係で流れる電流なんて、えてして500mAも行かないわけで。ソレを考えると電源用コネクタとしてアレを使うのもどうなんだ、という気もしてくるなと。
◎ DCプラグはどうか。 :
直流用の電源コネクタと言えば、
_DCプラグ
や
_DCジャック
だろうかとも思うのだけど。
ただ、DCプラグって、今一つ規格化されてない印象があるというか…。例えば身の回りに転がってるACアダプタを眺めてみると、プラグの外側と内側の、どちらがプラスでどちらがマイナスなのか、てなところからして製品毎にてんでバラバラだったりするわけで。パッと見で、こっちがプラス、こっちがマイナスと分かる何かがいいよなと。
ただ、DCプラグって、今一つ規格化されてない印象があるというか…。例えば身の回りに転がってるACアダプタを眺めてみると、プラグの外側と内側の、どちらがプラスでどちらがマイナスなのか、てなところからして製品毎にてんでバラバラだったりするわけで。パッと見で、こっちがプラス、こっちがマイナスと分かる何かがいいよなと。
◎ microUSBはどうか。 :
それとも、Raspberry Pi と同様に、microUSBを電源コネクタとして使う、てな方向のほうが良いのだろうか…。どうやらスマホの普及で、そういう流れになりつつあるようでもあるし…。
ただ、元々のUSB規格(USB2.0)は、最大でも5V/500mA程度が流れることを前提にしているので、ソレを電源として使うのはどうなのよ、という不安もあって。とは言え、これもまたスマホの普及で、規格外の電流を流す製品が既に結構普及しちゃってるよ? てなところもありそうな。
てな感じで、電池ボックスに何のコネクタを繋げたらいいかで悩んでしまったわけです。
もっとも、電池ボックスを使うアレコレは、えてして基板に線を半田付けしてることが多いし。「持ち運びや抜き差しが便利になりそうな、電池ボックス用のコネクタとして、何がいいのだろうか」なんてのは、かなりマイナーな悩みっぽいなと。
どこかでそういうのを規格化したりしないかな。いや、既にある規格に乗ってしまうのが現実的なのかしらん。
ただ、元々のUSB規格(USB2.0)は、最大でも5V/500mA程度が流れることを前提にしているので、ソレを電源として使うのはどうなのよ、という不安もあって。とは言え、これもまたスマホの普及で、規格外の電流を流す製品が既に結構普及しちゃってるよ? てなところもありそうな。
てな感じで、電池ボックスに何のコネクタを繋げたらいいかで悩んでしまったわけです。
もっとも、電池ボックスを使うアレコレは、えてして基板に線を半田付けしてることが多いし。「持ち運びや抜き差しが便利になりそうな、電池ボックス用のコネクタとして、何がいいのだろうか」なんてのは、かなりマイナーな悩みっぽいなと。
どこかでそういうのを規格化したりしないかな。いや、既にある規格に乗ってしまうのが現実的なのかしらん。
[ ツッコむ ]
#3 [windows] AviUtlでmovをwebmに変換しようとして四苦八苦
コンパクトデジカメ Canon PowerShot A3300 IS で撮影した mov 動画ファイルを、AviUtl で webm形式の動画に変換しようとしたけど、上手く行かず。
環境は Windows10 x64 + AviUtl 1.00 + L-SMASH Works r877 + FFmpegOUT 0.05。
環境は Windows10 x64 + AviUtl 1.00 + L-SMASH Works r877 + FFmpegOUT 0.05。
◎ movの音声が正常に読み込まれない。 :
まず、mov の中に入ってる音声(PCM、サンプリング周波数 12KHz、8bit、モノラル)が AviUtl に読み込めなくて。音声表示部分が全部緑色になってる…。おそらく、導入してる L-SMASH Works で何か起きてるんだろうけど…。
これは、L-SMASH Works の設定ダイアログで、Libav + L-SMASH のチェックを外したら、音声部分もそれっぽく読み込んでくれるようになった。
これは、L-SMASH Works の設定ダイアログで、Libav + L-SMASH のチェックを外したら、音声部分もそれっぽく読み込んでくれるようになった。
◎ ffmpegでwebm出力ができない。 :
次に、webm形式の動画として出力しようとしてハマったり。FFmpegOUT で出力を試みるものの、「変なオプションついてるからエラーが出たよ。変換できねえよ」と怒られてしまう。
ffmpeg.exe は version N-81045-g450cf40。最新版をDLしてきたから、おそらく 3.0.1 以降の開発版だと思うけど。
ffmpeg 3.0.x を使ってるからいかんのかなと、 _Zeranoe FFmpeg - Builds から、ffmpeg 2.8.6 や、FFmpegOUT 0.05 が公開されてた頃の版であろう ffmpeg 2.5.2 をDLして試してみたけど、結果は変わらず。どれか特定の版を使えばスンナリ動くのだろうか。しかしググっても、「この版で動いてる」という情報が見つからない…。
とりあえず、プロファイルを選んだ時に表示される文字列の中から、-cpu-used 0 -threads 8 を削除したら出力できるようになった。が、どうしてコレが関係してくるのか、さっぱり分からない…。
ffmpeg.exe は version N-81045-g450cf40。最新版をDLしてきたから、おそらく 3.0.1 以降の開発版だと思うけど。
ffmpeg 3.0.x を使ってるからいかんのかなと、 _Zeranoe FFmpeg - Builds から、ffmpeg 2.8.6 や、FFmpegOUT 0.05 が公開されてた頃の版であろう ffmpeg 2.5.2 をDLして試してみたけど、結果は変わらず。どれか特定の版を使えばスンナリ動くのだろうか。しかしググっても、「この版で動いてる」という情報が見つからない…。
とりあえず、プロファイルを選んだ時に表示される文字列の中から、-cpu-used 0 -threads 8 を削除したら出力できるようになった。が、どうしてコレが関係してくるのか、さっぱり分からない…。
◎ ffmpegに渡すオプションについてアレコレ試したり。 :
ググってたら、
_ffmpegでエンコードしたVP9(WebM)動画をブラウザで再生してみる | potproject.net blog
という記事で、ffmpegに渡すオプションの一例が載っていた。FFmpegOUT上でも試しに設定してみたり。
_VP9 Encoding Guide - wiki も参考になりそう。
色々試してみたけど、ビットレートを指定するだけで、とりあえずパッと見はそれほどおかしくない webm を出力してくれるので、それでもいいのかもしれないなと。
-c:a libopus -b:a 64k -c:v libvpx-vp9 -b:v 2M -threads 4 -speed 4 -tile-columns 0 -frame-parallel 0 -auto-alt-ref 1 -lag-in-frames 25 -g 9999 -aq-mode 0これだとエラーが出ない…。
_VP9 Encoding Guide - wiki も参考になりそう。
-c:a libopus -b:a 64k -c:v libvpx-vp9 -b:v 0 -crf 33 -threads 8 -speed 2 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25これはエラーが出る…。
色々試してみたけど、ビットレートを指定するだけで、とりあえずパッと見はそれほどおかしくない webm を出力してくれるので、それでもいいのかもしれないなと。
-c:a libopus -b:a 64k -c:v libvpx-vp9 -b:v 1Mとりあえず、64k とか 1M とか書いてあるところがビットレートの指定です。
[ ツッコむ ]
#4 [anime][neta] 「ストライクウィッチーズ」BS11放送版のOP映像がなんだかおかしい気がする
録画してたアニメを再生していて、ふとなんとなく気づいたのだけど。BS11で放送されてる、「ストライクウィッチーズ」なるアニメのOP映像がおかしいというか、妙なことになってるような気がしてきたわけで。
症状としては、画面の上から1/3のあたりに線が入ってるというか…。そこらへんを境にして、上と下で、めちゃくちゃビミョーに、まずほとんど分からないぐらいに、輝度が違ってしまっているというか。
必ずどのコマにも入ってるわけじゃなくて、どうやらスタッフ名等のテロップが表示された時に、その症状が出やすいようで。なんだろな、コレ。テロップ部分のレイヤーの範囲が画面サイズより小さい上に透明部分がビミョーに値を持ってるというかアルファチャンネルにめちゃくちゃ小さい値が残ってるのかな。でも、そんな状態なんてあるのかな。当時、テロップって、何を使って映像の上に乗せてたんだろう…。
ただ、これは元映像からしてそうなってるのか、放送波に乗った時点でそういう映像になるのか。あるいは自分が使ってる機材のバグやスペック不足なのか、そこらへん全然分かってないわけで。
ちなみに自分が使ってるのは、HDDレコーダ 東芝 RD-BZ710 + 液晶ディスプレイ MITSUBISHI RDT233WX-3D。どちらも古いから、テロップが出た瞬間に映像の輝度が変化して、内部の画像処理が何か誤動作して、画面の途中から変なフィルタをかけてる、みたいなこともありそうだなと。と言っても、他のアニメでそういう症状を見た記憶はないんだよなあ…。仮に機材がバグってるとしても、どうしてこのアニメだけが…。
まあ、件のアニメは少し古いアニメで、映像もアプコンをかけて放送してるようでもあるから画質その他を気にしてもしょうがないし。そもそも内容的にもアレだから、作業しながらBGVとして流してる状態で。故に自分としては映像面でおかしなところがあってもどうでもいいやって感じなんですけど。万が一放送版がおかしな映像だったとしても、どうせDVDやBDではちゃんとした映像になってるだろうから、ファンの人も別段困ってないだろうし…。
ただ、どうしてこういう症状が出るのかな、ってあたりが気になっただけの話で。と、メモ。
症状としては、画面の上から1/3のあたりに線が入ってるというか…。そこらへんを境にして、上と下で、めちゃくちゃビミョーに、まずほとんど分からないぐらいに、輝度が違ってしまっているというか。
必ずどのコマにも入ってるわけじゃなくて、どうやらスタッフ名等のテロップが表示された時に、その症状が出やすいようで。なんだろな、コレ。テロップ部分のレイヤーの範囲が画面サイズより小さい上に透明部分がビミョーに値を持ってるというかアルファチャンネルにめちゃくちゃ小さい値が残ってるのかな。でも、そんな状態なんてあるのかな。当時、テロップって、何を使って映像の上に乗せてたんだろう…。
ただ、これは元映像からしてそうなってるのか、放送波に乗った時点でそういう映像になるのか。あるいは自分が使ってる機材のバグやスペック不足なのか、そこらへん全然分かってないわけで。
ちなみに自分が使ってるのは、HDDレコーダ 東芝 RD-BZ710 + 液晶ディスプレイ MITSUBISHI RDT233WX-3D。どちらも古いから、テロップが出た瞬間に映像の輝度が変化して、内部の画像処理が何か誤動作して、画面の途中から変なフィルタをかけてる、みたいなこともありそうだなと。と言っても、他のアニメでそういう症状を見た記憶はないんだよなあ…。仮に機材がバグってるとしても、どうしてこのアニメだけが…。
まあ、件のアニメは少し古いアニメで、映像もアプコンをかけて放送してるようでもあるから画質その他を気にしてもしょうがないし。そもそも内容的にもアレだから、作業しながらBGVとして流してる状態で。故に自分としては映像面でおかしなところがあってもどうでもいいやって感じなんですけど。万が一放送版がおかしな映像だったとしても、どうせDVDやBDではちゃんとした映像になってるだろうから、ファンの人も別段困ってないだろうし…。
ただ、どうしてこういう症状が出るのかな、ってあたりが気になっただけの話で。と、メモ。
◎ デジタルになってからちと面倒臭い時代に。 :
それにしても、デジタル放送になってから、映像がおかしい場合にどこで問題が起きてるのか、原因をちょっと特定しづらくなったところがありそうだよなと。手持ちの機材がバグってるとか、諧調等のスペックが足りてない可能性も否定できないというか。若干面倒臭い時代になったなと。
でもないか。昔も違うところで面倒だったか。画面の端っこなんて、TVによっては映ったり映らなかったりしたもんな…。某シューティングゲームも、家庭用ゲーム機に移植された際、自機のオプション表示をアーケード版と同じく画面端にしておいたら、「このゲーム、オプション表示がそもそも見えねえ!」とクレームが次々に…。あの頃も、また違う面で、面倒臭い部分はあった…。
でもないか。昔も違うところで面倒だったか。画面の端っこなんて、TVによっては映ったり映らなかったりしたもんな…。某シューティングゲームも、家庭用ゲーム機に移植された際、自機のオプション表示をアーケード版と同じく画面端にしておいたら、「このゲーム、オプション表示がそもそも見えねえ!」とクレームが次々に…。あの頃も、また違う面で、面倒臭い部分はあった…。
◎ 画面端と言えば。 :
「エルガイム」の2番目のOPで、エルガイム MK-II が変形する時に足が切れちゃってた記憶があるのだけど…。たしか放送中はずっと直ってなかったような…。
と思ったけど。改めてググってみたら、足のところ、直ってる…。するとコレは自分の偽記憶…? それともどこかの時点で修正されてた…? あるいは自分、ダンバインあたりと混同してるのか…?
「ここから先はどうせ画面外だから描かなくていいだろ」的に線が途切れてて、仕上げの人が「ここから先は塗らなくていいのね」的に塗り残した感じの端っこが、変形した時にグイッとスライドして画面内に入ってきてた、ような記憶があるんだけど…。あの映像は…自分の偽記憶なのか…? ヤバイ。自分の脳はもうダメかもしれない。どこでそんな嘘映像が脳内発生したんだ。怖い。自分の脳がますます信用できなくなってきた。
と思ったけど。改めてググってみたら、足のところ、直ってる…。するとコレは自分の偽記憶…? それともどこかの時点で修正されてた…? あるいは自分、ダンバインあたりと混同してるのか…?
「ここから先はどうせ画面外だから描かなくていいだろ」的に線が途切れてて、仕上げの人が「ここから先は塗らなくていいのね」的に塗り残した感じの端っこが、変形した時にグイッとスライドして画面内に入ってきてた、ような記憶があるんだけど…。あの映像は…自分の偽記憶なのか…? ヤバイ。自分の脳はもうダメかもしれない。どこでそんな嘘映像が脳内発生したんだ。怖い。自分の脳がますます信用できなくなってきた。
◎ ずっと直さなかったと言えば。 :
「キャッツ・アイ」のOPで、タイトルロゴが出るときに、ヒロインの頭が一瞬つるっぱげになるのが、当時は気になって、気になって…。アレは撮影ミスだよな…。だけど、ずっと直さなかったよな、アレ…。
ググってみたら _関連記事 があった。良かった。コレは自分の偽記憶じゃなかった。自分の脳は全部がダメってわけでもなさそうです。
ググってみたら _関連記事 があった。良かった。コレは自分の偽記憶じゃなかった。自分の脳は全部がダメってわけでもなさそうです。
◎ わざと仕込めないかな。 :
今時のアニメも、たまにそういうの仕込んでおくといいかもしれず。もちろん本編でネタにする方向で。「昔と違ってデジタル制作なんだから、その気になればすぐに直せるだろ! なんで直さないんだ!」「うるせえ! スタッフは今それどころじゃねえんだよ!」「まさか…総集編」「言うな! その単語を口にするな!」みたいな会話を…。
や、「えとたま」や「鬼斬」や「ミルキィホームズ」あたりだったらできるけど、フツーのアニメではちょっとやりづらいですね。
積極的に作画ミスを利用する方向で…。主人公が放心したヒロインの肩を揺さぶりながら「しっかりしろー! ヒロインが作画崩壊しちゃダメだろー!」とか。…コレ、何かで見た記憶があるような、ないような。また偽記憶か。
そういうのって、脚本家さんは迂闊に書けないかもしれないよなと。台詞では「作画崩壊」と言ってるのに、作監さんが頑張りすぎちゃって全カットをキッチリ直してしまって意味不明のシーンになったりとか…。脚本家と作画陣の揺るがない信頼関係や、お互いの十分なコミュニケーションが求められるから、実はハードルが高いのでは…。そういうお遊びが出てきたら、スタッフの団結力を褒めるべき、かもしれず。や、分かんないですけど。
や、「えとたま」や「鬼斬」や「ミルキィホームズ」あたりだったらできるけど、フツーのアニメではちょっとやりづらいですね。
積極的に作画ミスを利用する方向で…。主人公が放心したヒロインの肩を揺さぶりながら「しっかりしろー! ヒロインが作画崩壊しちゃダメだろー!」とか。…コレ、何かで見た記憶があるような、ないような。また偽記憶か。
そういうのって、脚本家さんは迂闊に書けないかもしれないよなと。台詞では「作画崩壊」と言ってるのに、作監さんが頑張りすぎちゃって全カットをキッチリ直してしまって意味不明のシーンになったりとか…。脚本家と作画陣の揺るがない信頼関係や、お互いの十分なコミュニケーションが求められるから、実はハードルが高いのでは…。そういうお遊びが出てきたら、スタッフの団結力を褒めるべき、かもしれず。や、分かんないですけど。
[ ツッコむ ]
以上、1 日分です。