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度度の舵角があるらしい。
舵角の面から考えると、今回は、アナログサーボにするほうがいいかもしれないなあ。
いろいろあるなあ。