FC2ブログ

ぱぱっちの私事で恐縮ですが

ぱぱっちの日常の出来事で、何か皆さんのお役に立てそうなことがあったら、日記に書こうと思っています。

作った回路をロボゼロに取り付け、プログラムを実行して完成です。

(1)回路の組み込み
私の場合は、回路が切手サイズでしたので、頭部に入れました。スピーカーは腰ヨー軸サーボの上側の胸のフレームとの隙間に入れました。
普段はスピーカーを使わないので、スピーカにオン・オフ用のスイッチを付けて、首の後ろ側に取り付けました。
(その2)で半固定抵抗を調整しましたが、実際にロボゼロにLED等一式を取り付けた状態で再度微調整します。
ロボゼロの起動音のときだけ、LEDがピカっと光るように調整します。
P1010712.jpg


(2)ロボゼロのプログラムを使って再生する。
前回も書きましたが、意外とこの後が試行錯誤でした。
ロボゼロのSOUND文は、
V00:ファイル番号
V01:音声の再生開始位置(セクタ単位)の下位8ビット
V02:音声の再生開始位置(セクタ単位)の上位8ビット
V03:音声の再生時間(セクタ単位)の下位8ビット
V04:音声の再生時間(セクタ単位)の上位8ビット
とセットしてから使います。
1秒=215セクタで計算しますので、単純に時間に215をかければセクタ数が計算できますが、開始位置は小数点以下切り捨て、再生時間は切り上げにした方がきちんと再生できます。(前回お話ししたように前後に無音部分があるはずですので、切り上げ・切り捨ては問題ありません。)
ハマる重要な点が2つほどあります。
ひとつ目は、SOUND文で行われる音声再生はプログラムの実行と非同期なので、再生直後に十分な動作時間のMOVE文があれば問題ありませんが、連続して音声を再生する場合は、SOUND文とSOUND文の間にWAIT文を入れないときちんと再生されません。WAIT文は1単位=0.005秒とSOUND文と単位が違いますので、再生時間を0.005で割って計算し直します。
ふたつ目は、WAIT文は、最大200まで(ここ重要!!)ですので、長い再生時間(秒)に相当するWAIT文を計算する際は、200ごとにWAIT文を入れる必要があります。

試しに自己紹介させてみます。


さて、いかがでしたでしょうか。
実際やってみると、予想どおりスピーカーが良くないせいかかなり聞き取りにくいです。音量を大きくしてもだめなのでおそらくスピーカーのせいでしょう。このあたりは引き続き研究が必要ですね。
スポンサーサイト



前回で回路を作成しましたので、今回は、ロボゼロにしゃべらせる音声ファイルの作成です。

私がやった段取りは以下のとおり。
(1)PCの音声合成ソフトでひととおり単語を喋らせて、WAVファイルを作成する。
(2)WAVファイルのサンプリング周波数をロボゼロ用に変換
(3)WAVファイルの音量を増やしてロボゼロのスピーカーでも聞こえるような大きさにする。
(4)WAVファイルの波形を見て、どの単語がどの位置から何秒で再生されるか調べる。
(5)WAVファイルをロボゼロのSDカードにコピーする。
(6)ロボゼロのプログラムを使って再生する。

では順次もう少し詳しくご説明します。
(1)PCの音声合成ソフトでひととおり単語を喋らせて、WAVファイルを作成する。
ようは、しゃべっているWAVファイルが手に入ればよいのですが、そうそう都合良くは用意されていないのでフリーソフト等を使って作ります。
単語を連続でしゃべらせることができて、WAVファイルに保存できるソフトならなんでもOKです。
私はSoftTalkを使いました。
ここで気をつけることは4点です。
・単語を連続で喋らせる際に、単語と単語の間の無音部分が最低でも0.005秒確保できるソフトを選びます。
ロボゼロでは、SOUND文でセクタ単位で指定するのですが、1秒=215セクタなので、少なくとも0.005秒以上の無音がないと、後で再生開始位置を目で見て測るときの誤差で音声がつながってしまいます。
・実際にやってみるとわかるのですが、男性の低い声は、ロボゼロのモノラル出力ではかなり聞き取りにくいので、女性の声を選ぶほうが無難です。(他の音声合成ソフトなら問題ないのかもしれません。)
・SofTalkの場合、再生スピードはお好みで良いのですが、音量は最大にしておきます(それでも全然小さい。)
・後続の作業で「何秒から再生されるか」調べるのですが、SofTalkの場合、音声の種類によって微妙に再生時間が異なるので、測るのがめんどうな方は一旦決めた音声の種類とスピードは変えないほうが良いです。

