Juliusで独自辞書を使う on Raspberry Pi Zero
オープンソースの高性能汎用大語彙連続音声認識エンジン「Julius」(GitHub - julius-speech/julius: Open-Source Large Vocabulary Continuous Speech Recognition Engine)をRaspberry Pi Zero Wに入れて独自辞書で動作させたのでやり方をメモ。
Juliusのインストール
Juliusのバージョンは4.5。
(2022年6月現在の最新バージョンは4.6なのだけど、最初に4.6でつまづいてバージョンを落としてから何やかんややってうまく行ったのでそのまま4.5を使っている。もしかしたら4.6でも同じ方法でいけるのかもしれない。)
Raspbery Pi Zeroは標準のRaspberry Pi OSで、マイクにはUSB接続のカメラマイクを使用。
必要なライブラリのインストール
あとでJuliusをmake install
する際、ライブラリがないとないままで構築されてしまうので必要なライブラリを事前に用意しておく。
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install libasound2-dev libesd0-dev libsndfile1-dev
Julius本体のインストール
Raspberry Piにjuliusディレクトリを作成して諸々入れていく。
$ cd $ mkdir julius $ cd ./julius/
ダウンロードして解凍
$ wget https://github.com/julius-speech/julius/archive/v4.5.tar.gz $ tar xvzf ./v4.5.tar.gz
コンパイル、インストールする。
$ cd ./julius-4.5/ $ ./configure $ make $ sudo make install
ディクテーションキットの用意
juliusの本体と同じ階層にjulius-kitディレクトリを作成し、ディクテーションキットをダウンロードして解凍する。
$ cd ~/julius/ $ mkdir julius-kit $ cd ./julius-kit $ wget https://osdn.net/dl/julius/dictation-kit-4.5.zip $ unzip ./dictation-kit-4.5.zip
※キットはサイズが大きいので、解凍前の圧縮ファイルを適宜削除しておく。
Juliusの動作確認
$ cd ~/julius/julius-kit/dictation-kit-4.5/ $ julius -C ./main.jconf -C ./am-gmm.jconf -nostrip
うまくいっていればこちらの発話内容を認識してくれる。すごい。
Juliusの辞書作成
辞書の作成が思った以上に大変そうだったので、以下のサービスを使わせていただいた。素敵。
julius簡単辞書作成ツール
(PPDR様, juliusの辞書を作って認識速度&精度を爆上げする)
生成、ダウンロードしたデータは展開してjuliusが利用できる場所に移動。
なお、今回はgitで「hacot」(←ロボットの名前)というリポジトリを作成し、頻繁に編集するファイルをまとめて管理している。ちなみにgitも今回使い方覚えた。
階層構造は以下のような感じ。この項ではjulius-dict/
の中に置くファイルを作成する。
/home/pi/ |- julius/ |- julius-4.5/ |- julius-kit/ |- dictation-kit-4.5/ |- git/ |- hacot/ |- script/ |- julius-dict/ |- sample.grammer |- sample.phone |- sample.term |- sample.voca |- sample.yomi |- memo.txt |- sample.dfa |- sample.dict
上記のjulius-dict/
にあるファイルのうち、「sample.dfa」及び「sample.dict」の二種類は上記のサービスでは作成されない。
以下のコマンドでそれらを生成する。
$ cp -b ~/julius/julius-4.5/gramtools/dfa_minimize/dfa_minimize ~/julius/julius-4.5/gramtools/mkdfa/dfa_minimize $ cp -b ~/julius/julius-4.5/gramtools/mkdfa/mkfa-1.44-flex/mkfa ~/julius/julius-4.5/gramtools/mkdfa/mkfa $ ~/julius/julius-4.5/gramtools/mkdfa/mkdfa.pl ~/git/hacot/julius-dict/julius-dict
ちなみに、上記コマンドのうち一つ目のコピーを実行しなかった場合、次のエラーが発生した。
Warning: dfa_minimize not found in the same place as mkdfa.pl
dfa_minimizeというものがmkdfa.plと同じ場所にないとだめみたい?
また、二つ目のコピーを実行しなかった場合もファイルを生成できず、エラーとなった。
ググってみると、元々gramtoolsに入っているmkdfaが正常に動作しない、という情報あり。どうしてなのかはわからない。
(情報元:Juliusの独自辞書を使って音声を認識させる - Qiita)
完成!
実際に作成した独自辞書を使ってみる。
$ julius -C ~/julius/julius-kit/dictation-kit-4.5/am-gmm.jconf -nostrip -gram ~/git/hacot/julius-dict/julius-dict
問題なく認識されれば成功。
なお、環境によってはマイクデバイスの優先度選択なども必要になる模様。
以上!
経緯とか
自作ロボットの音声認識については、今回のJuliusの他にもGoogle Assistant SDKなどの外部のサービスを利用する手もあります。
以前実際に使用した印象では、Google Assistantは認識も極めて正確で高速でした。独自辞書を使わない場合のJuliusの動作と比較すると、あらためてその優秀さがわかります。
しかし、外部サービスはどうしても廃止や大幅な仕様変更等の懸念があります。Googleは大好きですが彼らはすぐサービスを終了しがちなイメージがあるので信頼はできません。
いつか自分で作ったロボットに愛着が湧いたころにサービスが提供されなくなり、聴覚や脳の一部にあたる機能が失われるとしたら、それはあまりにも悲しい。
あと単純にネットワークを利用せずに内部で処理する方がロマンがあります。ある気がします。
そんなことを考えて、今回オフラインで動作するJuliusに挑戦しました。
とにかく、無事に動作してくれてとてもうれしい。Juliusを作った人たちは天才なのではないかと思う。
作成中のロボットについて
現在2体のロボットを作成しています。
片方は技術習得と見せびらかしを目的に作ったキューブ型の小さなロボットで、Raspberry Pi Zeroで制御します。
今回、これにJuliusを入れました。
Raspberry Pi Zeroは3や4と比べてサイズや省電力性に優れる一方、非力なので、独自辞書を作成しない場合は音声認識に数秒以上の時間がかかります。
独自辞書を用いることで、即時の認識が可能になり誤認識も減るため、音声コマンドによる操作が実用的になりました。
もう一体のロボットにはRaspberry Pi3Bを使っています。そちらは人間との対話機能を持たせたいので、語彙の少ない独自辞書では物足りなく、何か工夫できないか思案中です。
つづく。
OHTOリバティのグリップを自作した話
3Dプリンターネタ。
OHTO(オート)という会社のボールペンが好きで、中でもLIBERTYというペンに思い入れがあります。
それはまだ社会人になりたてのころ、初めての上司(文具好き)にいただいた水性ボールペンでした。
プラスチッキーな油性ボールペンしかそれまで使っていなかった私は、太さと重さと書き心地のあまりの良さに心躍ったものでした。
しかしこのリバティ太軸、個人的に致命的な弱点が一つありまして。ゴムグリップなんですよ。劣化するんです。
数年前からグリップのゴムから水分が出てベタつき、ペンケースの奥底に眠っていたのだけれど、あらためて使いたいなーとふと思いまして。
で、調べてみたらこのリバティ太軸、すでに廃盤になっているんですね。
私の持っているのはリバティの中でも前期に販売されていた古いモデルみたい。
セルサスという同型の後継が出ているらしく、ただできることなら買い直すのではなく、思い入れのあるリバティを使いたい。名前もリバティの方が好きだし。
あとゴムグリップは嫌。消耗品としてグリップだけとか売ってたらいいんですけどね。
そこで、グリップを自作することにしました。
グリップを印刷する
型をとってレジンを流して、とか木を削って、とかも考えたのですが、手間とお金がかかりまくりそうなので、21世紀の文明の利器である家庭用3Dプリンターを使います。
サイズを測ってキャドってー
印刷してー
完成!
お手軽!
プリント時間は10分。
実は一回サイズ合わなくて作り直してるけどね……
積層痕がいい具合に滑り止めになってます。
色が正直微妙だけどそこは愛着で補うということで。そのうち黒で作り直そうかな。
なんだか久々に3Dプリンターの一般的な使い方をした気がします。便利だわー。
以上!
キューブ型ロボットを作る話/with ニッケル水素電池 & Raspberry Pi Zero
反省)相変わらず前置きが長い。後半でロボットを作るよ。
かわいいネコちゃんを作っていたはずだった。 もう少しでボディが完成する、というところまでは行ったのだけれど、半年ほど進捗がない状態で止まっている。 理由はいくつかあって、中でも大きな理由が二つで、乗り越えるのに気力とか時間とかが足りない感じ。
まず、配線が難しい。
それぞれのセンサやモジュールに何をつなげるとか、電圧や電流はいくらかとか、一つ一つ計算したそれらを効率的に並べたいのだけれど、良い考え方がいまいち掴めていない。同じ電圧の線はまとめたいけれど部品の位置関係が……とか、今までバラバラだった各要素の整合性を保って並列で考えて進めないといけない、というのが個人的にとても大変。
単純になれていないというのも大きい。
そして、完成させたとして動くかわからない。手が止まってしまっている主要因はおそらくこっち。
動かない可能性が大いにある。どこか一箇所、何かが違っていたら動かないわけで。そうなったら当然原因を探って修正すればいいのだけれど、例えばそれが設計から直す必要があるものだったら? 悪ければ数十時間かそれ以上のやり直しになる。これが怖い。今まで散々そういうケースはあったけれど、完成が見えてくると急に余計に不安が大きくなる。
過去に配線を間違えて何度か煙が上がったのも若干トラウマ。
「完成させるまでは壊れていることは確定しない」という、シュレーディンガーの機械猫みたいな話。全然違うかもしれない。
弱音はここまで。いつまでも手を止めていても仕方がないし、遅かれ早かれ何としても完成させることは自分の中で決定しているわけだから、何か別のことをして自信と経験をつけようと思った。
小さいロボットを作りたい欲
ネコちゃんのロボットは全長50cmくらいある。作ってて少し後悔するくらいにはでかい。
しかも見た目が少し独特なので(とてもキュート&クール)、気軽に他人に見せびらかしたりしにくい。
趣味の話を聞かれたとき(もうすっかり電子工作が趣味になってしまった)、電子工作をしているとかロボットを作っているとか口で話して説明するのは結構難しくて、実際に何かを見せたくなる。けれども、気合を入れて作ったものは脚の生えたニキシー管時計とか数年前のプロトタイプネコちゃんくらいしかなく、少し見る人を選ぶ。
↓ニキシー管時計
自作ニキシー管時計に足を生やした pic.twitter.com/9V1rwfjbhb
— 電子猫 (@denshicat) 2021年5月3日
↓プロトタイプネコちゃん
歩行、旋回、手を振る pic.twitter.com/iQgO1zja4h
— 電子猫 (@denshicat) 2019年9月11日
仮に友人や同僚が電子工作をしているとして、ニキシー管時計に脚を生やしたりしていたらちょっと心配になる。心配はかけたくない。
ネコちゃんを作るために買って結局使わなくなった部品が結構増えてきていて、それらを使って別のロボットを作ろうと考えた。小さくて持ち歩けるような、無難で心配されないようなロボットを。
立方体のロボットにする
複雑な外観にしたくなかった。球か円柱か直方体で迷った。
本命を作るためのテスト機でもあるので、コンピュータとしてはネコちゃんと同じRaspberry Piを載せることにして、そこから全体の大きさや形を設計し始めた。
コンピュータや基板は長方形なので、本体の形も四角いほうが都合が良く、結果として立方体に落ち着いた。(キューブ型のかわいい自作ロボットをSNSでしばしば見かけ、影響されたのも少しある)
大きさはRaspberry Pi Zeroを載せられるギリギリの一片8cm。
サーボモータが余っているので当初は歩かせようかと思ったのだけれど、歩かせるとなると一回り以上は大きくしないと難しかったので、顔を上下左右に振れるようにだけする。
スペックとか
基本的には、以下を今回の目的とする。
- 誰にでも見せられるロボットの作成
- 基板の配線練習
- Raspberry Piを用いた制御の練習
- 電圧測定モジュールのテスト
- ニッケル水素電池の活用
費用も時間もかけていない分、気軽に色々試せるはず。
載せるものは以下。
- Raspberry Pi Zero W
- 電圧測定モジュール
- 気圧センサー
- 焦電式赤外線センサー
- USBカメラマイク
- 1.3インチディスプレイ
- 圧電スピーカー
- サーボモータ×2
- ニッケル水素電池(単三)×4
Raspberry Piは小型で安いZeroで、通信機能のあるW。できたらカメラで動体検知とかしたいけれど、画像解析なんかは性能的に厳しいのかも。とりあえず試してみるつもり。
ニッケル水素電池は、もともと本命の電源に使いたくて買ったものの、電流不足で結局使わずにしまってあったやつ。
スピーカーが圧電スピーカーなのは積載スペースと値段の問題から。やってみたい発話方法もあった。
電圧測定に用いるのは本命のネコちゃんと同じINA219。テストを兼ねる。電流も測れるけれど測る予定は今のところない。
ネコちゃんに使うのはリポバッテリなので、電圧を正しく測定・管理できないと事故につながる危険があり、念のためこちらで先に試しておこうという考え。
そのほかは適当に。
手元にある部品が多かったので、かかった費用は新たに買ったラズパイとmicroSD含めて計4,000円弱くらい。
ラズパイだけ買えばいけるかなーと思っていたのだけど、考えていくうちに載せたいものが増えてしまった。
設計
Fusion360でボディの設計。 なるべくパーツ数を少なく、スタイリッシュな感じ(?)に作る。
単三4本用の電池ケースを最下層にねじ止めし、中層にラズパイとユニバーサル基板、上部にサーボモータとセンサー類を固定します。
ネコちゃんを作りたいがためにFusion360や3Dプリンターを学び始めて早2年弱、まだまだだけど、0からここまでできるようになったと思うとちょっと感慨深い。
ボディの印刷
設計したデータを3Dプリンターで出力。 プリンターを購入した時におまけでもらった透明のPLAフィラメントが残っていたので、それを使った。
そういえば昔のMacとかゲーム機とかのクリアボディってすごく魅力的に感じるのだけど、今どうして少ないんだろう…? スケルトンのスマホとかあったら欲しいよね。みんな欲しくないのかな。でも今は透明にしても背面ほとんどバッテリーで埋まっちゃうか。
電源とか配線とか
ニッケル水素電池4本を電源にする
電源は単三ニッケル水素電池4本で約4.8V。ラズパイゼロは4V以下でも動作したっていう書き込みがSNSで見られたので、それを信じて電池駆動を試みる。ニッケル水素電池は一本あたり1.2Vとされているけれど、満充電の時は1.4Vくらいらしい。手元の充電器だと1.35Vだった。4本だと5.4Vと許容範囲。アルカリ電池だと過電圧になる恐れがある。
ググると3本とか2本+昇圧とかで電池駆動をしている人はいたけれど、4本使っている人は見つけられなかった。ので、内心パイを焼いてしまわないかビビりまくり。
もちろん本数を減らして昇圧することも考えたのだけど、Piとサーボを動かすにあたって昇圧まですると電流不足が懸念されたので4本そのままで挑戦することにしたのだった。昇圧や降圧を組み込むと回路や電圧管理も複雑になるしね。
配線
電源からラズパイとサーボに約4.8Vを給電し、ラズパイの3.3Vから他のセンサー類に電力を供給する。
電流/電圧測定モジュール(今回は電圧の測定にのみ用いる)のINA219は、ラズパイにVCC,SDA,SCL,GNDを繋いで、V+に測定したい電源の+を接続する。
3.3VやGND、I2Cなどの複数のセンサーを並列で接続するものに関しては、ラズパイからユニバーサル基板を挟んで繋いだ。
圧電スピーカーはそのままだとやや音が大きすぎたので、330Ωの抵抗を挟む。
電源とサーボモータの間には220μFのコンデンサを挟む。電圧降下を防ぐ目的でサーボ一個あたり100μFくらいあるといいとどこかで読んだのだけど、数値の根拠は知らない。
今回使用したカメラマイクは以前購入したUSB接続のもので、Raspberry Pi Zeroに繋ぐために端子をUSBからmicroUSBに取り替えた。
外装はすでに剥いてあったのだけれど、線も長すぎてボディに収まらないので、適当な長さに切って、各線を剥いて、別途購入したmicroUSB変換端子にはんだ付けしてグルーガンで覆って、なんとか取り付ける。けっこう大変だった。あと綺麗な外装を割ったりしっかりしたシールドケーブルを切ったりでメーカーさんに少し申し訳ない気持ちが芽生える。
ちなみにシールドケーブルというものも初めて見て知った。以前はカメラマイクの基板にわからない太い線が一本ついているなーと思っていたのだけど、実はそれがシールドで、ノイズを除去するために接地させていたのだと思う。製品の設計とかは素人の自分からすると当然レベルが全く違うというか、本当によくできていて感心したりよくわからなかったりばかりだ。
ラズパイや電源と基板、各モジュールを繋ぐ配線は本体内の空いているスペースにちょうど収まった。途中でこれはダメかも、と諦めかけ、よく考えもせず8cm角にした自分を若干恨むくらいギリギリちょうどだった。ワイヤーは思った以上に場所をとる。いい勉強になった。
起動/終了スイッチ
なくてもいいけれど付けたいもの第3位くらいが起動ボタン。電源に繋いだら起動する、でも特段困ることはないのだけれど、やっぱり起動スイッチは欲しい。ついでに安全に電源を落とすためのスイッチも欲しい。Raspberry Piは小さなパソコンなので、いきなり電源を落とすのは良くない。シャットダウンしたい。
Raspberry PiはSCLのピン(GPIOの3番ピン)をGNDに落とすと起動させられるので、起動/シャットダウン用に用意したタクトスイッチに繋ぐ。 通常はこれで起動も終了もできるようになるみたいなのだけれど、I2Cを有効にしていると終了は受け付けないようだった。 そこで、設定で割り当てをGPIO3から空いている他のGPIO(今回は25番を使った)に変更して、そのGPIOもスイッチに繋いだ。 これで、電源OFF時にタクトスイッチを押すとGPIO3がGNDに落ちて起動し、電源ON時にタクトスイッチを押すとGPIO25がGNDに落ちてシャットダウンされるようになる。 もっとスマートな方法がありそうな気もするんだけど、まぁよしとする。
キューブ型ロボット完成(ハードだけ)
できました!じゃーん!
名前はHACOT(ハコット)君としました。
「HACKABLE CUBE ROBOT」から名付けました。はい。
箱型だからっていう安直なネーミングじゃないです。キューブ型です。
お気に入りポイント1
半透明で少し基板とかが見える感じがとてもそそる。うわぁ。
お気に入りポイント2
上部外装と下部電池カバーは磁石で止めてあり、簡単に付け外しができる。余力があればいくつかバリエーションを作って着せ替えできる。耳をつけたり、足を生やしたり、色を変えても楽しいと思う。余力はまだない。
とりあえず起動・終了は無事できました。電圧の問題はなさそうで一安心。
本格的に動かすためのプログラムはこれから。
つづく。
Fusion360+3Dプリンターで自作ロボットの頭を作る
Fusion360と3Dプリンターでロボットの頭部を作りました。
昨年末に作っていたのだけれど記録し忘れており、思い出しながら書き残しておきます。
デザインと機能
猫の頭部を模したデザインにし、3軸可動させます。
サーボモータによる可動の他に、以下のモジュールを載せます。
- タッチセンサ
- ステレオスピーカー+スピーカーアンプ
- マイク
- カメラ
- OLEDディスプレイx2
音声入力や顔認識に使用する(予定の)マイクやカメラに加えて、なで感知のためにタッチセンサを搭載します。
近年急速に増えてきたチャットボット等に対して、ロボットの優位性、つまり現実世界に存在することによる利点は「環境に反応できること」、だと考えています。ので、とりあえず載せられるものは載せておきます。
可動について
ピッチロールヨーの3軸可動を、3つのサーボモータ(MG90S)を使って作ります。
うち2軸はサーボを両軸化して動作の安定を図りました。
↓動作テストの様子(フレームのみ仮組み)
うなずく pic.twitter.com/l2Z8ta1kXM
— 電子猫 (@denshicat) 2020年11月6日
首を振る pic.twitter.com/Z57TO9buYt
— 電子猫 (@denshicat) 2020年11月6日
首を傾げる pic.twitter.com/GWkJyOzVgO
— 電子猫 (@denshicat) 2020年11月6日
かたちにこだわる
今回のロボットにはとってもかわいいモデルがあるわけですが、仮に完全なオリジナルを作るとしても、その顔は大事です。
「ロボコン」というロボットコンテストを題材とした邦画があります。いい青春映画でした。競技ロボットに顔は本来不要なものですが、主人公の学生たちはロボットコンテスト出場に際して、重量制限に苦心しつつも、顔だけは残すという選択をします。大変わかりみが深いです。
ロボットに顔は不要と言う人もいるでしょうが、それは美容にお金を掛けるのは無駄というのと同じ論理です。たぶん。
人が対象を判断するとき、その見た目は大きな基準の一つとなります。
顔のない(または顔があっても無機質な)ロボットには、人々は怖がったり、辛辣な言葉を投げることすらあります。Spotくんとかペッパーくんとかとか。彼らをモノと認識しているためでしょう。私は彼らもとてもかわいいと思いますが。
一方で反対に、モノをモノと思えない、形に認識が騙されることもあります。例えば、人間を模した絵や3Dモデルに私たちは簡単に誘導されます。誰かが描いたシナリオ通りに動く人形であっても、そこにまるで本当の人格が存在するかのように錯覚しがちです。漫画やアニメの登場人物に感情移入するのは普通のことですし、憧れたり恋愛感情を抱くのも今となってはよくあることかもしれません。昨今のVTuver界隈などの話を聞いても、まさにという感じですね。
ただの形に認識が誘導されることを人間のセキュリティホールと取る見方もありますが、私はそれを悪いことだとは思いませんし、むしろそういった境界の曖昧さこそ人間らしい特性の一つなのだと好ましく捉えています。
ロボットを、愛着を持たせたい・持ちたい対象として作るなら、そうした人間の特性も利用するべきでしょう。
さて、今回は人型ロボットではありません。猫です。
不完全なプログラムで動かされるロボットには、猫のかたちを与えるのは都合が良いと思います。
彼らが気まぐれであり、思い通りに動かず、それでもかわいいということは世界共通の認識として存在していることでしょう。何をしても大抵愛らしく許してしまう。猫という形は、多分無意識的にそうした意味を伴います。
猫の形を借りることで、その意味も(全てではないにせよ)借り受けることができると思うのです。
腹立たしい顔のロボットが家具を壊したらポンコツと貶されるでしょうが、猫顔のロボットが家具を壊したら「もうしょうがないなーこいつぅ」と許されるかもしれません。例えばそういうことです。
そんなことを考えたり考えなかったりしながら、かわいい猫の形を必死に作りました。
設計と印刷
設計には3DCADソフトのFusion360を使用して、作成したデータをFDM方式の3Dプリンターで印刷します。
1号では頭部をアルミ板で作りましたが、いかにも試作機といった風貌でした。3Dプリンターを利用することで曲面も多用することができ、手加工と比べてより精度の高いものができるはずです。
設計の流れ
まず、頭部内部に収める必要のあるパーツをモデリングします。
次に、胴部の大きさから割り出した頭部の予想サイズに基づき、頭部外装のモデリングを行います。
並行して、全体が頭部外装の内側に収まるよう配置し、土台を設計します。
文字にするとこれだけですが、実際にはスカルプトモデリングのやり方を学び、外装を可愛くなるよう何度も手直ししたり、サーボを干渉を抑えつつ両軸化したり、OLEDパネル等の実物に寸法を合わせて調整したり、となかなか骨が折れました。
印刷可能で組み立てと動作時に各パーツが干渉しないデータを作る、というのも大変。
印刷時間と印刷制度のバランス
印刷サイズは縦横高さ18cmくらい。積層ピッチ0.2mmで10時間程度。1.5mmやそれ以下ならより積層を目立たなくできるはずだけれど、印刷時間が伸びれば予期しない原因で失敗するリスクも高くなるという経験則もあり。フィラメントも200gくらい使うので、できれば一発で決めたい。
失敗と調整
印刷した結果、大成功とは言い難い出力物ができあがりました。
表面は荒れ、ところどころ割れている箇所もあり、設計より少し歪んでいます。
原因は、形状を薄くしすぎたことによる強度不足だと思われます。PLAほどの硬さのないPETGを素材として使用したことも原因の一つでしょう。壁面の厚み1.2mmくらいで直径18cmほどの大きな球形を印刷したため、途中から出力物の自重やプリンターヘッドとの摩擦等で出力物が揺れてしまっていました。
形状を工夫するか、印刷速度を遅くするか、素材を変えるかなどすればもう少し上手く印刷できたかもしれません。
まぁなんとかなるだろうと思いそのまま進めます。
また、内部フレームでも一度失敗しました。
こちらは、サーボのトルクが重量に負けて、頭部を指定の角度で保持できないというものでした。修正が必要です。
トルクが不足するということは、重すぎるか、頭部の重心がサーボの可動軸から離れすぎている、ということです。
軽くするのは難しいので、サーボの位置を微調整しフレームを設計し直すことで、軸を重心に近づけ、角度保持できるようにしました。
塗装
積層痕を消したり、見た目をイメージに近づけたりするために塗装をします。
やすりがけ
全体にやすりをかけます。印刷時にできたダマを落としたり、積層痕を薄くしたり、塗料の定着を良くする目的です。
プラサフ
プライマー&サーフェイサーでプラサフと呼ぶらしいです。
塗料の食いつきをよくする下地だそうなので、吹いておきます。
アクリル塗料で塗装
プラスチック用のアクリル塗料で色を乗せていきます。
下地の色がかなり出てしまうので、何度も重ねて塗り直します。
組み立て
パーツの印刷が終わったら、いよいよ組み立てます。
うまくできるように設計し作っているのですが、実際に完成させるまでは不安が拭えません。
塗装前に一度仮組みをし、塗装後にセンサー等の取り付けと配線をして組み上げます。
↓仮組みしたところ
今回はここまで。
設計や印刷から塗装まで、一通りやってみると新しい発見や学びがありますね。
次は確実にもっとうまくできるはず。
100点の出来じゃなくても、まずは完成を目指し先に進みます。
つづく。
制作記録_2020(04-12)
今年の春頃から、作業した内容や考えたことのログをメモに残しています。
年末だしせっかくなのでそれをここに上げておこうという試み。
こういう誰の役に立つでもない内容の浅い日記的なやつ、ブログ=WebLogの古い在り方って感じがしてすき。約17,000文字。
2020/04/18
赤外線送信に再挑戦する。 前回は、赤外線の記録はできたが、送信がうまくできなかった。 原因の一つとして、赤外線LEDの電流(=光量)不足が考えられる。まずはここを修正して、試すことにする。 抵抗値を書籍をもとにしたものから下げ、LEDに200mA程度流れるようにした。本来は過剰な電流だが、リモコン用としてなら照射時間が短いことから問題ないはず、というWeb情報と自己判断による修正。 結果、前回うまくいかなかった照明の操作が問題なくできるようになった。おそらく、他の家電も同様に操作できるものと思われる。
2020/04/20
bodyの作成に着手したい。電子部品のテストと異なり、検討・修正の繰り返しを何度も行う必要があると想定。故に、早い段階から着手しておき、思考時間を多く取るようにしたい。 今日は、急がば回れという考えから、CADソフトの習熟に努めることにする。経験則として、こうしたツールを用いる場合は、手を動かすより先に知識を得る方が最終的には効率が良い。今回のように、完成物にクオリティを求める場合は尚更だ。
2020/04/29
数日前から脚部の設計を再び始めている。 サーボを固定するフレームと、塗装してフレームに被せる外装を分けて作る。
2020/05/03
脚部フレームの大まかなモデリングはできた。 複数の脚とボディをデータ上で仮組みすると、ひざ下の短さが目立ったので延長。 不恰好なのは良くないが、長くしすぎると成形と制御が難しくなる。 テストプリント後、動作に応じて設計を大幅に見直す必要が生じるかもしれない。
ボディフレームの作成に際して、予め使用するすべてのモジュールをモデリングしておく。ボディフレーム上に配置するために(配置可能なボディフレームを作るために)、少なくとも正しいサイズを把握しておかなくてはならないからだ。
各モジュールのモデリングを終えたら、ボディフレームの設計に取り掛かる。 脚部が本体の最下層に位置し、クーラーに取り付けたレンズが最上層に位置 する。
2020/05/05
新しいアイデアが湧いた。ニキシー管時計を取り付けたいと考えていたら、その電源供給用にUSBコネクタが欲しい、と思った。予めつけておけば、拡張時にも使えるし、非常時にもスマホの充電なんかに使えるかも。 また、スピーカーの電源もバッテリーから直で取れば、ノイズの削減ができるのではないか。
2020/05/09
脚部のモデリングを行なっている。フレームと外装の分離が課題で、外装部分に曲線を多用する場合の自然な接続が難しい。また、各パーツが干渉しないように調整するのもなかなか困難。 しかし、脚部は顔や頭部に次いでデザイン的に重要なポイントなので、妥協はしないようにしたい。
2020/05/11
脚部設計の続き。 足の根元部分のフレームはほぼできた。モデリングを進めるうちに、フレームと外装が干渉することが判明したため、外装を作り直すことにする。 曲面かつ薄い外装部分に負荷をかけるのはたわみなどの心配があるし、ネジ穴を空けるのは美しくない。数時間が水の泡だが仕方ない。妥協はしない。
2020/05/15
二日前に、尻尾を曲げるためのリンク機構を考案した。twitterにあげたところかなり反響があり、新しい知見も得られた。 尻尾等にはワイヤ駆動を用いるのが定石らしい。しかし、ゾイドなど同様のリンク機構で動くホビーもあり、動作や保持、堅牢さを考えるとこちらにも優位な面がある、らしい。 サーボモータで動作させることを考えると、サーボの動作角は余裕をみて120度で、尻尾の先は180度+αくらいの増幅率にしたい。 リンク間の長さを調整することで調整していく。トルク負けするようならギアで減速して、というのも考えたが、もともとの動作角に制限のあるサーボモータではあまり意味がない(力の加わる接続点をサーボに近づけると、その分動作の増幅率が大きくなってしまう)。実際の寸法で作成し、トルクの不足に応じてサーボを変更できるように設計するか。
2020/06/03
足の設計とテストプリント完了。 足は昨年からあれこれ考えていたので、かかりきりではないとはいえ、半年以上かかったことになる。年始にはすでにリンクを用いた2軸のテストプリントをしていたが、そこからはかなり大幅な変更を加えた形だ。結果として動作の自由度はとても高くなり、電源から変更したことで全体の設計やトルクにも余裕が生まれた。コストも大幅に増したが仕方ない。 概ね完成といったところだが、実際に組むと、いくつか修正の必要な点が見つかった。
- サーボの中心穴の径拡大→中心は大きめにする
- サーボホーン固定用の穴を追加
- フレームの幅1mm程度大きく→サーボを固定した際、やや歪んでいるため調整
- 爪先の固定方法修正→現在ではネジが余る、止めるのも困難
- 配線用の穴の形状を最適化→大きすぎたり、線が暴れたりする
- 第1外装と第1フレームの固定用爪追加→膝側がぱかぱかしそう
- 第2外装と第3フレームの干渉低減?→改善できればもう少し可動域を増やせる。要検討。
- 脛の長さを短くする→要検討。1,2cm短くしてもいいかも。
今は気乗りしないので、時間のあるときに修正する。
2020/06/04
今日からは尻尾の設計に入る。 リニアサーボという、直線運動をするサーボモータがあるのを知った。回転運動を直線運動に変換しているものだ。 まずは真似てギアを作り、手持ちのサーボで直線運動を操作できるようにするところから始めようと思う。 180度の回転をおよそ2cmくらいの直線運動に変換するつもり。 尻尾の曲げ伸ばしにはリンクを用いて、リニアサーボで動かす。 直線運動の長さに合わせてリンクによる曲げ伸ばしの角度を計算をするのは至難なので、作成したモデルから曲げ伸ばしに必要な長さを求め、それに合わせてギアの歯の数や大きさの方を調整する予定。
リンク構造を使用した骨組みをまず作り、そこに配線用の空洞と外装を加える。
2020/06/某日
直線運動への変換は非効率で不要だ。 単純にしっぽを上げる回転運動をサーボで操作できるようにギアを作ればいい話だった。 作成したモデルでは、サーボの180度を60度に変換することとした。60度程度ならギアが大きくても高さを抑えられる。
2020/06/10
しっぽのリンク部分をプリントし、動かしてみた。 ギアの噛み合わせも問題なく、サーボのトルクも不足はしていなかったようで、今のところは成功と言えそう。 しかし、外装部を取り付けることで重量も増加するため、実際にトルクが足りるかどうかはやや厳しいところだ。 また、プリントすることで細かな数値、特に厚みのずれによる干渉が判明したため後日調整する。 サーボMG90Sを180度動かせていなかった(150度程度だった)ので、後日プログラムも修正する必要がある。
2020/06/24
尻尾の水平方向の可動について、先週から少しずつCADをいじっている。 歯車を用いて120度くらい動かせるようにするつもり。もともと180度動かす必要はないし、トルクも単純計算で1.5倍くらいになる。 サーボを取り付けるスペースと、軸を中心にする兼ね合いから、形状がやや複雑になる。
2020/06/25
尻尾の根元部分のサーボを覆うパーツを作った。 サポートを多く使用したため、PLAでは問題なかったものの他の素材だと綺麗に除けなくなるかもしれない。 また、口が狭くサーボが組み込めないという致命的なミスもあり、根本的に修正が必要。 印刷後の部品を見ると、積層間の定着が弱いようだった。フローの問題か、温度の問題か。次回は温度を少し上げてみることにする。
フィラメントについて。PETGが完成品の素材には適していると考えていたが、PC(ポリカーボネート)もアリかも。しかし、その場合は塗装が困難になる。ひとまずは保留。力が加わるフレームにはPETG、外装はシルバーのPLAとかでもいい気がするが、悩ましい。
2020/07/07
ここ一週間ほど、ロボットではない動かないモデルを作っている。 fusion360のレンダリング機能を使うと、自分でも驚くほどクオリティの高い(高く見える)モデルができ、楽しい。 昨日、このモデルをもとにARで表示ができないか、というアイデアが浮かんだ。今日調べてみたところ、Webを使って思ったよりも簡単に実装する方法がありそう。しかし、fusion360はあくまでも設計用のソフトであり、そういったモデルの作成には適していないみたいだ。かわりに、blenderという3DCGソフトを使用すると良さそう。使い慣れてきたfusion360でオブジェクトを作成し、blenderで取り込んで調整、といった流れでモデルは作れそうな気がする。 ARはロボットと比べると実在感で大きく劣るが、優れている点も多い。 まず、多くの人に手軽に見てもらうことができる。また、モデルの作成も物理的な制限がほぼないため容易だと想像できる。自重を支えなくてよかったり、モーターや基板やバッテリーなどの制限を気にしなくていいのは本当に楽で良い。アニメーション等はどの程度できるのかわからないが、ロボットに同じことをさせるよりも簡単なのではないか、と思う。面白そう。
2020/07/24
ARのモデル作成と表示について。 7/13にARのモデル表示用サイトを公開。着色は間に合わなかったので、その後数日に渡り更新を続けた。 SNS上でもそれなりの反応が得られ、スクショをあげてくれたフォロワーさんも数人おり(とてもうれしい)、個人的には満足。 共有の手軽さという点はやはり大きい。共有したものがモデル自体や設計図だったなら、それを作る人は一人もいなかっただろう。 しかし一方で、その空虚さも感じた。データはデータに過ぎず、と言うとやや語弊があるが、そこから得られる情報量が、実在するものと比べると圧倒的に少ない。何らかの方法で情報の不足を補うことができれば現実に近しくもなるのだろうが、そのためには例えば膨大な分岐を持つ対話機能など、より実現が困難であろうものを要する。データにリアリティを持たせることは、実物にリアリティを持たせるよりよほど大変だということを実感する。今回作成したARモデルが今後動いたとしても、恐らくフィギュアへの認識とさほど変わらず、そこに心は感じない気がする。あるいはVRとかなら、多少は違うのかもしれないが。
2020/08/21
一、二週間ほど前に、リンク機構を用いた尻尾のテストプリントをした。軸径等のわずかな誤差の重なりによって、全体で大きくがたつきが生じることがわかった。重量が思ったより増えてしまっていることも原因かもしれない。現時点では改善が困難であるため、簡素な尻尾をゼロから作ることにした。
今日ようやく尻尾ができた。 可動は根元から上下左右のみとなり、リンク機構を用いたものと比べて面白みには欠ける。一方で、構造はシンプルになり、サイズやデザインの統一感ではこちらが勝っているように思う。 塗装や見栄えを重視し、尻尾は二つのパーツを重ねて作ることとした。もともと1パーツとして印刷するには大きすぎたため、部品を繋ぐ上でも2層構造は都合がいい。 尻尾の先端と根元だけ付け外しできるようにネジで固定し、他は接着してしまう予定。 部品の強度や、自作のギアを用いないためトルクがやや不安ではあるが、配線経路まで含めてひとまず納得のいくモデルが完成したので、次に進む。
足の以下の修正をまだ行っていなかったため、行う。再掲。
- [x]サーボの中心穴の径拡大→中心は大きめにする
- [x]サーボホーン固定用の穴を追加
- [x]フレームの幅1mm程度大きく→サーボを固定した際、やや歪んでいるため調整
- [x]爪先の固定方法修正→現在ではネジが余る、止めるのも困難
- [x]配線用の穴の形状を最適化→大きすぎたり、線が暴れたりする
- [x]第1外装と第1フレームの固定用爪追加→膝側がぱかぱかしそう
- [x]第2外装と第3フレームの干渉低減?→改善できればもう少し可動域を増やせる。要検討。
- [x]脛の長さを短くする→要検討。1,2cm短くしてもいいかも。→しっぽ作成後全体のバランスを見たらちょうど良さそうなので保留。
また、しっぽの設計に関しても、若干改善の余地があるように思う。 しっぽの胴部は各パーツを接着する予定ではあるが、面積も狭く強度が心配だ。
2020/08/25
全体像と頭部の動作構造について、スケッチを描いた。頭部は3軸で動かす予定。サーボは下から順に、左右、上下、傾き、と動かすために3つ使用する。ピッチ・ロール・ヨーとも呼ぶらしいが、どれがどれかまだ忘れそうなので使わない。胴体に固定されるサーボは一番下の一つだけなので、動作の優先度(?)を考えて決めた。 例えばこの順番なら、「左を向いて」「顔を上げて」「右に傾ける」というかたちで指定ができる。この順番が一番感覚的に指定できそう。
2020/08/26
脚部の修正を行った。時間をあけたおかげか、かなりスムーズに進められた気がする。
胴体の作成に入る。 足と尻尾を配置してみたところ、どうにもイマイチな形状になる。サイズのバランスの問題かも。胴体はなるべく小さくした方が良さそう。
2020/08/28
胴体の作成をやり直した。足の配置を均等にし、少し詰めてみた。まだバランスは今ひとつな気もするが、足の動作範囲を考えるとこれ以上は限界もある。 降圧コンバータやラズベリーパイのモデルも載せてみたが、足のサイズが大きいおかげで胴体の積載スペースは多少余裕がありそう。あとは頭部や胴体の形状で見栄え良く調整することにする。
2020/08/29
今後の設計の進め方について
頭部のサイズや形状が確定しないと、胴体の最適化ができない。 まずは頭部を作る必要があるが、そのためにはどのモジュールを正式に採用するか確定しなくてはならない。 つまり、現在まだ試していないセンサやカメラ等を先にテストしてから設計の続きを行うこととする。 同時に、尻尾の先につけた赤外線LEDが正常に動作するか、また、暗視カメラモジュールと組み合わせて活用できるかどうかも確認しておきたい。
そのほか設計に関して
設計の難度を考慮して、目の可動はなくす方向で進めたい。赤外線は尻尾からの照射のみでやってみる。 頭部につけるものは、OLED2、カメラ、マイク、スピーカー、ToFセンサ?、照度センサ?、タッチセンサ2?、温湿度センサ? 目にOLED、口と鼻にカメラとマイク、耳か頬にスピーカー。額と顎にタッチセンサ。 ToFセンサはあご下辺りにつけたい。 照度センサは後頭部・首元あたりにつけたい。スペース含め要検討。横からなるべくファンの光等が入り込まないように設計する。
2020/08/30
ラズベリーパイに冷却ファンを取り付け、カメラモジュールのテストを行った。mjpgstreamerを用いたが、以前の方法ではうまくいかず、書籍の手順に従ったところ無事実装できた。 USB接続のウェブカメラよりも動作が安定している様子で、ストリーミングが滑らかだ。 カメラモジュールに付属のコードは少し短いので、長めのコードを買う必要がありそう。
2020/08/31
テストを行うにも、いちいち配線をし直したりしていて面倒になってきた。 決まったピンを使っているわけでもないから、期間が空くと忘れて一からやり直す羽目になりがちだ。 そこで、先に全体の配線を決めてしまおうと思う。 まず、使用するモジュール・センサー類を列挙し、繋ぐ必要があるもの(3.3V, 5V, GND, GPIO, etc…)を確認する。あとはラズベリーパイの各ピンと電源から降圧した5Vを直接とるものに振り分けていけばいい。
- サーボドライバー *2
- 電圧
- タッチセンサ *2
- ToFセンサ
- 温湿度センサ
- 照度センサ
- 赤外線LED
- スピーカー(電源必要?)
- 冷却ファン
- マイク(専用コードのみ)
- カメラ(USBのみ)
- OLED *2
ラズパイのピンの一覧表を作ったので、これを使って整理していく。 表のおかげで使っても後々支障のないであろうGPIOもわかった。
2020/09/04
胴体の作成を進めている。各パーツの形状の調整と、接続部の追加を行った。 外観にあまり影響しない作業なためタイミングを逃しがちで、しかしながら必要不可欠なことでもあるので進められてよかった。 だいぶ実現に近づいた気がする。 土台となる板状パーツがまだ印刷するには大きすぎるので、うまく分割しないといけない。 PETGはPLAとくらべて柔らかいようなので、たわまないように補強も入れておきたい。(あるいは、プレート状のもの、内部フレームはPLAで作るのもアリか?)
課題として表出したのは、バッテリーの配置に関する問題。 充電器とプラグの形状等から、充電の度に取り外す必要がある。ボディの最下部に引き出しのようなものを作り、そこに収めることにしようと思う。 同時に、ラズパイのみへの給電用のUSBについても検討。 バッテリーを使用しないときはラズパイの電源のみ入れるため、microUSB端子にはコードを挿しっぱなしにして、バッテリーからの給電はピンから行おうと思う。 バッテリーを使用する際はUSBコードはボディに格納しておき、バッテリーを使用しないときだけコードを引き出せるようにしたい。 こちらも、ボディの最下部に配置すると都合がいい。構造について検討していく。
2020/09/05
バッテリーの配置スペースの確保のため、胴体下部のサーボ固定部分中央を2層構造に修正。 あわせて、ボディのフレームを印刷できるサイズに切り分け、固定用の形状を追加。 サーボモーターのコードが綺麗に収まるかが少し心配。収まりが悪い場合は、結束バンド等で何とかするつもり。 固定用のねじ穴の配置が難しく、思った以上に設計に時間がかかった。 今回の修正により、内部の空きスペースがかなり減った。基本的に胴体部分の拡張は現時点では考えていないため、好ましく捉えることにする。
2020/09/07
電源まわりの回路について検討。 以前スピーカーに乗っていたノイズが電源を原因とするものならば、ラズパイへの給電とスピーカーへの給電を分けたい。 また、複数のサーボドライバーPCA2685へ5Vを流す際の配線についても確認する必要がある。 これらが決まらないことには、本体のモデリングが進められない。 電源の切り替えには物理スイッチを用いるつもりだが、とすると本体外装の設計を多少見直す必要が出てくるかもしれない。そのあたりも踏まえて今後詰めていく。と思ったが、スイッチは調べてみると流せる電流が大きくなく、使用するにはトランジスタやFETを使う必要がありそう。実装するためのスペースも考えるとかなり難しく、今回は見送ることにしようと思う。 スイッチを用いることなく、安全に電源の切り替えを行えるようにする。とすると、やはりバッテリー駆動時はGPIOピンから給電し、アダプター接続時はmicroUSBから給電、というのがいいかもしれない。
2020/09/11
先日の記述について二つ訂正。 スピーカーのノイズについては、電源を変えてもなり続けていたため、別の原因があるはず。オーディオジャックを外しても鳴り続けるようならラズパイ側に問題があり、そうでないならば回路に問題があると考えられる。 どちらにしても、回路を改善することでノイズは抑えられそうだが、かなり大掛かりな改造になりそう。 ラズパイ側の問題でないなら、もう一つ同じスピーカーを買って試してみるのも手だ。あるいは、別のスピーカーを試してみてもいい。
スイッチはものによっては問題なく使えそう。バッテリーとアダプタの切り替えをする、電源の完全なON/OFFをする、には同様の仕掛けは何かしら必須なので、やはり採用する方向で進める。
今後の流れについては、次のように進める。
- 必要なモジュールの選定
- スピーカー
- 物理スイッチ
- 接続方法の確認
- 2台目のPCA9685への5V給電が1台目のPCA9685から可能か確認
- 各モジュール、センサー類の使用するGPIOピンの確定
- 実体配線図の作成
- 回路の作成/寸法計測
- 頭部の作成
- 胴部の作成
スイッチはトグルスイッチをAliで購入した。定格は6A125VAC。一般にAC125VはDCにすると25V以下ならば同等の電流を流すことができるそうなので、5V3Aのラズパイ電源用なら問題ないはず、という予想。
2020/09/12
トグルスイッチに加えて、プッシュスイッチも載せることにした。 胴部の空きスペースに台を作り、それらを設置する。胴部を大きめに作っておいたことが幸いし、ちょうど収まった。 ボディの後方に温湿度測定モジュールと照度測定モジュールを設置する予定。
2020/09/13
fritzingで実体配線図を作ろうと思ったが、パーツを探す手間の方がかかってしまう上にそもそもパーツがない。作るのも調整するのも難しそうなので、今回は使用しないことにする。
I2C通信が少し理解を深めた。ラズパイのピンはSDA,SCLの2ピンだけだが、並列して機器をつなげることで、該当するアドレスの機器を指定して操作することができる。 おそらくセンサー類はこのI2Cで接続するはずなので、それぞれのアドレスも調べて確認できるところに書いておこう。アドレスがわかれば、あとは並列でつなぐだけでいい。
ラズパイ3の電流容量は、3.3Vは100mA程度、5Vは電源-1400mAを目安に、と書かれていた。 5Vの方は余裕があるが、3.3Vの方は気をつけた方がいいかもしれない。 ちなみにOLEDの消費電力はフル点灯で0.08Wとのことなので、3.3Vだと24mA強の計算。ふたつで50mA弱。
モジュール | 電圧(未確認含む) | 接続 | アドレス等 | |
---|---|---|---|---|
PCA9685(1) | サーボドライバ | 3.3V | I2C | |
PCA9685(2) | サーボドライバ | 3.3V | I2C | |
OLED SSD1306(1) | 128*64 有機EL | 3~5V | I2C | |
OLED SSD1306(2) | 128*64 有機EL | 3~5V | I2C | |
INA219 | 電流電圧センサー | 3~5.5V | I2C | |
DHT22 | 温度湿度センサー | 3.3V-5V | ||
BH1750FVI | 照度センサー | 3-5V | I2C | |
VL53L0X | ToF測距センサ | 3-5V | I2C | |
TTP223 | タッチセンサ | 3.3V | ||
赤外線LED | 5V | トランジスタ2SC1815使用 | ||
赤外線受光モジュール |
接続に関してはSPIが使えるモジュールもいくつかあるが、I2Cが使えるものはそちらを使うことにする。 まずはそれぞれの接続方法を改めて確認し、I2Cならばアドレスの重複がないように、それ以外なら使用するピンの重複がないように調整する。 バッテリーからサーボへ電力を供給するサーボドライバのみ、トグルスイッチで動作電源のオンオフをできるようにする。つまり、他の電源と分けるか、並列の場合も間にスイッチを挟むように設計する。 あるいは、サーボドライバの電源電圧が5Vであるならば、それもラズパイを通さず引っ張ってくるのもありか。いや、配線がかえってややこしくなるだけだ。却下。
他の電源に関わらず動作させるモジュールについては、基板上に共通の電源として5Vまたは3.3Vをラズパイから引いてきて、そこから各センサを並列でつなげるのが良さそう。
2020/09/14
2x8のユニバーサル基板のモデルを作成し、ボディモデルの内部に配置した。 サイズはギリギリ。よく言えばぴったり計算しつくされたかのような収まり具合で、胸をなでおろす。
2020/09/15
基板の配線について考えた。複雑な回路を用いないため、かなりシンプルにできそう。 まだ途中ではあるが、全体でも基板のサイズには余裕を持って収まりそうで、一安心。
2020/09/18
基板の配線について引き続き検討。
2020/10/02
バッテリーの収納部を設計。持ち上げてスライドすることで開く構造になっており、開閉のたびにネジ等を外す必要がないものにした。 充電時のことなどを考えると改善の余地はいくらでもありそうだが、きりがないのでこのまま進めようと思う。
今後の流れについて。
- 頭部の設計
- サーボによる可動
- タッチセンサ配置
- スピーカー配置
- マイク配置
- 頭部の下のベース部分の設計修正
- ToF測距モジュール配置
- 内部の配線スペース確保
- 電源供給経路
- 温湿度センサ配置
- 照度センサ配置
- 脚部と尻尾部の高さを実測し、同じになるよう調整
- 基板等固定用の穴空け
- 印刷
まずは全体の形状を確定して、それから細部に取り掛かる。 しかしそのためには内部構造を決定しなくてはならない。 つまり、頭部に搭載するスピーカーの選定をまず行わなくてはならない。 ノイズの原因は何か。電源によるものなのか否か。否であれば解決方法は? ラズパイを通したUSB給電だからノイズが乗るのかと思ったが、実際にはバッテリーからの直接給電でもノイズはあった(要検証)。接触不良の可能性もある。接続し直すのもアリかも。ボリュームは半固定抵抗になっていたはず。抵抗値を計測して、固定抵抗に変えてみてもいい。 ボリュームの変更はシステムでしか行わないし、抵抗を減らせば電流が増し、音量も増すはず。その分音が割れたりする恐れもある。
2020/10/05
1号の頭部をばらしてスピーカーを取り出し、テストした。さよなら、またね。 スピーカーをMacにつないだところノイズは生じず、原因はラズパイの方にあると判明。また、ラズパイのジャックに接続してもバッテリーから電源を取るとノイズが軽減されたため、ラズパイを介してUSBから電源を取るのは好ましくないことがわかった。(テストに使用したモバイルバッテリーは一定電流以下の場合に一定時間ごとに電源のON-OFFを繰り返すため、その度にブツブツというノイズは乗っていた。)
一号機から二号機へ流用するパーツはラズパイとスピーカーの二つになる予定。これは生物で言うところの脳と声帯であり、抽象的な意味合いでは心と声として捉えることもできなくはない。それらが共通なら、それは同一個体とも呼べるかもしれない。ロマン溢れるね。
2020/10/09
頭部外装の設計。 実物の猫に似せるには目や口が小さすぎるし、少しデフォルメする。 光沢のあるモデルだと光が表情のようになり不自然だったが、光沢をなくすといい感じになった。 耳の内部形状は要検討。スペースが許すようであれば、スピーカーは穴を開ける必要性上、耳に配置するのが自然かもしれない。 また、耳内部であればサーボからの距離も近いはずなので、トルクの面でも好ましい。
2020/10/16 2020/10/19
頭部内部の設計を進めている。 思ったより重量が嵩み、サーボのトルクや保持力、安定性に不安があるため、上下軸と傾き軸は両軸化させた。軸自体にかかる負荷が分散できるので、多少の気休めにはなるはず。 鼻先のマイクとスピーカーのアンプ基板を設置するスペースを除きほぼ完成。
全体の完成も徐々に見えてきた。できれば11月には印刷を開始し、年内に組み立てを終えたい。 タクトスイッチが届いたため、通電テストを行った。金具に固定用の突起があったため、固定部分の設計を微調整する必要がありそう。
2020/10/20
引き続き頭部の内部設計。開けていなかった穴を開けている。 目鼻固定用のパーツがやや複雑な形状をしているため、調整に時間がかかっている。
2020/10/21
頭部外装を分割し、組み合わせるための形状を追加。 はめ込むだけなので固定がしっかりできるか不安だが、負荷のかからない箇所なので甘く見ておく。
2020/10/22
頭部内部と頭部を固定するパーツを追加設計。 頭部内部にスピーカーのアンプ基板を収める部位を追加設計。
2020/10/23
鼻に位置するマイクの取り付け用パーツを設計。 測距センサカバー周りを設計。ボディフレームの形状調整。
2020/11/04
PETGフィラメントのテスト。 Curaのデフォルト設定の215℃でテストし、218℃に上げ、戻した。糸引きは多いが215℃の方が多少軽減される。 PETGは糸引きは不可避なようなので、造形物に問題がない現在の設定で続ける。 ヒートベッドは一層目のみ定着させるため70℃、以降は0℃とし、加熱しないように設定した。熱暴走による停止があったため対策。
2020/11/05
頭部内部フレームの作成。組み上げまで想定どおり行えたが、トルクに不安がある。 眼のガラスレンズ固定パーツがやや穴が小さく、過度な厚みがあるように感じられたので、穴径を広げ、1mm薄くして作り直した。 設計を変更すればサーボの軸を1cmほど中心に動かせそうなので、検討。
2020/11/06
頭部ピッチ軸のサーボまわりを設計変更して作り直した。重心に軸が約1cm近づき、パーツの干渉も減らしたため動きがスムーズになった。 前回のテスト時は間違えて3.3Vでサーボを動作させていたので、トルクはもともと足りていた可能性がある。 まぁ結果としてより良い設計になったので良しとする。
これで頭部内部はほぼ完成。 動かしてみるとヨー軸の動作が若干他と比べて不安定だったが、これは両軸化していないせいかもしれない。 気になるようであれば、サーボ同士を固定しているパーツだけ作り変えれば安定させられる。一旦保留。
2020/11/0x
頭部外装のプリント。 開口部の大きさはちょうどよく、ギリギリ内部機械を収められる。 一方で固定には難があり、しっかりと止めるためには接着や一工夫必要になる。
2020/11/0x
頭部外装のプリント。左耳の方。 PETGを使うこともあり、なるべくサポートを必要としない角度で印刷したが、それが仇となった。 PETGはPLAと比べて印刷中にかなり揺れる(下部が薄いと曲がる)。 積層のずれた跡がかなり大きく残り、二箇所割れも生じた。相変わらず表面のダマも多い。
2020/11/11
頭部外装のやすりがけを行う。120番の紙やすりで全体をやする。表面の糸引きやダマはかなり取れたが、積層痕や細かな穴などは消せそうにない。適当なところで妥協。
2020/11/12
頭部外装の下地塗装。 プラサフを満遍なく吹き付けたのち、穴や積層痕が大きく目立つ箇所だけ筆で色を乗せた。ほとんど隠れない。
また、OLEDの目を覆うカバーパーツに銀を筆で塗った。出来栄えはイマイチだが、頭部外装に隠れることでいい感じに見えてくれることを願う。
2020/11/13
回路図を書き直す。 抵抗を除く大まかな全体像を、配線図として作成した。 5VをGPIOに繋げてしまっていたため、後で修正しないと。
2020/11/14
昨日シルバーのPLAフィラメントが届いた。 PETGの印刷箇所が終わったら、こちらも試してみる。灰色ではない、銀の光沢がうまく出るといいのだけれど。
2020/11/20
配線図を書き直した。後から見直すと、一部の抵抗やスイッチ、USB接続のマイクと専用端子でつなぐカメラなどは抜けていたが、それらを除けばほとんど完成に近い。ずっと曖昧なままだった不安な部分だけに、不完全とはいえ一枚の紙面にまとまるのはちょっとした感慨がある。 A4にギリギリ収まるくらいで、随分大きなスケールになってしまったなぁと思う。しかしセンサーはロボットにとっての五感になるわけで、うまく使いこなせばよりリアルな反応パターンを生むことができる。
シルバーのPLAフィラメントをテストした。一度パーツをプリントしてみたら、なんだか以前のPLAと比べてあまり綺麗に印刷できず、パラメータの設定をやり直すことにした。 スライサーソフトの使い方を学び、一定の高さごとに印刷時のパラメータを変更できるようになった。高さごとに温度を変えて、適切な温度が決まったら次はファンの速度を調整した。明日の夜には印刷速度を調整してみる。 温度調整の時点で、印刷の品質がかなり決まってくる感じがする。今後別のフィラメントを使うときも、最低限これだけはやろう。
2020/11/21
回路に用いる抵抗の値を計算した。一度やったことでもすぐに忘れてしまうので、自身のブログが備忘録として大変役立つ。 今後の進め方については少し悩ましい。先にすべて配線してしまえば楽なのだけど、そうすると問題が生じたときに原因の切り分けが困難になる。やはり一つ一つモジュールをテストしてから、最後に配線するのが無難だろうか。
関係ないが、トランジスタについて調べていると、だいたい詳しく書かれているブログはオーディオ界隈の方のものだ。まるで研究者のように詳しすぎて、理解が難しいレベル。音楽を聴くという行為は主観に基づく感覚的なものと思っていたが、良い音の追求は極めて論理的に行われる、というのは興味深い。
PLAの場合、印刷スピードはCuraの初期設定である60msより速くても問題ないことがわかった。テストでは、印刷の品質は90msで確認できる変化がなかった。造形物を動かさないタイプのプリンターだから、というのもあるかもしれない。 先日0.2mm層で作ったモデルを、パラメータを調整した0.15mm層で作り直した。見た目の変化は、正直言えば自己満足の部類だ。ただ、層が細かくなる分、サポートを用いない斜辺は綺麗になった。
2020/11/2x
脚部外装パーツをプリント。印刷時間はパーツ一つあたり2時間程度。
2020/11/29
胴体後方の設計修正。給電用のDCコネクタ取り付け用の穴を作成した。 以前購入したカメラ接続用の専用コードがどうやら数センチ短いようなので、買い直す。試行錯誤や計算違いで細かな出費が嵩むなぁ……。
2020/11/30
胴体後方のPLAをプリント。印刷時間は8時間40分くらい。大きいパーツだから反りやすいのか、印刷開始1時間ほどで一度ベッドから造形物が剥がれてしまったため、印刷開始面とベッドの距離を少し縮めてやり直し。 配線において、分岐結線には簡易接続コネクタを使用するつもりだったが、内部にコネクタを取り付けられるスペースがなさそう。仕方なくはんだで結線することにする。
2020/12/17
プリンターのベルトが緩んできているように思えたので、きつく止めなおした。 胴体上部ベースプレートの印刷を試みるも、プリンターベッドの水平が取れていないようで高さが合わない。 プラットフォームシートの交換をする。
2020/12/18
プラットフォームシートを交換したところ、印刷の問題はなくなった。プラットフォームが傾いていたのかも。 しかし、今度は食いつきが良すぎる。 前部ベースプレートと尻尾の外装を印刷。
2020/12/19
残りのタスクと年内の日数を照らして計算したら、年内に組み立てまで終えるにはかなりのハードスケジュールになることがわかった。 印刷しっぱなしのパーツが部屋に散乱しているのを今年中になんとかしたいが、そのためにはハードを完成させる必要がある。やれるだけやってみよう。 配線がかなりややこしいが、もしミスがあってもPiさえ焼けなければ他のパーツが壊れても大した痛手にはならない。電源まわりだけ慎重に気を付けておけば、あとは完璧でなくてもいい。
2020/12/20
仕事に行っている間にプリントを少しでも進めようと、朝からプリンターを動かす。 家を出る前にすでに出力が不安定になっていたため、慌てて停止してそのまま出勤。 このところ気温が低いせいか、失敗が多くなっている気がする。帰宅後に同じ設定で再度試したら、今度は問題なく印刷できた。
2020/12/21
PLAの全パーツ出力が終わった。PETGにフィラメントを切り替え、パラメータの調整を行う。 尻尾のインナーパーツのプリントを始めたが、熱暴走によりプリンターが停止したり一層目が剥がれてしまったりで、5回も失敗した。冷却のために時間を空けたりしていたので、調整だけで丸一日終わってしまった。 明日、ブリムをつけてスライスし直し、もう一度試してみる。
2020/12/26
失敗。失敗。失敗。もうここ数日だけで7度目か。印刷が全くうまくいかない。出力したいものはたくさんあるのに、一層目が剥がれたりサポート部分が巻き込まれたり途中で倒れたり、熱エラーで停止したり、高さが勝手に変わっていたり、原因不明のままゴミ屑ができていたりする。その度に冷却して出力屑を取り除きやり直す。一層目が剥がれたりサポートが崩れたりするのは設定や設計の不備だから仕方ない。どうしていつの間にかヘッドがずれているんだ。スピードも十分に落としているし、あるいは温度がまだ低いのだろうか。いや、マイナス10度で設定していても印刷に問題はなかった。テストもしたから高すぎるということもないはずだ。流量が多い?部品の不調?さっぱりわからない。わからないが、できるまで何度でもやるしかない。
足のパーツが1組み分だけ揃っていたので、組み立てることにした。設計は以前何度も修正しただけに概ね問題ないが、一部まだ無理があった。ネジを止められない。幸い致命的ではないので、目を瞑ることにする。 サーボモータのコードの保護をしようと考えていたが、可逆的な方法で固定するとコードの柔軟性が損なわれ動作に影響することがわかったので断念。 理想通りではないものの、問題なく組み上がった。動作はややかくつくものの問題なし。かくつくのはサーボに問題があるのか、動作プログラムに問題があるのか、設計や保持重量に問題があるのかわからない。いずれ調べよう。後は実際に本体の重量を支えたとき、トルクが足りるかどうかだ。 思い返せば一年前からすでに足の試作をしていた。ここに至るまで大変だったけれども、当初想像していたものよりかなりよくなった気がする。
来年につづく。