SpotMicro(mini) その11 ーSpotMicroのソフトウェア その2ー [ROBOT]
SpotMicroMiniのソフトウェアはROSを使うことにしているが、ROSのバージョン1では、機体上の情報を生成をするノードと、その情報を受け取って、次の動作を考えるノードと、そのノードからの指示を受け取りサーボにデータを送るノードをそれそれ作る必要がある。
ただ、機体上に搭載されているコンピュータは、かなり非力なので、情報の収集とサーボの制御以外の意思決定を外に出すことにする。
情報収集系のノード
これらのノードをpublisherとして動作させる。
ROSのメッセージは、定期的に出力され、出力周期もそれぞれのセンサごとに設定されている。
上記の情報センサは、カメラ以外はI2Cバスを介して、データを収集する。それぞれのノードに
対して一つのプログラムを作成し、データを取得するようにするのが一般的ではあるが、それぞれのプログラムがI2Cバスに介して、アクセスを行うとバスの競合がおこり、データが破壊される。それぞれのプログラムが、競合を調整しながらデータを取り合うか、一つのプログラムが、I2Cバスへのアクセスを一手に行い、競合しないように動作させる必要がある。
SpotMicroMiniでは、I2Cに関するプログラムを一手に行うことにするが、一つ問題がある。すべてのセンサの情報出力周期が異なること。また、LCDパネルもI2Cにつながっていることだ。
一つのプログラムで、複数の周期をもつノードと、出力をコントロールするプログラムを書かないといけない。さて、どうなることやら。
ただ、機体上に搭載されているコンピュータは、かなり非力なので、情報の収集とサーボの制御以外の意思決定を外に出すことにする。
情報収集系のノード
情報元 | 出力ノード | 処理概要 |
Raspi Camera | FrontImage | フロントに設置されたカメラ。連続静止画を送信する。カメラによるJPG圧縮データをタイムスタンプとともに出力する |
電圧センサ | BatteryVolt | 機体に搭載された電池の電圧を出力する。2セルのバッテリーが並列に接続させている。<./td> |
近接TOFセンサ | TOF1,TOF2 | TOFによる近接センサ。40㎝以内を検出する。基本的には、同じTOFを使って、出力制御ピンを制御することにより右左の物体の近接を検出する。右のセンサは、左側に15度傾けてあり、左側の位置を検出し、右のセンサは左を検出する<./td> |
9軸IMU | IMU | 9軸のIMUセンサ、MPU9250を使用している。<./td> |
これらのノードをpublisherとして動作させる。
ROSのメッセージは、定期的に出力され、出力周期もそれぞれのセンサごとに設定されている。
上記の情報センサは、カメラ以外はI2Cバスを介して、データを収集する。それぞれのノードに
対して一つのプログラムを作成し、データを取得するようにするのが一般的ではあるが、それぞれのプログラムがI2Cバスに介して、アクセスを行うとバスの競合がおこり、データが破壊される。それぞれのプログラムが、競合を調整しながらデータを取り合うか、一つのプログラムが、I2Cバスへのアクセスを一手に行い、競合しないように動作させる必要がある。
SpotMicroMiniでは、I2Cに関するプログラムを一手に行うことにするが、一つ問題がある。すべてのセンサの情報出力周期が異なること。また、LCDパネルもI2Cにつながっていることだ。
一つのプログラムで、複数の周期をもつノードと、出力をコントロールするプログラムを書かないといけない。さて、どうなることやら。
2020-10-28 11:43
コメント(0)
SpotMicro(mini) その10 ーSpotMicroのソフトウェアー [ROBOT]
SpotMicroのプロジェクトは、ハードそのものがオープンソースであることもあり、ソフトウェアもいろいろあるみたいだ。
以前示したhttps://github.com/FlorianWilk/SpotMicroAIは、今も進化しているようで、しばらくしてみてみたら割と変わっていた。
制御コンピュータをRaspiをメインに使っているBasicInstructionをもとにして作っていた。前回サーボコントロール基板を燃やしたことを記事にしたが、ここでは、サーボ基板を2個使っていた。多分、基板が燃える事件がここでもあったのではないかと勘繰っている。
当然フルサイズのボディなので、電池を乗せたうえでも、サーボ基板が2枚乗るようなサイズ感なのだろう。
このページでは、ほかに制御コンピュータにJetsonNanoを使ったものもやっている人がいるらしい。
最終的には、ROSを使った制御をするんだけど、まずは直接サーボを動かすのを作ってみた
まずは、動くところからだけど、これから先が長そう
以前示したhttps://github.com/FlorianWilk/SpotMicroAIは、今も進化しているようで、しばらくしてみてみたら割と変わっていた。
制御コンピュータをRaspiをメインに使っているBasicInstructionをもとにして作っていた。前回サーボコントロール基板を燃やしたことを記事にしたが、ここでは、サーボ基板を2個使っていた。多分、基板が燃える事件がここでもあったのではないかと勘繰っている。
当然フルサイズのボディなので、電池を乗せたうえでも、サーボ基板が2枚乗るようなサイズ感なのだろう。
このページでは、ほかに制御コンピュータにJetsonNanoを使ったものもやっている人がいるらしい。
最終的には、ROSを使った制御をするんだけど、まずは直接サーボを動かすのを作ってみた
まずは、動くところからだけど、これから先が長そう
SpotMicro(mini) その9 ーアナログサーボに交換ー [ROBOT]
デジタルサーボを舵角の観点から、肩より下の2つのサーボをアナログにすることにした。
デジタルサーボで、すべて構成していたが、サーボが焼損もあるけど、コントロール基板も焼損した。
原因の究明はできてないけど、どうも、過電流で起きるしかないんだけど、燃えた基板を見てみることにした。
焼損部分には、MOSFETが付いているようだ。もともとこの基板はAdaFruitのもののようで、そのページを見ると、ここには、PchMOSFETはAOD417で設計されているようだが、どうも、買ったものとは、違っているようだ。SwichScienceで、最近のものが売られているが、これも本家の写真とも違う。また、秋月電子でも同じPCA9685を使ったサーボドライバが売っているが、このボードには、同様のFETがなく直結になっているので、直結することにした。
後、サーボにかける電圧を6Vから5Vに変更した。電池からの電圧をレギュレータを使って、6Vにしていたが、これを設定を変えて5Vにする。このため、若干サーボの速度が遅くなり、トルクも少し減るが、これで様子を見てみようと思う。
取り換えのタイミングで、使用しているサーボを並べてみた。
壮観。
デジタルサーボで、すべて構成していたが、サーボが焼損もあるけど、コントロール基板も焼損した。
原因の究明はできてないけど、どうも、過電流で起きるしかないんだけど、燃えた基板を見てみることにした。
焼損部分には、MOSFETが付いているようだ。もともとこの基板はAdaFruitのもののようで、そのページを見ると、ここには、PchMOSFETはAOD417で設計されているようだが、どうも、買ったものとは、違っているようだ。SwichScienceで、最近のものが売られているが、これも本家の写真とも違う。また、秋月電子でも同じPCA9685を使ったサーボドライバが売っているが、このボードには、同様のFETがなく直結になっているので、直結することにした。
後、サーボにかける電圧を6Vから5Vに変更した。電池からの電圧をレギュレータを使って、6Vにしていたが、これを設定を変えて5Vにする。このため、若干サーボの速度が遅くなり、トルクも少し減るが、これで様子を見てみようと思う。
取り換えのタイミングで、使用しているサーボを並べてみた。
壮観。
SpotMicro(mini) その8 ーデジタルサーボは素晴らしい。だがしかし...ー [ROBOT]
今回SpotMicroMiniには、CRONA社のデジタルサーボDS238MGを使っている。
これは、同様の製品にCS238MGというアナログサーボがあり、それの単なるデジタル版だ。
電源の許容範囲は、5~6V ,最大トルクも4.6Kgで、なかなかパワフルだ。
デジタルサーボとアナログサーボの違いは、動作角までの動作が、少し違っている。
サーボの動作角は、出力軸に直結されたボリュームの出力をアナログ的に位置を割り出し、
そこまで移動させる仕掛けは実は同じで、しかも、入力信号がPWMで、範囲もまるで同じ。
何が違うかというと、デジタルサーボは、PWMのパルス幅をデジタル的にサーボのパルス幅を計測し、そこから読んだデジタル値を用いてサーボを動作させる。
これに対して、アナログサーボは、PWMの読み取りをアナログ的に計測する。内部で、動作角を規定するノコギリ波を生成し、PWMが位相が変わるところの電圧を読み取る。感覚的に言うとノコギリ波のでサーボを動作させ、PWMの位相がかわるところで止めるという感じで動いている。
これで、何が変わるかというとデジタルサーボは、いなければいけない位置を正確に理解しているので、その位置に動くまで、電流をかけてモータを動かす。差分が多ければ、大きな電流を流すことができ、サーボホーンの保持力がすごく高い。
例えば、機械的に動かない位置まで動かそうとすると、アナログサーボは、その位置に行くまで動こうとするだけだが、デジタルサーボは、電流をどんどん増やして、ホーンを動かそうとする。この時の大電流が内部のトランジスタを破壊(焼損)する。
なるべくサーボ一を責めた結果、3つほど、デジタルサーボを焼損させ、一つは、ケーブルの取り換え時の接続で、失敗して、壊した。
アナログサーボを買っていたので、それに変えると、舵角がちょっと違っていた。アナログサーボは、180度、デジタルサーボは120度。
SpotMicroMiniのオリジナルは、996MRというデジタルサーボだけど、こいつは、180度度の舵角があるらしい。
舵角の面から考えると、今回は、アナログサーボにするほうがいいかもしれないなあ。
いろいろあるなあ。
これは、同様の製品にCS238MGというアナログサーボがあり、それの単なるデジタル版だ。
電源の許容範囲は、5~6V ,最大トルクも4.6Kgで、なかなかパワフルだ。
デジタルサーボとアナログサーボの違いは、動作角までの動作が、少し違っている。
サーボの動作角は、出力軸に直結されたボリュームの出力をアナログ的に位置を割り出し、
そこまで移動させる仕掛けは実は同じで、しかも、入力信号がPWMで、範囲もまるで同じ。
何が違うかというと、デジタルサーボは、PWMのパルス幅をデジタル的にサーボのパルス幅を計測し、そこから読んだデジタル値を用いてサーボを動作させる。
これに対して、アナログサーボは、PWMの読み取りをアナログ的に計測する。内部で、動作角を規定するノコギリ波を生成し、PWMが位相が変わるところの電圧を読み取る。感覚的に言うとノコギリ波のでサーボを動作させ、PWMの位相がかわるところで止めるという感じで動いている。
これで、何が変わるかというとデジタルサーボは、いなければいけない位置を正確に理解しているので、その位置に動くまで、電流をかけてモータを動かす。差分が多ければ、大きな電流を流すことができ、サーボホーンの保持力がすごく高い。
例えば、機械的に動かない位置まで動かそうとすると、アナログサーボは、その位置に行くまで動こうとするだけだが、デジタルサーボは、電流をどんどん増やして、ホーンを動かそうとする。この時の大電流が内部のトランジスタを破壊(焼損)する。
なるべくサーボ一を責めた結果、3つほど、デジタルサーボを焼損させ、一つは、ケーブルの取り換え時の接続で、失敗して、壊した。
アナログサーボを買っていたので、それに変えると、舵角がちょっと違っていた。アナログサーボは、180度、デジタルサーボは120度。
SpotMicroMiniのオリジナルは、996MRというデジタルサーボだけど、こいつは、180度度の舵角があるらしい。
舵角の面から考えると、今回は、アナログサーボにするほうがいいかもしれないなあ。
いろいろあるなあ。
SpotMicro(mini) その7 ーリモートコントローラにも気をつけろ(その2)ー [ROBOT]
前回の記事で、XBOXOneのコントローラには、Bluetoothに接続できるものとできないものがあり、できるものをてにいれて、接続できたところまでは書いた。
SpotMicroaiのページによると、jstest コマンドを使うと、接続状態を確認でき、ボタンやスティックを稼働させると変化が出力される。
このコマンドを実行すると、接続されているボタン等のリストが出力される。
? !なんかおかしい。
ここで、SpotMicroaiのプログラムを動かし、Startボタンを押すと、エラーが発生して止まる。
エラーの内容は”Ryがない。”
で、上のスティックの列を見ると確かに、Ryはない。
そこで、USBケーブルを使用して、Bluetoothではないコントローラを接続して、jstestを起動すると
こっちにはRyがある!
さらに
Bluetooth で接続できたものをUSBでつないてみると
あれ?こっちにもあるなあ。おんなじコントローラなのに。だけど、名前が違うのか。
GamePadのプロファイルは誰がどうやって認識してるんだろう。
多分、接続時に、プロファイルを読み取り、認識してるんだろうと思う。
だとするともう手においえないので、スティックの対応を読み替えることにした。
SpotMicroのプログラムは、RemoteControllerを自前で認識している。であれば、
報告されたスティック番号を入れ替えればいい。
スティックの名前つけマップを以下のようにした。
とりあえずこの変更で、起動するところまで行った!
レストポジションになるみたいだ。
そこで、起こったことは、
”パチッ!!”と言って煙が”?”の形で上がった。
いろいろ起こるなあ
SpotMicroaiのページによると、jstest コマンドを使うと、接続状態を確認でき、ボタンやスティックを稼働させると変化が出力される。
このコマンドを実行すると、接続されているボタン等のリストが出力される。
Driver version is 2.1.0. Joystick (Xbox Wireless Controller) has 8 axes (X, Y, Z, Rz, Gas, Brake, Hat0X, Hat0Y) and 15 buttons (BtnA, BtnB, BtnC, BtnX, BtnY, BtnZ, BtnTL, BtnTR, BtnTL2, BtnTR2, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR). |
? !なんかおかしい。
ここで、SpotMicroaiのプログラムを動かし、Startボタンを押すと、エラーが発生して止まる。
エラーの内容は”Ryがない。”
で、上のスティックの列を見ると確かに、Ryはない。
そこで、USBケーブルを使用して、Bluetoothではないコントローラを接続して、jstestを起動すると
\
Driver version is 2.1.0. Joystick (Microsoft X-Box One pad) has 8 axes (X, Y, Z, Rx, Ry, Rz, Hat0X, Hat0Y) and 11 buttons (BtnA, BtnB, BtnX, BtnY, BtnTL, BtnTR, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR). |
こっちにはRyがある!
さらに
Bluetooth で接続できたものをUSBでつないてみると
Driver version is 2.1.0. Joystick (Microsoft X-Box One S pad) has 8 axes (X, Y, Z, Rx, Ry, Rz, Hat0X, Hat0Y) and 11 buttons (BtnA, BtnB, BtnX, BtnY, BtnTL, BtnTR, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR). |
あれ?こっちにもあるなあ。おんなじコントローラなのに。だけど、名前が違うのか。
GamePadのプロファイルは誰がどうやって認識してるんだろう。
多分、接続時に、プロファイルを読み取り、認識してるんだろうと思う。
だとするともう手においえないので、スティックの対応を読み替えることにした。
SpotMicroのプログラムは、RemoteControllerを自前で認識している。であれば、
報告されたスティック番号を入れ替えればいい。
スティックの名前つけマップを以下のようにした。
if js_name == 'Xbox Wireless Controller': print('remap axis_name') axis_names = { 0x00: 'lx', 0x01: 'ly', 0x02: 'rx', 0x03: 'ry', 0x04: 'ry', 0x05: 'ry', 0x06: 'ry', 0x07: 'rz', 0x08: 'wheel', 0x09: 'rz', 0x0a: 'lz', 0x10: 'hat0x', 0x11: 'hat0y', 0x12: 'hat1x', 0x13: 'hat1y', 0x14: 'hat2x', 0x15: 'hat2y', 0x16: 'hat3x', 0x17: 'hat3y', 0x18: 'pressure', 0x19: 'distance', 0x1a: 'tilt_x', 0x1b: 'tilt_y', 0x1c: 'tool_width', 0x20: 'volume', 0x28: 'misc', } |
とりあえずこの変更で、起動するところまで行った!
レストポジションになるみたいだ。
そこで、起こったことは、
”パチッ!!”と言って煙が”?”の形で上がった。
いろいろ起こるなあ
SpotMicro(mini) その6 ーリモートコントローラにも気をつけろー [ROBOT]
SpotMicroAiのプロジェクトは、リモートコントローラをつなげて、コントロールするようだ。
どんな動きをするのかわからないけど、ともかくつなげることが必要なようだ。
ここのページには、Xbox とPS4のコントローラが接続可能と書いてある。
そこで、Raspberry Pi とコントローラで検索をかけるとPS4とPS3の接続ができると書いてある。PS3に関しては、ドライバをインストールすれば使用可能だと書いてある。そこで、僕らの味方ハードオフを回るとPS3用のコントローラは割と見つかるので、2つほど買ってみたが、どちらもうまくいかない。しかし、PS4のコントローラは、ハードオフにはなかった。
そこで、オークションで、PS4のコントローラを調べてみると、ジャンク品でパチモノのものが500円程度で買うことができた。送料のほうが高かったけど。
こいつは、Raspberry Pi に問題なく接続できた。が、本物のPS4より招集がかかり、私の部屋から消えていった。
そこで、XBOXのコントローラを探してみることにした。
Raspberry Pi に接続するためには、Bluetoothが必要だ。
そこに罠があった。
最近新しいのが出たらしいけど、Xboxのコントローラは、複数ある。
Bluetoothが使えるものは、Xbox Oneのコントローラだ。
しかし、オークションタイトルで、ワイアレスコントローラとかいてあるものに、Xbox360ワイアレスコントローラとあるのを見つけた。
さらに、ここで、ハードオフに行ってみると360のコントローラは、割とゴロゴロある。ので、買ってきた。
が、やっぱりつながらなかった。まあ、そうだろうなとは、思った。
それじゃあ、心を入れ替えてXboxOneControllerを探して落としてみた。
が、どうしてもつながらない。調べてみるとXboxOneコントローラにもバージョンがあり、使えるものと
使えないものが
あった!
使えるもののバージョンは、1708以降のもので、それより前のものはだめらしい。
ただし、どちらも無線で、通信できるので、ワイアレスコントローラなのだ!
しかし、さらなる罠が待ち受けているのであった!!
どんな動きをするのかわからないけど、ともかくつなげることが必要なようだ。
ここのページには、Xbox とPS4のコントローラが接続可能と書いてある。
そこで、Raspberry Pi とコントローラで検索をかけるとPS4とPS3の接続ができると書いてある。PS3に関しては、ドライバをインストールすれば使用可能だと書いてある。そこで、僕らの味方ハードオフを回るとPS3用のコントローラは割と見つかるので、2つほど買ってみたが、どちらもうまくいかない。しかし、PS4のコントローラは、ハードオフにはなかった。
そこで、オークションで、PS4のコントローラを調べてみると、ジャンク品でパチモノのものが500円程度で買うことができた。送料のほうが高かったけど。
こいつは、Raspberry Pi に問題なく接続できた。が、本物のPS4より招集がかかり、私の部屋から消えていった。
そこで、XBOXのコントローラを探してみることにした。
Raspberry Pi に接続するためには、Bluetoothが必要だ。
そこに罠があった。
最近新しいのが出たらしいけど、Xboxのコントローラは、複数ある。
Bluetoothが使えるものは、Xbox Oneのコントローラだ。
しかし、オークションタイトルで、ワイアレスコントローラとかいてあるものに、Xbox360ワイアレスコントローラとあるのを見つけた。
さらに、ここで、ハードオフに行ってみると360のコントローラは、割とゴロゴロある。ので、買ってきた。
が、やっぱりつながらなかった。まあ、そうだろうなとは、思った。
それじゃあ、心を入れ替えてXboxOneControllerを探して落としてみた。
が、どうしてもつながらない。調べてみるとXboxOneコントローラにもバージョンがあり、使えるものと
使えないものが
あった!
使えるもののバージョンは、1708以降のもので、それより前のものはだめらしい。
ただし、どちらも無線で、通信できるので、ワイアレスコントローラなのだ!
しかし、さらなる罠が待ち受けているのであった!!
SpotMicro(mini) その5 ーケツの構造ー [ROBOT]
この4本足ロボットのケツの部分に、状態表示用の液晶パネルと、電源スイッチと充電用のポートをつけた。
普通のわんこは、ケツの部分からうんこを出すわけだが、こいつは、エネルギーを受け取る。
ケツの部分は、パネルとボディへのマウントの2つの部分に分かれている。
これで、簡単に液晶パネル基板にアクセスできるようにというつもりだったが、なんだかんだ言って、ここまで外す場合が多いので、結局一体型でもよかったかもしれない。とはいえ、これを一体型で成型するには、いろいろと苦労がありそうなので、結局分けたほうが、フィラメントも少なくできるし、よかったのではないかと思うが。
液晶パネルは、I2Cで接続されているが、こいつにはちょっと手を焼いた。
この液晶パネルは、AQM1602Y-FLW-FBWというもので、みんな大好き秋月電子で売っている。
この液晶パネルは、Raspberry Pi との相性があまりよくないらしいことは以前も書いたとおりだが、秋月電子の同類商品AQM1602YRN-GBWの取り扱いのページに、PCA9515というバスリピータを用いた際の回路図が掲載されている。回路図通りに作ってみたんだけど、どうも安定しない。I2Cは、裸電線で引き回すようなつもりではないようだ。なので、短い距離で使うのであれば、問題ないと思ったが、どうもうまくいかない。安定しないのだ。
I2Cに関するページをいろいろ調べてみると、2~5kが適切だと書いてあるページあったので、そうか、じゃあ小さくしてみればどうだろうとしてやってみたところ、全く動かない
さらにいろんなページを調べると、I2Cの規格を作ったphillips の仕様書には、47kが適当だとも書いてある。それならと15kにしてみたら、なんと安定的に動いている。
なるほどねえ。
普通のわんこは、ケツの部分からうんこを出すわけだが、こいつは、エネルギーを受け取る。
ケツの部分は、パネルとボディへのマウントの2つの部分に分かれている。
これで、簡単に液晶パネル基板にアクセスできるようにというつもりだったが、なんだかんだ言って、ここまで外す場合が多いので、結局一体型でもよかったかもしれない。とはいえ、これを一体型で成型するには、いろいろと苦労がありそうなので、結局分けたほうが、フィラメントも少なくできるし、よかったのではないかと思うが。
液晶パネルは、I2Cで接続されているが、こいつにはちょっと手を焼いた。
この液晶パネルは、AQM1602Y-FLW-FBWというもので、みんな大好き秋月電子で売っている。
この液晶パネルは、Raspberry Pi との相性があまりよくないらしいことは以前も書いたとおりだが、秋月電子の同類商品AQM1602YRN-GBWの取り扱いのページに、PCA9515というバスリピータを用いた際の回路図が掲載されている。回路図通りに作ってみたんだけど、どうも安定しない。I2Cは、裸電線で引き回すようなつもりではないようだ。なので、短い距離で使うのであれば、問題ないと思ったが、どうもうまくいかない。安定しないのだ。
I2Cに関するページをいろいろ調べてみると、2~5kが適切だと書いてあるページあったので、そうか、じゃあ小さくしてみればどうだろうとしてやってみたところ、全く動かない
さらにいろんなページを調べると、I2Cの規格を作ったphillips の仕様書には、47kが適当だとも書いてある。それならと15kにしてみたら、なんと安定的に動いている。
なるほどねえ。
SpotMicro(mini) その4 ー然るに胴体延長 ー [ROBOT]
SpotMicro(mini) その3 ー頭部ってか頭の中ー [ROBOT]
頭部分はいろいろ詰まっている。重さも結構ある。300gくらいかなあ。
頭の部分は、二つの近接距離センサ、ジャイロ、電圧監視センサ、RaspberryPi Cameraを保持する。
これに対し、入出力線は、カメラのリボンケーブル、I2C用の5本のケーブル、電池からの接続の3束の線で接続する。
肩の部分にサーボがとりつくスペースがあるけど、何しろサーボが6個もついてるから、線がいっぱいあで、まあ、ごちゃごちゃしている。
サーバ室とか行くとすごくうまく線がまとまってるけど、方法を教えてほしいくらいだ。
頭部の3Dプリントパーツは、4ピースからなっていて、赤のフィラメントで、前部と後部、カメラホルダコネクタと、黒のフィラメントで、カメラホルダを作成した。
前部と後部は、カメラホルダコネクタを介して4本のビスで固定されている。
カメラホルダコネクタは、カメラホルダと接続されている。中にごちゃごちゃと入っているが、これを外して裏から見ると、MPU9250IMUが配置している。最近は、BocshのIMUが調子いいらしいので、それに変更したいんだけど、サイズ的にはまるのはなさそう。なんでもほぼ直結でフィルタいらずだとか。
表側にすると、カメラと、二つの近接距離センサが付いている。
これらのI2C装置は、一つの基盤で接続されている。
何しろこれらのセンサを頭のなかに入れている。だけど、本音でいえば、これに、マイクとスピーカを乗せてしゃべらせたいと思ったけど、スペース的に無理かな。
距離センサを超音波センサにして、うなりで音を出したりなんかすると出せるのかもしれないけどなあ。
SpotMicro(mini) その3 ーI2Cはつらいよー [ROBOT]
Robotの動きは複数のサーボで、動きを作るわけど、それらは、勝手に動くわけがないので、制御する必要がある。
SpotMicro(mini) は、12個のサーボ、2個の距離センサ、1つのカメラ、1つの姿勢センサを持たせている。
Raspberry Pi Zero はいささか非力ではあるが、何分サイズ的なものもあり、こいつに頑張ってもらう。
サーボは、CS238MGで、4.6Kのトルクを出すために6Vで、動作させる。Raspberry Pi Zero からの信号は、I2Cバスを介して、ServoDistributer を介してどうさせる。
LCDパネルもI2Cバスでコマンドをやり取りする。
姿勢センサは、MPU9250 という9DOF IMUだが、これもI2Cを介して操作する。
最後に、近接物距離センサを2個頭の左右に乗せていて、これもI2Cで動作させる。
I2Cバスは、それぞれをI2Cアドレスで、分別する。今回の場合、アドレスの衝突が発生した。ジャイロと、AD変換センサがまず衝突。これは、ジャイロのアドレスの下位1ビットを設定することでアドレスが変更できる機能がありこれを用いて回避。
次は、2つの距離センサで、同じものを使っているわけだから当然衝突する。また、アドレス設定はできないみたい。ううんとか 思い、センサのマニュアルを見ていると、”RXDで出力を制御できる。”との記述があり、それをトランジスタ1石で、インバータを作り、それぞれのRXDに接続してある。
I2Cバスを操作するために、バスマスタから見てどのアドレスが使われているかを探知するコマンドがあり、それで確認すると認識しているので、どっちかのセンサが動いていることまでは確認できた。
もう少し、突っ込んだ確認が必要だけど、ここでいったん良しとする。
LCD:AQM1602Yは、これもI2Cで動くわけだけども、バスコントローラの電気的仕様が、Raspberry Pi とは、よろしくないらしく。PCA9515というバスリピータを用いる必要があるらしい。
最初は、Raspberry Pi ⇒Busリピータ→LCD/GYRO・その他 にして回路化した。
LCD単独(ほかのデバイスをつなげない)動かすとちゃんと動くんだけど、ほかのデバイスをつなげると、LCDのデバイスだけ見えなくなる。プルアップ抵抗のサイズをいろいろ変えてみたけど、どうもだめっぽいので、(Busリピータ+LCD)を一つのI2Cデバイスとして接続する(GYRO,PCA9685、IMU、バスリピータ)を同列に接続して、バスリピータから直接LCDに接続することとした。
このあたりは、デジタル回路ではないので、私には理屈が正直よく割らない。
これで動かない場合は、おいらとしてはどうしようもないので、LCDが多分字が出なくなるような気がします。
SpotMicro(mini) は、12個のサーボ、2個の距離センサ、1つのカメラ、1つの姿勢センサを持たせている。
Raspberry Pi Zero はいささか非力ではあるが、何分サイズ的なものもあり、こいつに頑張ってもらう。
サーボは、CS238MGで、4.6Kのトルクを出すために6Vで、動作させる。Raspberry Pi Zero からの信号は、I2Cバスを介して、ServoDistributer を介してどうさせる。
LCDパネルもI2Cバスでコマンドをやり取りする。
姿勢センサは、MPU9250 という9DOF IMUだが、これもI2Cを介して操作する。
最後に、近接物距離センサを2個頭の左右に乗せていて、これもI2Cで動作させる。
I2Cバスは、それぞれをI2Cアドレスで、分別する。今回の場合、アドレスの衝突が発生した。ジャイロと、AD変換センサがまず衝突。これは、ジャイロのアドレスの下位1ビットを設定することでアドレスが変更できる機能がありこれを用いて回避。
次は、2つの距離センサで、同じものを使っているわけだから当然衝突する。また、アドレス設定はできないみたい。ううんとか 思い、センサのマニュアルを見ていると、”RXDで出力を制御できる。”との記述があり、それをトランジスタ1石で、インバータを作り、それぞれのRXDに接続してある。
I2Cバスを操作するために、バスマスタから見てどのアドレスが使われているかを探知するコマンドがあり、それで確認すると認識しているので、どっちかのセンサが動いていることまでは確認できた。
もう少し、突っ込んだ確認が必要だけど、ここでいったん良しとする。
LCD:AQM1602Yは、これもI2Cで動くわけだけども、バスコントローラの電気的仕様が、Raspberry Pi とは、よろしくないらしく。PCA9515というバスリピータを用いる必要があるらしい。
最初は、Raspberry Pi ⇒Busリピータ→LCD/GYRO・その他 にして回路化した。
LCD単独(ほかのデバイスをつなげない)動かすとちゃんと動くんだけど、ほかのデバイスをつなげると、LCDのデバイスだけ見えなくなる。プルアップ抵抗のサイズをいろいろ変えてみたけど、どうもだめっぽいので、(Busリピータ+LCD)を一つのI2Cデバイスとして接続する(GYRO,PCA9685、IMU、バスリピータ)を同列に接続して、バスリピータから直接LCDに接続することとした。
このあたりは、デジタル回路ではないので、私には理屈が正直よく割らない。
これで動かない場合は、おいらとしてはどうしようもないので、LCDが多分字が出なくなるような気がします。
SpotMicro(mini) その2 ーなぜ縮小版なのかー [ROBOT]
なんでサーボをサーボを変える必要があったのか、
なんで、縮小版で作る必要があったのか。
それは、うちの3Dプリンタの印刷範囲が小さいから。
自作の3Dプリンタのプリント範囲は、代替だけど、120x120x120ぐらい。
ThingiVerseでおいてある、プリントデータで、ちょっとこれいいなあ、作ってみようと思うと、だいたい、このサイズではできない。
MG996ってトルク6キロぐらいあって、これだと余裕なんだとは思うけど、それじゃあ、手に入りそうなサーボでちょっと探ってみるかと思うと、コロナのCS238MGがあった。子のサーボはアナログ版だけど、デジタル版(DS238MG)もある。それに6V時のトルクが4.6kgを割と大きめ。よっしゃこれで作ってみよう。と思い、まずは、ちょっとだけお安いCS238MGを4つほど購入。
サイズを上面から見ると直線比で、4:3か、よっしゃそれじゃあ、全体を4:3で作ればいいじゃない。
ってことで、FusionにSTLデータを取り込んで。
しかし、物事とはそんなにうまくいかないもので、まずホーン形状がが合わない。
サーボの種類ってだいたい3つのグループに分かれていて、いわゆる”標準サーボ”と、”マイクロサーボ”と”ミドルサーボ”。昔は、標準サーボに対してマイクロサーボがあったわけだけど、その中間位ってことで、ミドルサーボができたみたい。
マイクロサーボと標準サーボは、明らかにサイズが違うからホーンなんか会うわけないけど、それでも引き込み足サーボとかそれなりにトルクが必要なサーボのためにマイクロよりちょっと大きいというかどっちかというと重たいミドルサーボが登場したんじゃないかと思う。違ってることを知ってる人がいたら、”こいつ とれぇ なあ、こんなことも、知らんのか”と一人で悦に入ってください。
で、ミドルサーボは、正確的にいろいろなサーボがあるわけだけど、CS/DS238MGは、サーボ取り付けねじの数が片側1個。マイクロサーボと同じ。MG996は、標準サーボだから、2個。つまり無加工では、サーボが付かない。サーボ搭載バーツのすべてについて、変更が必要になる。
最終的に、サイズも何もかも、作り直しが必要となりました。
図は、CS238MGのサーボとFEETパーツ
形状は、オリジナルからもらってますが、STLからBODY作ると部品によっては、メッシュが多すぎてとても何するにも時間がかかるので、元データからなんとなく似せて作ってあります。
最初のにこの部品から作りました。
本物のSpotMicroのいわゆる肉球部分にはTPU(ちょっと柔らかいフィラメントらしい)を使うようだが、そんなものは買えないことにしたので、ちょっと作ってみることにした。ほぼ完成写真の白いところで、これは、白のEVAシートを使っている。抜群のグリップ性能をたたき出すけど、本当は滑って法がいいかもしれないなあ。と最近は思い始めております(この結果に到達する事実には、まだ到達していない。早い話が動いてない)
なんで、縮小版で作る必要があったのか。
それは、うちの3Dプリンタの印刷範囲が小さいから。
自作の3Dプリンタのプリント範囲は、代替だけど、120x120x120ぐらい。
ThingiVerseでおいてある、プリントデータで、ちょっとこれいいなあ、作ってみようと思うと、だいたい、このサイズではできない。
MG996ってトルク6キロぐらいあって、これだと余裕なんだとは思うけど、それじゃあ、手に入りそうなサーボでちょっと探ってみるかと思うと、コロナのCS238MGがあった。子のサーボはアナログ版だけど、デジタル版(DS238MG)もある。それに6V時のトルクが4.6kgを割と大きめ。よっしゃこれで作ってみよう。と思い、まずは、ちょっとだけお安いCS238MGを4つほど購入。
サイズを上面から見ると直線比で、4:3か、よっしゃそれじゃあ、全体を4:3で作ればいいじゃない。
ってことで、FusionにSTLデータを取り込んで。
しかし、物事とはそんなにうまくいかないもので、まずホーン形状がが合わない。
サーボの種類ってだいたい3つのグループに分かれていて、いわゆる”標準サーボ”と、”マイクロサーボ”と”ミドルサーボ”。昔は、標準サーボに対してマイクロサーボがあったわけだけど、その中間位ってことで、ミドルサーボができたみたい。
マイクロサーボと標準サーボは、明らかにサイズが違うからホーンなんか会うわけないけど、それでも引き込み足サーボとかそれなりにトルクが必要なサーボのためにマイクロよりちょっと大きいというかどっちかというと重たいミドルサーボが登場したんじゃないかと思う。違ってることを知ってる人がいたら、”こいつ とれぇ なあ、こんなことも、知らんのか”と一人で悦に入ってください。
で、ミドルサーボは、正確的にいろいろなサーボがあるわけだけど、CS/DS238MGは、サーボ取り付けねじの数が片側1個。マイクロサーボと同じ。MG996は、標準サーボだから、2個。つまり無加工では、サーボが付かない。サーボ搭載バーツのすべてについて、変更が必要になる。
最終的に、サイズも何もかも、作り直しが必要となりました。
図は、CS238MGのサーボとFEETパーツ
形状は、オリジナルからもらってますが、STLからBODY作ると部品によっては、メッシュが多すぎてとても何するにも時間がかかるので、元データからなんとなく似せて作ってあります。
最初のにこの部品から作りました。
本物のSpotMicroのいわゆる肉球部分にはTPU(ちょっと柔らかいフィラメントらしい)を使うようだが、そんなものは買えないことにしたので、ちょっと作ってみることにした。ほぼ完成写真の白いところで、これは、白のEVAシートを使っている。抜群のグリップ性能をたたき出すけど、本当は滑って法がいいかもしれないなあ。と最近は思い始めております(この結果に到達する事実には、まだ到達していない。早い話が動いてない)
タグ:SpotMicro
SpotMicro(mini) その1 [DIY]
最近こんなのを作ってます。
KDY0523さんが公開してくれているpotMicroのデータをもとに作成しているものだけど、オリジナルそのままでは面白くないので、
サーボをMG996からCS238MGに変更 |
サーボ変更に伴い、サイズを3/4に縮小 |
サイズ変更に伴い、フロント距離センサを超音波型から、光計測型に変更 |
IMUとしてMPU9250を搭載 |
フロント搭載機器の変更に伴い、フロントの形状および保持方法を変更。フロントカバーを1ピースから2ピースに変更 |
サイズ変更に伴い、リア搭載液晶パネル、電源スイッチを追加。リアカバーを2ピースに変更 |
動作バッテリを2セル1500x2本に指定、電源として並列として接続 |
動作バッテリ指定に伴い、ボディ長の延長(10㎜) |
搭載PCとしては、Raspberry Pi Zero Wを使用。 |
Raspberry Pi Zero WのGPIOに直結したHAT基板を作成し、I2Cを拡張 |
足の保持がサーボだけだったので、サポートカバーを作成 |
サーボ保持方法に、3Dプリントによるノッチとなっていたが、リベットを軸とする |
PlayStationのコントローラで動かす! |
という変更をしています。
もし、万が一、作成した、STLファイルが欲しい方がいらっしゃれば、ご連絡をいただければ、
公開します。
ただ、ソフトウェアができていないので、現状は動きません。
SpotmicroAIでは、オリジナルの制御ソフトウェアを乗せているようです。ただし、オリジナルのサーボにかかわる調整になっているようです。
MG996の仕様が不明だが、使用したサーボが180度サーボではないので、自由度がちょっと少なくて面白くないかもしれないかもしれません。
ソフトウェアとし手は、ROSを使って、外部のコンピュータに画像や、姿勢情報を伝送し、結果として、外部コンピュータから、各サーボへの角度情報を送り、動作を行う。
どう?かっこいいでしょ?
ブラックホール改造 その2 [APS]
ブラックホール改造をやっているのだが、どうしても気に入らない部分があり、ちょっと放置。
紙自体は、いわゆるレシートを使って実施し、50ターゲットを一連続として設定可能で、いい感じで進められれば、いいんだけど。。。。
ブラックホールからの着弾音を台で検出することがどうしてもうまくいかない。
だから、ちょっと話は、棚上げ。
紙自体は、いわゆるレシートを使って実施し、50ターゲットを一連続として設定可能で、いい感じで進められれば、いいんだけど。。。。
ブラックホールからの着弾音を台で検出することがどうしてもうまくいかない。
だから、ちょっと話は、棚上げ。