(2)WAVファイルのサンプリング周波数をロボゼロ用に変換
(3)WAVファイルの音量を増やしてロボゼロのスピーカーでも聞こえるような大きさにする。
(4)WAVファイルの波形を見て、どの単語がどの位置から何秒で再生されるか調べる。
この3つの作業はWAVファイルの編集ソフトを使って行います。私はSound Engine Freeを使いました。
まず、<編集>-<フォマット変換>でWAVファイルのサンプリングレートを変更します。ロボゼロの音声ファイルのサンプリング条件は、
量子化8ビット
モノラル
サンプリング周期 11KHz
ですので、これにあうようにパラメーターを変更して、変換します。
次に、音量ですが、<音量>メニューで大きくするのですが、標準の機能を使ってだいたい8~16倍ぐらいになるようにします。(このへんは各自のお好みで。)
この時点でいったんファイルを保存して、次にメインウィンドウの波形を見ながら、どの言葉が「何秒目から」「何秒間」で再生できるかを全て調べておきます。
先ほど書きましたが、1秒=215セクタなので0.005秒以下は誤差のはんちゅうになりますから、測り方は、「何秒間」を長めにとっておけば問題ないでしょう。

(5)WAVファイルをロボゼロのSDカードにコピーする。
音声ファイルのファイル名は「任意の名前.wav」になっていますが、ロボゼロでは「ファイル番号2桁+”SCR.txt”」にします。
例:62SCR.txt
使用したファイル番号は音声用となるのでプログラムは格納できないことになっていますので、重要だと思われる番号は使わないようにします。(例:5番は自動実行、61は自己教示プログラムなど)
ロボゼロのオプションのCD-ROMに添付されていた説明書によると、「RXコントローラをインストールしたディレクトリ内のHSWB04FDATディレクトリに音声データを複写する。マイクロSDカードを用意し、RXコントローラのマイクロSDカードデータ初期化機能を使用してデータを転送する。」となっていますが、私は手っ取り早くSDカードをロボゼロから引き抜いてPCのエクスプローラーで名前を変更したWAVファイルを手作業でSDカードにコピーしました。

(6)ロボゼロのプログラムを使って再生する。
意外とこの後が試行錯誤たっだりしますので、この作業は次の(その4:完成編)にてご報告。
前回のうんちくに続いて、今回は目をピカピカさせるための回路の作成です。

スピーカーの音を増幅するのでオペアンプを使うところまではわかるのですが、回路の設計の仕方がよくわかりません。
ググるといろいろな方が似たようなことをやっていらっしゃいますが、B級工作商店【月ト改】がフィギュアを動かすあたり方向感が近い感じがします。こちらのページのレベル1 とりあえずLEDを点灯させてみるの回路を参考にしました。
ロボゼロはモノラルですが、回路はステレオで2個のLEDが光るようになっているので、半分だけ利用します。
コンデンサは積層セラミック、10KΩの抵抗は半固定抵抗です。
LEDの降圧用抵抗は、本当は使用するLEDに合わせて値を計算したほうが良いのでしょうか、手持ちの何種類かの抵抗で試してみましたが、どれでも問題なく利用できましたので、回路図のとおりで良しとします。
ただ、この回路ですと、音声入力がLEDのピカピカになるだけで音声出力がありませんので、音声入力から平行になるようにして音声出力端子を作っておかないと、後でロボゼロのスピーカーにつながりません。

ロボゼロの頭のなかに入れるための基板ですが、切手サイズのものがちょうどよく、パーツは密集させて押し込めました。
このサイズ、スルーホールのものしか見つからなかったのですが、スルーホール、初めて使いましたが、使いにくいです。片面の大きなものを切って使えばよかったかも。

