SpotMicro(mini) その21 ー環境の再インストールーROSの追加パッケージ [ROBOT]
やっと、ROSのコンパイルが終わった。
すべてを満足するためのパッケージ一覧は、
これだけのパッケージが必要。本当はいろいろ削減できるかもしれないけど、何かコンパイルしようとして足りてない基本パッケージは、何も考えずに追加した。
この一覧で、
でインストールスクリプト作成して、
作成したインストールスクリプトで、
で、既にインストールされているソースツリーにマージして、
で依存関係の確認をして、
で依存するパッケージをよし何してもらった後、
で、コンパイルする。
で、前回行ったみたいに、catkin_make_isolated は、最初から最後までやろうとするので、最初流してみて、止まったら、エラー解析して、catkin_make_isolated --pkg XXで該当パッケージだけでコンパイルが正常に終わるように修正して、
そのあともう一回catkin_make_isolatedをかけて、すべてのソースのコンパイルが終わるか、別のパッケージでエラーが出るのを確認して。それなりに対処する。
RASPBERRY PI上で動いてほしいパッケージは、raspicam_node と、i2cpwm_boardだけなんだけど、
この二つだけだともっと依存関係和いらないかもしれない。
あ、あとI2Cの関連のコマンドを実行するときにI2Cのデバイスを開けるんだけど、このデバイスはルートのもちもんで、グループはI2cが使用可能になっている。
だから、
でI2Cグループに参加するのを忘れないでね。
すべてを満足するためのパッケージ一覧は、
ros_comm ros_control image_transport compressed_image_transport camera_info_mana ger joy rplidar_ros tf2_geometry_msgs diagnostic_updater tf tf2_eigen rqt_reconf igure
これだけのパッケージが必要。本当はいろいろ削減できるかもしれないけど、何かコンパイルしようとして足りてない基本パッケージは、何も考えずに追加した。
この一覧で、
rosinstall_generator ros_comm ros_control image_transport compressed_image_transport camera_info_manager joy rplidar_ros tf2_geometry_msgs diagnostic_updater tf tf2_eigen rqt_reconf igure --rosdistro melodic --deps --wet-only --tar > melodic-ros_comm-custom.rosinstall
でインストールスクリプト作成して、
作成したインストールスクリプトで、
wstool merge -t src melodic-ros_comm-custom.rosinstall
で、既にインストールされているソースツリーにマージして、
wstool update -t src
で依存関係の確認をして、
rosdep install --from-paths src --ignore-src --rosdistro melodic -y -r --os=debi an:buster
で依存するパッケージをよし何してもらった後、
sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic
で、コンパイルする。
で、前回行ったみたいに、catkin_make_isolated は、最初から最後までやろうとするので、最初流してみて、止まったら、エラー解析して、catkin_make_isolated --pkg XXで該当パッケージだけでコンパイルが正常に終わるように修正して、
そのあともう一回catkin_make_isolatedをかけて、すべてのソースのコンパイルが終わるか、別のパッケージでエラーが出るのを確認して。それなりに対処する。
RASPBERRY PI上で動いてほしいパッケージは、raspicam_node と、i2cpwm_boardだけなんだけど、
この二つだけだともっと依存関係和いらないかもしれない。
あ、あとI2Cの関連のコマンドを実行するときにI2Cのデバイスを開けるんだけど、このデバイスはルートのもちもんで、グループはI2cが使用可能になっている。
だから、
usermod -G i2c
でI2Cグループに参加するのを忘れないでね。
SpotMicro(mini) その20 ー環境の再インストールーROSの追加パッケージインストール [ROBOT]
ROSの追加パッケージをインストールする中で、なんと、驚愕の事実が判明!
2日もかかってコンパイルしたOpenCV4では、使えなくて、Opencv3をインストールする必要がある!
さらにraspicam_nodeのページをちゃんと見てみて、手順に従うと、自動で、Opencv3(コンパイル済みのバイナリー)をインストールしてくれる!!
キーは、wstool とrosdepで、このパッケージに必要な外部ライブラリ(ここではOpenc)を自動的にダウンロードしてインストールされる。
2日を返せとは言わんが、これで進むことができるのだああ。
インストールを進めているが、そうは簡単に問屋が卸してくれないのだ。。
2日もかかってコンパイルしたOpenCV4では、使えなくて、Opencv3をインストールする必要がある!
さらにraspicam_nodeのページをちゃんと見てみて、手順に従うと、自動で、Opencv3(コンパイル済みのバイナリー)をインストールしてくれる!!
キーは、wstool とrosdepで、このパッケージに必要な外部ライブラリ(ここではOpenc)を自動的にダウンロードしてインストールされる。
2日を返せとは言わんが、これで進むことができるのだああ。
インストールを進めているが、そうは簡単に問屋が卸してくれないのだ。。
SpotMicro(mini) その19 ー環境の再インストールーROSの追加パッケージインストーr [ROBOT]
前回のブログで示した通り、raspicam_nodeを追加インストールしているわけだが、
これがうまくいかない。
opencv-4.4.0 を選択したので枯れていると思ったんだけど、そうでもないかもしれない。
最初 実行時ぱけーじとしてインストールしようとして、catkin_wsにダウンロードして個別でコンパイルしても、必要なパッケージが他しないといわれるので、image_transportとか、をROS環境にインストールしたかったので、ros_catkin_wsにダウンロードして、catkin_make_isolatedでコンパイルをした。
しかし、このcatkin_make_isolatedは、最初から全部をコンパイルしようとする。基本的に一度住んでるやつは、ファイルのコンパイルのみはパスされるが、pythonパッケージは、毎回コンパイルされるので、1行直しだけで、2時間の無駄なコンパイルに付き合わないといけない。
これを避ける方法がないかと多い探してみると、やっぱりあった。
実際にコンパイルは、まあかかるのは当然だけど、動くように直してチェックするだけだとそのパッケージだけ見たいので、とても便利。
それでも一個通ったらまた全部をやらないといけないんだけど。
まだ終わってないけど、ちょっと嬉しかったので、アップ
これがうまくいかない。
opencv-4.4.0 を選択したので枯れていると思ったんだけど、そうでもないかもしれない。
最初 実行時ぱけーじとしてインストールしようとして、catkin_wsにダウンロードして個別でコンパイルしても、必要なパッケージが他しないといわれるので、image_transportとか、をROS環境にインストールしたかったので、ros_catkin_wsにダウンロードして、catkin_make_isolatedでコンパイルをした。
しかし、このcatkin_make_isolatedは、最初から全部をコンパイルしようとする。基本的に一度住んでるやつは、ファイルのコンパイルのみはパスされるが、pythonパッケージは、毎回コンパイルされるので、1行直しだけで、2時間の無駄なコンパイルに付き合わないといけない。
これを避ける方法がないかと多い探してみると、やっぱりあった。
/src/catkin/bin/cakin_make_isolated --pkg compress_image_transport
実際にコンパイルは、まあかかるのは当然だけど、動くように直してチェックするだけだとそのパッケージだけ見たいので、とても便利。
それでも一個通ったらまた全部をやらないといけないんだけど。
まだ終わってないけど、ちょっと嬉しかったので、アップ
SpotMicro(mini) その18 ー環境の再インストールーその2 OPENCVのインストール [ROBOT]
ROSでカメラを使用するための、raspicam_nodeをインストールするために、まずOpencvをインストールする。
これがまあ、時間かかった。RASPIZEROは32ビットもそうだけど、メモリが512しかないので、SWAPの増強と、GPUメモリの削減を行った。それでれもトータルメモリは、461.8Mとなる(TOP読み)
raspberry pi GPUメモリの調整は、/boot/config.textにあるgpu_memを変更する。
デフォルトでは、gpu_mem=128となっていると思うが、画面すらつなげないので、GPUメモリへの割り当てはいらない。今回は、gpu_mem=32とした。16まで下げると無視されるので、これが限界かもしれないが、限界値の探索はしていない。
スワップの増強は、/etc/dphys-swapfileの'CONF_SWAPSIZE=100'の数値を2048に変えて、systemctl start dphys-swapfile を実行する。
ここまで済んだら、
でコンパイルを実施する。
この設定で、2日でコンパイルが終わるかとおもったら、エラーが出てた。が。もう一度makeを実施したら終わった。
その後
make install を実施してインストールすれば、取り会えずopencvのコンパイルは終了。
まあ、時間はかかることは予想していたが、ここまでかかったかなというのが正直な印象。
これがまあ、時間かかった。RASPIZEROは32ビットもそうだけど、メモリが512しかないので、SWAPの増強と、GPUメモリの削減を行った。それでれもトータルメモリは、461.8Mとなる(TOP読み)
raspberry pi GPUメモリの調整は、/boot/config.textにあるgpu_memを変更する。
デフォルトでは、gpu_mem=128となっていると思うが、画面すらつなげないので、GPUメモリへの割り当てはいらない。今回は、gpu_mem=32とした。16まで下げると無視されるので、これが限界かもしれないが、限界値の探索はしていない。
スワップの増強は、/etc/dphys-swapfileの'CONF_SWAPSIZE=100'の数値を2048に変えて、systemctl start dphys-swapfile を実行する。
ここまで済んだら、
mkdir build cd build cmake -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.4.0/modules -DOPENCV_GENERATE_PKGCONFIG=ON -DBUILD_TEST=ON -DOPENCV_DOWNLOAD_PATH=../.. .. make
でコンパイルを実施する。
この設定で、2日でコンパイルが終わるかとおもったら、エラーが出てた。が。もう一度makeを実施したら終わった。
その後
make install を実施してインストールすれば、取り会えずopencvのコンパイルは終了。
まあ、時間はかかることは予想していたが、ここまでかかったかなというのが正直な印象。
タグ:OpenCV
SpotMicro(mini) その17 ー環境の再インストールーその2 ROSのインストール [ROBOT]
ROSのインストールは、割と簡単。
基本的には、 ここに従えばいい。
後後、便利なように、
1. レポジトリキーの設定
これで、aptのレポジトリーを追加セーと言われているんだけど、"apt install ros-melodic-raspian-buster" みたいなapt のインストールはできない。多分raspibian側のツールのアップデートがあるんだと思うんだけど。
依存するパッケージのインストール
上記で、設定したリポジトリも利用して、依存するパッケージをインストールする
まあ、それぞれのパッケージが何のために必要かとか、書かない。
3. rosdep
rosのインストールに必要なパッケージをダウンロードしてくれるんだと思う。後、環境の準備をしているんだとおもうんだけど、よくわからん。
4.インストール
ここからが本番。
まず、コンパイルのためのディレクトリを作成する
基本的なROS_COMMをインストールすることにして、インストールジェネレータを
作成する。
最初の行で出力される内容をインストール指示書のようである。内容的には、インストールするべきROSのパッケージ(なんだろうなあ)がリストされている。
ros依存性を解決してもらう。
ここまで済んだら、コンパイルする。
これが割と時間がかかるけど、これが終わると基本的なところの作成は終了。
この行を.bashrcに登録して、Bashが起動するために設定をしてもらう。
ここまでで、基本的なインストールはできたわけだが、今回のSpotMicroには、カメラを搭載するので、Opencvが使えるパッケージをインストールするわけだが、ここでもインストールジェネレータを使う
ここではros_controlを追加することを示している。
後は、wstool を動かして、コンパイルをすると追加できる。
さて、本論のOPENCVをいるのであるが、それは、また次回。
基本的には、 ここに従えばいい。
後後、便利なように、
1. レポジトリキーの設定
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' $ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 $sudo apt update $sudo apt upgrade
これで、aptのレポジトリーを追加セーと言われているんだけど、"apt install ros-melodic-raspian-buster" みたいなapt のインストールはできない。多分raspibian側のツールのアップデートがあるんだと思うんだけど。
依存するパッケージのインストール
上記で、設定したリポジトリも利用して、依存するパッケージをインストールする
$ sudo apt install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake
まあ、それぞれのパッケージが何のために必要かとか、書かない。
3. rosdep
$ sudo rosdep init $ rosdep update
rosのインストールに必要なパッケージをダウンロードしてくれるんだと思う。後、環境の準備をしているんだとおもうんだけど、よくわからん。
4.インストール
ここからが本番。
まず、コンパイルのためのディレクトリを作成する
$ mkdir -p ~/ros_catkin_ws $ cd ~/ros_catkin_ws
基本的なROS_COMMをインストールすることにして、インストールジェネレータを
作成する。
$ rosinstall_generator ros_comm --rosdistro melodic --deps --wet-only --tar > melodic-ros_comm-wet.rosinstall $ wstool init src melodic-ros_comm-wet.rosinstall
最初の行で出力される内容をインストール指示書のようである。内容的には、インストールするべきROSのパッケージ(なんだろうなあ)がリストされている。
ros依存性を解決してもらう。
$ rosdep install -y --from-paths src --ignore-src --rosdistro melodic -r --os=debian:buster
ここまで済んだら、コンパイルする。
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic
これが割と時間がかかるけど、これが終わると基本的なところの作成は終了。
source /opt/ros/melodic/setup.bash
この行を.bashrcに登録して、Bashが起動するために設定をしてもらう。
ここまでで、基本的なインストールはできたわけだが、今回のSpotMicroには、カメラを搭載するので、Opencvが使えるパッケージをインストールするわけだが、ここでもインストールジェネレータを使う
rosinstall_generator ros_comm ros_control --rosdistro melodic --deps --wet-only --tar > melodic-custom_ros.rosinstall
ここではros_controlを追加することを示している。
後は、wstool を動かして、コンパイルをすると追加できる。
さて、本論のOPENCVをいるのであるが、それは、また次回。
SpotMicro(mini) その16 ー環境の再インストールーその1OSのインストール [ROBOT]
しばらくSpotに火を入れてなかった。
どうもSDカードの調子が悪い気がする。
起点は、Opencvの再インストールだ。OpencvをROSで使うのに、Cmakeのコンフィグを使うのだが、これをROSの仕掛けがうまく見つけてくれない。調べたらどうもない。まず、
apt list | grep -U openv | grep installed
で、インストールされているopencv関連のファイルを消したり、
OpenCV3とかOpencv4.1とかいろいろなバージョンも入れてみたが、
結局見つけてくれない。
しかもOpencvのインストールというかコンパイルRaspberyPiZeroでだいたい2日が来かかる。
それがおわってから、もう一回消してとかやっていたら、どうもSDカードのアクセスに時間がかかるようになった。実際にTOPで調べてみるとIOWAITが73%とかすげー数出てる。これはたまらんというので、SDカードを変更することにした。
今までは、SandiskのExtremeProをつかっていた。これは、早くていいけど、上記のようになってしまったら、もう仕様がない。
そこで、私が選んだのは、ちょっと遅いかもしれないけど、高耐久をうたっている
SDカードは、物理セクタに書き込む回数に制限がある。それを回避するためにジャーナルファイルシステムを使ったりいろいろ手を使っている。しかし、すでに使われているセクタをほかのセクタに回すことはないので、容量が狭くなっていくと、再利用するチャンスが増える。しかも大物のコンパイルなどは、一つのソースファイルにつき2つ以上のファイルを作ったり消したりしているので、書き換えの頻度がものすごいわけだ、これで、SDカードがどんどん披露し、使いにくくなる。
だから、変える時は大きなサイズのカードに限る。デジカメみたいな、割と書き換え回数が少ないものは、早いほうがいいに決まっているので、そっちを選ぶべきだ。
最も高耐久というのは、環境条件(温度とか湿度とか)みたいで、書き込み回数には、あまり関係ないらしいんだが。
SDカードを変えるということはOSから書かないといけない。
最近は、Etcherというイメージライタがはやりみたいなので、これを使った。
USB3にメディアアダプタをつけて、書き込んだところ19.8MB/sぐらい出てたので、割と早く書き込めた
ファイルは、2021-03--04-raspi-os-buster-armhf.zip にした。RASPIZEROは、32ビット機なのだ。
Xは使わないので、Liteでもよかったんだが、いろんなツールを後から使うときに入ってないのは、面倒なのでこれ。
書き込み終了後、キーボードと、ディスプレイをSpotMicroに接続し、起動。
最近のラズパイは、起動時に自動でディスク拡張をしてくれるので便利だ。
初期設定はスプラッシュ画面ありの、XDMを超えての自動ログインになっている。
普通にデスクトップで使うには、まあいいんだけど、XなんかCPUの浪費でしかないので、止めないといけない。
しかし、Xの自動ログインが標準なので、非力なRASPIZEROには、耐えられない、起動して設定ダイアログが出てくるまで、5分以上かかっている(時間測ってないけど)。
設定ダイアログで何が出てきたか忘れたけど、ロケールと、使用言語の設定があった後、ネットワーク設定があった後、ライブラリのアップデートをするかを聞いてくる。ここでのアップデートはやらないほうがいいと思った。進捗はプログレスバーで教えてくれるし、それでもいいんだけど、
普通にapt-get upgradeのほうが、へえ、こんなのインストールされてるんだ的なノリで面白い。
raspi-configで、カメラ、I2C,SSHの使用を設定する。起動時設定としてテキストコンソールの自動ログインなしを選択したいので、raspi-configで、"1 System Opetions" -> "S5 Boot/ Auto login" -> "B1 Coneole" を選択する。
ssytemctl set-default multi-user でも指定できるけど、スプラッシュ画面は禁止できないので、なんか不思議な動きをする。スプラッシュ画面の禁止は、"1 System Options" -> "S7 Splash Screen" -> "いいえ"
を選択する。
長くなったので、OSのインストールまでにしますが、次はROSのインストールかな。
どうもSDカードの調子が悪い気がする。
起点は、Opencvの再インストールだ。OpencvをROSで使うのに、Cmakeのコンフィグを使うのだが、これをROSの仕掛けがうまく見つけてくれない。調べたらどうもない。まず、
apt list | grep -U openv | grep installed
で、インストールされているopencv関連のファイルを消したり、
OpenCV3とかOpencv4.1とかいろいろなバージョンも入れてみたが、
結局見つけてくれない。
しかもOpencvのインストールというかコンパイルRaspberyPiZeroでだいたい2日が来かかる。
それがおわってから、もう一回消してとかやっていたら、どうもSDカードのアクセスに時間がかかるようになった。実際にTOPで調べてみるとIOWAITが73%とかすげー数出てる。これはたまらんというので、SDカードを変更することにした。
今までは、SandiskのExtremeProをつかっていた。これは、早くていいけど、上記のようになってしまったら、もう仕様がない。
そこで、私が選んだのは、ちょっと遅いかもしれないけど、高耐久をうたっている
SDカードは、物理セクタに書き込む回数に制限がある。それを回避するためにジャーナルファイルシステムを使ったりいろいろ手を使っている。しかし、すでに使われているセクタをほかのセクタに回すことはないので、容量が狭くなっていくと、再利用するチャンスが増える。しかも大物のコンパイルなどは、一つのソースファイルにつき2つ以上のファイルを作ったり消したりしているので、書き換えの頻度がものすごいわけだ、これで、SDカードがどんどん披露し、使いにくくなる。
だから、変える時は大きなサイズのカードに限る。デジカメみたいな、割と書き換え回数が少ないものは、早いほうがいいに決まっているので、そっちを選ぶべきだ。
最も高耐久というのは、環境条件(温度とか湿度とか)みたいで、書き込み回数には、あまり関係ないらしいんだが。
SDカードを変えるということはOSから書かないといけない。
最近は、Etcherというイメージライタがはやりみたいなので、これを使った。
USB3にメディアアダプタをつけて、書き込んだところ19.8MB/sぐらい出てたので、割と早く書き込めた
ファイルは、2021-03--04-raspi-os-buster-armhf.zip にした。RASPIZEROは、32ビット機なのだ。
Xは使わないので、Liteでもよかったんだが、いろんなツールを後から使うときに入ってないのは、面倒なのでこれ。
書き込み終了後、キーボードと、ディスプレイをSpotMicroに接続し、起動。
最近のラズパイは、起動時に自動でディスク拡張をしてくれるので便利だ。
初期設定はスプラッシュ画面ありの、XDMを超えての自動ログインになっている。
普通にデスクトップで使うには、まあいいんだけど、XなんかCPUの浪費でしかないので、止めないといけない。
しかし、Xの自動ログインが標準なので、非力なRASPIZEROには、耐えられない、起動して設定ダイアログが出てくるまで、5分以上かかっている(時間測ってないけど)。
設定ダイアログで何が出てきたか忘れたけど、ロケールと、使用言語の設定があった後、ネットワーク設定があった後、ライブラリのアップデートをするかを聞いてくる。ここでのアップデートはやらないほうがいいと思った。進捗はプログレスバーで教えてくれるし、それでもいいんだけど、
普通にapt-get upgradeのほうが、へえ、こんなのインストールされてるんだ的なノリで面白い。
raspi-configで、カメラ、I2C,SSHの使用を設定する。起動時設定としてテキストコンソールの自動ログインなしを選択したいので、raspi-configで、"1 System Opetions" -> "S5 Boot/ Auto login" -> "B1 Coneole" を選択する。
ssytemctl set-default multi-user でも指定できるけど、スプラッシュ画面は禁止できないので、なんか不思議な動きをする。スプラッシュ画面の禁止は、"1 System Options" -> "S7 Splash Screen" -> "いいえ"
を選択する。
長くなったので、OSのインストールまでにしますが、次はROSのインストールかな。
タグ:RASPIZERO
SpotMicro(mini) その15 ー4足歩行パターン..その2 [ROBOT]
前回の記事で静歩行の1サイクルの75%を設置するようにするには、9ステップの接地と上昇、移動、下降の3ステップで、12ステップが最低必要なことが分かった。
このデューティでやるとすると、上昇、移動、下降がそれぞれ1/12サイクルで実施しないといけない。
足の経路と、サーボによる起動を計算するためにスプレッドシートで計算してみた。
B列がパラメータの列で、L1がひざ上の長さ、L2はひざ下の長さ、として、足の付け根から地面まdでの高さがH、Stepがサイクルのステップ、SlideSizeが着地地点のXの移動量、Liftが足の持ち上げ距離
として、この時、ステップごとの足先の位置の座標をA、Bとして、足経路を決定したのが、図中央上の足経路になるとなる。
これを右図のように角度を仮に決めて計算すると、t1、t2として角度が計算できる。
このデューティでやるとすると、上昇、移動、下降がそれぞれ1/12サイクルで実施しないといけない。
足の経路と、サーボによる起動を計算するためにスプレッドシートで計算してみた。
B列がパラメータの列で、L1がひざ上の長さ、L2はひざ下の長さ、として、足の付け根から地面まdでの高さがH、Stepがサイクルのステップ、SlideSizeが着地地点のXの移動量、Liftが足の持ち上げ距離
として、この時、ステップごとの足先の位置の座標をA、Bとして、足経路を決定したのが、図中央上の足経路になるとなる。
これを右図のように角度を仮に決めて計算すると、t1、t2として角度が計算できる。
SpotMicro(mini) その14 ー4足歩行パターンー [ROBOT]
静歩行について1サイクルにおいて75%を着地することにすれば、4本ある足のどれかの3本が着地する歩行が可能なわけだ。
そこで、どのようなパターンになるかを考えてみた。
ここでは75%をいったん忘れて考えてみることにした。
下に示す表(図?)は、1サイクルにおける動作を、着地しながら移動するスライド(S)、地面から足を話すリフト(L)、空中で前に足を動かすムーブ(M)、足を下すドロップ(D)としてあらわしてみた。
このパターンは、上記の4つの動作を均等に作業するきわめて効率がいいパターンで、最後の行は、ちそのフェーズにおいて着地しているSの数を示している。
このパターンは、4つの動作を均等に割り振っており、1サイクル中のSのデュレーションは25%であるので、ほとんどの期間で、どれか1本しか着地していない。
ちなみに、実際のわんこはこの歩き方をしない。が、1本でも着地していれば、次の着地する脚の力加減で、姿勢を維持することができる。
このパターンは、接地している区間が他の区間の合計に対して2倍になっている。
すべての期間において2本接地しているが、これでも次の時間帯を考慮しないと倒れてしまう。
このパターンは、接地している時間が、他の区間の合計の3倍としており、このため、常に3本の足が接地している。
SLMDの順序は、静方向においては、必ず一緒になるので、ほかの順序の組み合わせは見なくてもいいが、3本を接地させるためには、25%の時間で、75%の作業をしなければいけない理由がわかってもらえたと思う。
ただいろいろやっている中で面白いのを見つけた。
この例はステップで気には、先ほどの75%のものと」同じであるが、位相をちょっと変えてある。
今回の動作の目標は、必ず3本以上の足が接地地している状態を目指しているが、3本ではなく2本のところもある。しかもよく見ると4本接地しているところもある。
4本の間に姿勢を立て直せれば、早い時間に2本脚の区間を通り過ぎれば、実は、これでも行けるかもしれない。(この2本の不安定区間を時間軸でどうにかしようっていうのは、実は動歩行なんだけど)
動歩行への挑戦は、ちょっと先延ばしにするのが、先ほどの2本だけずっと着地しているバターンも動歩行(普通に歩いてるときはこれ)だし、全力疾走中のわんこは、4本をほぼ同時に着地して4本足で地面をけって加速し、次の瞬間すべての足が地面から離れている。
本物のスポットは2本脚を交互にに着地させている。よく見ると4本とも着地している瞬間があるかもしれない。
わんこたちは、静歩行と動歩行をいい感じで、使い分けているし、もっとフェーズを観察すると、もっと長いフェーズの中で動作をしているようにも見える(着地がかぶっているようにも見える)
本日はこの辺で。
そこで、どのようなパターンになるかを考えてみた。
ここでは75%をいったん忘れて考えてみることにした。
下に示す表(図?)は、1サイクルにおける動作を、着地しながら移動するスライド(S)、地面から足を話すリフト(L)、空中で前に足を動かすムーブ(M)、足を下すドロップ(D)としてあらわしてみた。
このパターンは、上記の4つの動作を均等に作業するきわめて効率がいいパターンで、最後の行は、ちそのフェーズにおいて着地しているSの数を示している。
このパターンは、4つの動作を均等に割り振っており、1サイクル中のSのデュレーションは25%であるので、ほとんどの期間で、どれか1本しか着地していない。
ちなみに、実際のわんこはこの歩き方をしない。が、1本でも着地していれば、次の着地する脚の力加減で、姿勢を維持することができる。
このパターンは、接地している区間が他の区間の合計に対して2倍になっている。
すべての期間において2本接地しているが、これでも次の時間帯を考慮しないと倒れてしまう。
このパターンは、接地している時間が、他の区間の合計の3倍としており、このため、常に3本の足が接地している。
SLMDの順序は、静方向においては、必ず一緒になるので、ほかの順序の組み合わせは見なくてもいいが、3本を接地させるためには、25%の時間で、75%の作業をしなければいけない理由がわかってもらえたと思う。
ただいろいろやっている中で面白いのを見つけた。
この例はステップで気には、先ほどの75%のものと」同じであるが、位相をちょっと変えてある。
今回の動作の目標は、必ず3本以上の足が接地地している状態を目指しているが、3本ではなく2本のところもある。しかもよく見ると4本接地しているところもある。
4本の間に姿勢を立て直せれば、早い時間に2本脚の区間を通り過ぎれば、実は、これでも行けるかもしれない。(この2本の不安定区間を時間軸でどうにかしようっていうのは、実は動歩行なんだけど)
動歩行への挑戦は、ちょっと先延ばしにするのが、先ほどの2本だけずっと着地しているバターンも動歩行(普通に歩いてるときはこれ)だし、全力疾走中のわんこは、4本をほぼ同時に着地して4本足で地面をけって加速し、次の瞬間すべての足が地面から離れている。
本物のスポットは2本脚を交互にに着地させている。よく見ると4本とも着地している瞬間があるかもしれない。
わんこたちは、静歩行と動歩行をいい感じで、使い分けているし、もっとフェーズを観察すると、もっと長いフェーズの中で動作をしているようにも見える(着地がかぶっているようにも見える)
本日はこの辺で。
タグ:robot
SpotMicro(mini) その13 -- 静的歩行と動的歩行 [ROBOT]
しばらく、手が付かなかったけど再開。
4足歩行には、静歩行と動歩行というのがあるらしい。
静歩行は、4本足中3本が接地している歩行形態で、動歩行は同時接地が2本以下で、全力走行中は、常時接地は0の時間帯がある。静歩行は、接地している足が3本あるので、ボディの姿勢維持は、接地している足で行う。これに対し動歩行は、2本以下しか接地していないので、姿勢の維持のために、重心を制御するとかの難しい制御が必要なる。倒立振り子(簡単に言うと傘の先を掌に充てて建てるやつ)を2次元方法(上下方向は、1本以上の足が接地してるとすると考えなくていい)で制御する必要がある。多分、ジャイロを積んで、必要以上の姿勢変化が起こった時に、それを打ち消すように姿勢を制御すればいいわけだけど、サーボを使ってやろうとすると、指示を出してから、移動体が移動を完了するまでの時間帯がソフトウェアにしても長いので、そのあたりの学習をする必要があるんだと思うんだがなんだか難しいので、今回はパス。
で、静歩行なんだけど、3本以上の足が常に接地している必要がある。
足の運動を見ていると、横に倒した台形を丸めた形に見えるので、計算の手間を省くために、長方形の軌道を考える、この長方形の下底が接地面ということになる。4本の脚は、この長方形の軌道に沿って、運動しているわけで、常に3本が接地するおいうことは、下底を全体のサイクルの75%をかけて移動すればいいことになる。残りの25%で、残りの移動をすることになる。
普通に考えると1辺ごとに25%でサイクルを回せば、ほぼ均等にサイクルを回すことができそうだが、先ほども言ったとおり、下底だけで、75%を使用して回すことになる。絵にかいてみればわかるが、下底で75%はまあいいけど、それと同じ以上の距離を3倍のスピードで回さないといけない。
4分の3の工程を4分の1の時間で回すことになる。
4分の1の工程のステップ数をいくつにするかで、全行程のステップ数が来まる。25%を1ステップだとすると、前部で4ステップになるが、それだと1ステップで、下底の後端から前端まで移動しないといけない。なので、25%で複数ステップが必要になる。あまりステップ数を多くすると、歩行スピードに影響が出てくる。あるのだから遅くなってもいいけどあまり遅いのはいただけない。
そこで、25%のステップ数を6にすると、全行程のステップ数は、24ステップになる。1回転は、2秒以下にしたい。とすると、1秒でラウンドするには、約42m秒でワンステップを実行しないといけない。やはり2秒程度になる気がする。
このサイクルを90度づつずらせば、3本が接地しているサイクルが完成する。
はず。
4足歩行には、静歩行と動歩行というのがあるらしい。
静歩行は、4本足中3本が接地している歩行形態で、動歩行は同時接地が2本以下で、全力走行中は、常時接地は0の時間帯がある。静歩行は、接地している足が3本あるので、ボディの姿勢維持は、接地している足で行う。これに対し動歩行は、2本以下しか接地していないので、姿勢の維持のために、重心を制御するとかの難しい制御が必要なる。倒立振り子(簡単に言うと傘の先を掌に充てて建てるやつ)を2次元方法(上下方向は、1本以上の足が接地してるとすると考えなくていい)で制御する必要がある。多分、ジャイロを積んで、必要以上の姿勢変化が起こった時に、それを打ち消すように姿勢を制御すればいいわけだけど、サーボを使ってやろうとすると、指示を出してから、移動体が移動を完了するまでの時間帯がソフトウェアにしても長いので、そのあたりの学習をする必要があるんだと思うんだがなんだか難しいので、今回はパス。
で、静歩行なんだけど、3本以上の足が常に接地している必要がある。
足の運動を見ていると、横に倒した台形を丸めた形に見えるので、計算の手間を省くために、長方形の軌道を考える、この長方形の下底が接地面ということになる。4本の脚は、この長方形の軌道に沿って、運動しているわけで、常に3本が接地するおいうことは、下底を全体のサイクルの75%をかけて移動すればいいことになる。残りの25%で、残りの移動をすることになる。
普通に考えると1辺ごとに25%でサイクルを回せば、ほぼ均等にサイクルを回すことができそうだが、先ほども言ったとおり、下底だけで、75%を使用して回すことになる。絵にかいてみればわかるが、下底で75%はまあいいけど、それと同じ以上の距離を3倍のスピードで回さないといけない。
4分の3の工程を4分の1の時間で回すことになる。
4分の1の工程のステップ数をいくつにするかで、全行程のステップ数が来まる。25%を1ステップだとすると、前部で4ステップになるが、それだと1ステップで、下底の後端から前端まで移動しないといけない。なので、25%で複数ステップが必要になる。あまりステップ数を多くすると、歩行スピードに影響が出てくる。あるのだから遅くなってもいいけどあまり遅いのはいただけない。
そこで、25%のステップ数を6にすると、全行程のステップ数は、24ステップになる。1回転は、2秒以下にしたい。とすると、1秒でラウンドするには、約42m秒でワンステップを実行しないといけない。やはり2秒程度になる気がする。
このサイクルを90度づつずらせば、3本が接地しているサイクルが完成する。
はず。
バリアブルリアサイト [APS]
DMMで販売?していたバリアブルリアサイトは、LE2020とは別のものです。
また、現在DMMさんでは、APS関係の部品の製造は、してくれないようです。
もし、使ってみたいという人がいらっしゃるのであれば、お知らせください。
反響が多いようであれば、方法を考えるかもしれません。
また、現在DMMさんでは、APS関係の部品の製造は、してくれないようです。
もし、使ってみたいという人がいらっしゃるのであれば、お知らせください。
反響が多いようであれば、方法を考えるかもしれません。
タグ:バリアブルリアサイト
SpotMicro(mini) その12 ーROSでの画像通信ー [ROBOT]
SpotMicroの機体に乗せるソフトウェアを公開していただける人たちのブログ(githubなんかも)を見ると、動くところに命を懸けている。
まあ、動かいないといけないからそれはそうなんだけど。
で、動かすことはちょっと忘れて、オンボードカメラから映像を飛ばすというのをやってみることにした。
基本的な構成としては、SpotMicroの上のRaspberry Pi Zero に接続されたRASPICAMERAから映像を取り出し、ROSのメッセージに流し、それを別のコンピュータで受信して表示するという言うもの。
の、さらに、習作。
ROSとOpenCVはすごく相性が良く、また、OpevCVで取り込んだイメージをROSのメッセージに変換する”cv_bridge"とか、イメージを送受信する"image_transport"とか、豊富なイメージの取り扱いが容易にできる。
はずだった。
ROSのバージョンはMELODICを使ったが、これは基本的には、RaspiOSではサポートされていない(実際には、有志によるインストールスクリプトなんかがあり、それをつかえば簡単にインストールできる)。
発生した問題点という壁は、以下のようなものだった。
image_pubとimage_subでこの画像の受け渡しを行うことが可能になる。
後は受け取った画像を。。。。。
まあ、動かいないといけないからそれはそうなんだけど。
で、動かすことはちょっと忘れて、オンボードカメラから映像を飛ばすというのをやってみることにした。
基本的な構成としては、SpotMicroの上のRaspberry Pi Zero に接続されたRASPICAMERAから映像を取り出し、ROSのメッセージに流し、それを別のコンピュータで受信して表示するという言うもの。
の、さらに、習作。
ROSとOpenCVはすごく相性が良く、また、OpevCVで取り込んだイメージをROSのメッセージに変換する”cv_bridge"とか、イメージを送受信する"image_transport"とか、豊富なイメージの取り扱いが容易にできる。
はずだった。
ROSのバージョンはMELODICを使ったが、これは基本的には、RaspiOSではサポートされていない(実際には、有志によるインストールスクリプトなんかがあり、それをつかえば簡単にインストールできる)。
発生した問題点という壁は、以下のようなものだった。
壁 | 詳細 |
コンパイルがうまくいかない | ROSのコンパイルはCatkinエコシステムっていうのでやるらしいが、基本的にはCMAKEをつかってコンパイルをする。この時CMakeList.txtを正しく設定しないといけないんだけど、利用した、cv_bridge,image_trans_port は、OpenCVを利用するわけだけど、それらをCMakeList,.txtに正しく設定しないといけない。findPackage,add_excutable,add_libraryを設定する。この時add_libraryは、リンク情報を書くわけではないらしい。 |
ライブラリが不足してリンクが完成しない | 今回ROS ROS本体や、cv_bridge等は、RASPI上で動くバイナリを持ってきて動かすtことにしたが、ROS ROSは基本的にCMAKEを基本として動いている。CMAKEは、パッケージに必要なインクルードファイルや、ライブラリの配置位置をファイルから得られるような機構を持っていて特定のディレクトリにそのファイルを置く。そこにあることを前提としてmakeが行われるが、CMAKEが期待する方法でで季節にインストールしたOpenCVでないとうまくいかない。といっても普通にコンパイルすればいいみたいだけど。/td> |
image_pubとimage_subでこの画像の受け渡しを行うことが可能になる。
後は受け取った画像を。。。。。
タグ:SpotMicro
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装置は、一つの基盤で接続されている。
何しろこれらのセンサを頭のなかに入れている。だけど、本音でいえば、これに、マイクとスピーカを乗せてしゃべらせたいと思ったけど、スペース的に無理かな。
距離センサを超音波センサにして、うなりで音を出したりなんかすると出せるのかもしれないけどなあ。