※実際にロボゼロに搭載した基板と写真の基板はピン配置が若干異なります。
P1010704.jpg

ロボゼロに搭載する前にテストをするために、音声が入るところにいったんヘッドホン用のピンジャックをとりつけます。スマホの音楽でテストするつもりでしたので、回路に電源をいれて、ピンジャックに変な電圧がかかっていないことをテスターで確認してから、スマホに指し、音楽を流せば・・・。あれ??点滅しません。
そんなときは、半固定抵抗を左右のいずれかに回して、ぎりぎり点灯する位置で止めます。この状態で音楽を流すと、ピカピカする・・・はずです。
本当は完成したところで一気にブログにアップするつもりでしたが、書くことが多そうなので何回かに分けることにしました。
今回は第1回で、全体像は以下のようになる予定。
(その1:うんちく編)
(その2:ハード編)
(その3:ソフト編)
(その4:完成編)
なお、その1はなんでこんなことをやるかとか好き勝手なことを書くつもりなので、技術的なことが知りたい方は次回以降をお待ちいただき、今回は読み飛ばしてください。

さて、本編。
ロボゼロの目をピカピカさせるとは、何を言っているのかわからないかと思いますが、目標を簡単に言うと、「ロボゼロがしゃべっている時だけ、目のLEDをピカっと明るくする」です。
何でこんなことをやろうかと思ったかというと・・・

私は、生活リズムの都合からテレビは全くと言ってよいほど見ません。ニュース、ドキュメンタリー、ドラマは見ませんし、当然ながらアニメも見ないのですが、スマホでアニメが見られるようになった昨年ぐらいから、偶然何本かのロボットアニメを全話観てしまいました(笑)
ちょうどこんな記事もありましたね。
私が観た中に「翠星のガルガンティア」がありましたが、このお話しの主人公が搭乗する”マシンキャリバー”の”チェインバー”ですが、「パイロット支援啓発インターフェースシステム」なる音声対話型のシステムが搭載されており、パイロットの指示に従うだけでなく、様々な提案や自発的な作業もしてくれる、さながら「現実解のドラえもん」です。昔でいうところのレイズナーのレイやフォロンがもっとなんでもできるようになった感じでしょうか。
このチェインバーは、ストーリー中でも「ブリキ野郎」などと言われるように、話すにもかかわらず巨大ロボットですから無表情ですが、チェインバーがしゃべっている時には目がピカピカ点滅するのです。ちなみにライバル機の上位機種”ストライカー”は目はピカピカしませんでしたが、首もとのランプ(と確か腹部のランプ)がピカピカ点滅してました。

このピカピカをロボゼロにやらせたら、必殺技を叫びながら目がピカーッみたいなこともできるだろうし、大会とかの合間でしゃべりながらピカピカしていれば小さなお子さんのハートもぐっとつかめるのではないかと思います。
また、実を言うと私のロボゼロには普段スピーカーを取り付けていないので、音が聞こえなくても目が光る機能があれば動作確認ができるだろうと思った次第です。

さて、どうやって実現するかですが、いくつか考えました。
(1)シリアル通信でLEDを点滅させる回路を搭載し、コントローラであるPCから直接操作する。
(2)PWMでLEDを点灯させる回路を搭載し、CPUボードで制御する。
(3)スピーカーの音声を増幅してLEDを点灯させる(オーディオ機器でいうレベルメーターみたいなもの)

(1)は比較的簡単にできそうですが、回路が大きくなるのとロボゼロがしゃべるのに合わせてPCで非同期に点滅させるのは難しそうだったのでパス。
(2)は残念ながらHSWB-04FにはPWM出力をコントロールするボードを取り付ける方法が無いのでパス。
ということで、消去法で(3)のレベルメーター方式にしました。
レベルメータにするのであれば、電源をいれた通常の状態ではやや暗めに光って、音声を発している間は明るく光る感じにすればよいでしょう。幸いにして、加速度センサーを背中に移動したので、頭部の空間はLED以外はからっぽになりましたから、小さな回路なら組み込めそうです。
喋らせる部分は、PC上で音声ファイルを作成しておき、ロボゼロの標準のSOUNDで再生すれば良さそうです。

ということで、次回は回路の内容をご説明します。
昨日の小ネタの続き。

サーボのIDを書き換え方法として
(1)PCとサーボをシリアル通信できるように接続し、PCのソフトウェアで書き換える
(2)週刊ロビのテストボードにサーボを接続できるようにコネクタを用意し、テストボード単体で書き換える
をあげて(1)をお話しましたが、このバリエーションというか、本来の方法としてフタバ純正品で書き換える方法があります。
RSC-U485を使うわけですが、こちらにサンプルプログラムがあり、このVB版にIDの書き換えがありそうです。よく見るとCOMポートを指定するようになっているので、試しにUSBシリアルと半二重回路をつなげてみたところ、サーボの操作はできますが、サーボの状態を読み出そうとするとエラーになりました。読み出せないとIDの変更部分が使用できないようになっているので、残念ながらRSC-U485を買わなければダメですね(当たり前ですが。)



ちなみにサンプルにはVBA版もあり、こちらはExcelで動作します。マクロが見れるようになっているので、シリアル通信のプログラム作成の勉強になります。私の環境ではサーボの接続自体できませんでしたが、おそらく私のPCのCOMポートの番号の問題だと思われますので、PCの環境によってはUSBシリアルでも動くのではないでしょうか。
第9回U1Kに出場した際の参加賞が大変豪華で、G-Robots用のサーボRS304MDをたくさん頂いたのですが、このサーボはいくつかの理由があって、RS304MDにもかかわらずそのままではロボゼロでは動きません。

今回この問題を解決する小ネタです。

動かない理由は2つと予想され、1つはコネクタの形状が違うから(これは目で見てわかりますね。)で、2つ目は、ロボゼロのCPUボード「HSWB-04F」がシリアル通信のID:1番のサーボを制御するようにできているからだと思われます。

1つ目のコネクタの形状については、サーボを分解するとケーブル配線は下記の図のとおりになっているので、単純にケーブルとコネクタを置き換えれば良いです。

サーボコネクタメモ


ちなみに、ロボゼロのサーボテストボードはPWM方式なので、コネクタを付け替えた時点でテストボードでは動きますが、CPUボードにつないでも動きませんでした。

2つ目についての解決策は、サーボのIDを書き換えるわけですが、方法は大きく分けて以下の2つあります。
(1)PCとサーボをシリアル通信できるように接続し、PCのソフトウェアで書き換える
(2)週刊ロビのテストボードにサーボを接続できるようにコネクタを用意し、テストボード単体で書き換える

たぶん(2)の方が簡単だと思いますが、後々サーボの詳細設定をするかもしれないので、今回は(1)を試しました。

PCとサーボをシリアル通信で接続する方法ですが、現在のサーボのIDがわかっていてただ書き換えるだけでしたら、USBシリアル変換アダプタがあればOKです。
私は、コレを使いました。

※PC接続用のケーブルがマイクロBタイプのUSBなので、スマホ用のケーブルが流用出来て便利です。

USBシリアルの6PとサーボのVcc、GND、TxDどうしを接続すればOKです。

サーボの設定状態を見る必要があるようでしたら半二重回路を作成する必要があります。
回路は、Robozak奮戦記のこちらの記事の回路図Bを参考にさせていただきました。
(注)回路図BにはIC自体のVccとGNDの結線が記載されていませんので、結線漏れのないように。

回路のできあがり写真はこちら。

IMG_1214.jpg

書き換えに使うプログラムは、いつもお世話になっているmiconoさんのRS30xPacketUtilです。

このソフトでIDを1番に書き換えます。

さて、結果ですが、予想通りちゃんと動くようになりました。
昨日ブログをアップしたロボゼロには既に4個この方法でサーボを取り付けて動かしています。(そのため、サーボのケーブルの色が違うのです。)

さて、こうやってサーボと直接通信できる方法がわかるといろいろやりたいことが思い浮かぶのですが、そのへんはまた今度。
超久しぶりのブログ更新です。

ROBO-ONE以降、公私ともどもいろいろありまして、なかなかロボット製作にまとまった時間が避けませんでした。
スキマ時間にできることはないかなぁ、と考えまして、今まで避けていたCAD系のソフト習得にチャレンジすることにしまして、とりあえずSketchupの基本的な使い方をおぼえました。
3Dモデルを作れるようになると、次のステップは
・展開図を作ってアルミ切削
・3Dプリント
・シミュレーションとかMMD
あたりかと思いますが、一番簡単そうで最近流行っている3Dプリンタを使ってみることにしました。
最初はロボゼロの外装を作るだけのつもりだったのですが、やりはじめると外装よりもむしろ細かい補修部品を作りたくなっていろいろやってみた結果が、コレです!

P1010694.jpg
P1010696.jpg
P1010699.jpg


やってみたことを列挙します。
1.足のサーボケーブルをなるべく見えなくするために、関節の位置に当たるホーンでケーブルを止めるパーツ(ネジ止め方式)を作った。
2.すねとももの横のケーブルのカバーを作った。(サーボに対して、カパッとはめる方式)
3.胸の部分はロボットぽい立体感のあるカバーを作った。
4.腕の部分はロビみたいにサーボのカバーとなる部品を作ってなるべくケーブルが見えないようにした。
5.CPUボードから肩に伸びるサーボケーブルの束は、肩サーボの下を通るようにして、ケーブルが通り道からずれないようなパーツを作った。
6.腰のサーボにケーブルを止めるパーツを作って、脇腹のケーブルを胴体に沿うようにした。
7.目のLEDについては、T.Braianさんにアクリルを削っていただいたので、交換。(シャープな感じが出てカッコ良さ5割増し(笑)すごく気に入ってます。)
8.頭に収納していた加速度センサーを背中に移動。背中のフレームの下側に固定するパーツを3Dプリンタで作った。あわせて、加速度センサーは1軸から2軸対応に変更。
9.無線用のSBDBT5VRPですが、今までは背中の取り外せる側のフレームに基板を止めていたのですが、CPUボード用のビスを変更、3Dプリンタで専用スペーサーを作ってCPUボード側に固定するようにした。
10.指をやめました。そのかわり3Dプリンタでナックルを出力して交換した。
11.足首と腿ロールのサーボのケーブルを目立たない位置から出るように経路変更。

どうでしょう、全体的に配線が見えなくなったのでかなりスッキリ、アニメロボット的な感じになったのではないでしょうか?
外装は、色を塗ってある部分と無塗装の部分があるのは、まだまだ試行錯誤中だからです(汗)

3Dプリントについてはまだまだ試行錯誤中なのですが、個人的な感想をあげておきます。
・プリント出力サービスに依頼するとまだまだ値段が高いです。小さい部品を作るのには抵抗があります。私は、ナノラボさんに通って自分で出力しました。
・3Dプリンタの値段が下がってきましたが、それなりにメンテナンスが必要ですし、いろんな色の樹脂を用意する初期コストも馬鹿になりません。自宅にあったら楽しいとは思いますが、私はしばらくはレンタルで良いかなと思います。
・今回は積層式の3Dプリンタでした。一番細かい0.1mmピッチで積層すれば、あまり表面加工しなくてもかなり滑らかですが当然0.2mmの場合の倍の時間がかかります。フィラメント(樹脂)はABSなので、出力した後にプラモデルのように削ったり色を塗ったり自由にできますが、結局加工する時間を考えたら、樹脂の色を選んで積層に時間をかけた方が良いかなと思いました。
・樹脂の色の違いによってや歪みや収縮の特性差があるので、たくさん出力して経験とカンを蓄積する必要はあります。
・ロボット製作に関して言えば、外装を考えて作れるのは非常に楽しいですが、ケーブル止めとかセンサー固定パーツを作るほうが早くて簡単で実用的な気がします。
・無理に1回で出力しないで、分割して接着剤で貼ったほうが綺麗で簡単に出力できるような気がします。

初心者なので、作れるパーツの形状に制限はありますが、このぐらいならすぐにできますよ、と皆さんに思っていただければ幸いです。

まだまだパーツを作りたいのですが、秋に向けて次のステップに移行せねば。