SSブログ
前の20件 | -

弾速計その2動作イメージ [APS]

百聞は一見に如かずというところで、動画で。


本来の使い方として、APS3にマウントするんだけど、こんな感じです。



で、動作はこんな感じ



自分の声は聞くに堪えんな

タグ:弾速計 APS-3
コメント(0) 
共通テーマ:趣味・カルチャー

またまた久しぶりに。。弾速計 [APS]

IMG_4598.jpg久しぶりのブログ更新で、今度は、弾速系を作った。
IMG_4597.jpg
使用するコンピュータは、M5AtomS3というやつで、これが小さいくせにいい仕事をする。

このM5AtomS3は、いわゆるESP32系のCPUで、S3系列の最新型で、なんか、RISC-Vの上でESP32を書いたということらしい。その部分は、いづれ。。。。(遠い目)


今回の弾速系はプロトタイプで、内部の基板は、ユニバーサル基板のやつだ。
どこかに書いてあったけど、最近この手の作業は、いきなり基板を発注するほうが手軽らしい。
おれもそう思うけど、そう思って、焦って注文した基盤は、配線が間違ってて、使えないので、
手作り基板を使用。

使い方は、電源を入れると初期化パレードを実施して、
IMG_4598.jpg
その後、準備完了状態になる。
ここで、画面がボタンになってるので、プチっと押すと計測が始まるという感じ。
IMG_4600.jpg
計測が終わると、弾速を表示する。
IMG_4597.jpg

これは、アウターバレルがフロンティア製のもの(製品名わからん)に限ります。取付のしやすさのために。
フロンティアアウターバレルを特別に推す理由はないですが、私が持ってるのがこれだったので、これにしました。
ほかのバレルは、ねじだったりでつけっぱなしにできないんとかあるし。

ちなみにLIPO電池を使っており、充電用の端子を出してありますが、LIPO!S充電器が必要です。
今積んでる電池だと、連続1.5時間くらい。

タグ:弾速計 APS-3
コメント(0) 
共通テーマ:趣味・カルチャー

久しぶりに。。。。 [APS]

グリップを作ろうと思う。
いつものようにCADを、3mmごとにスライスして、今回はカインズのレーザカットさーびずを利用して切断後、まずはグリップをねじで止めてみた。
IMG_4502.jpg

まずはここから。

タグ:APS 木グリ
コメント(0) 
共通テーマ:趣味・カルチャー

Raspberry Pi 電源が切れちゃうアダプタ [Raspberry pi]

表題通り、動作を確認。
シャットダウンボタンを1秒以上押し続けると、シャットダウンが実行され、安全に電源が切断されます。
が、それをコントロールするマイコンは常時通電ということになります。こいつは、ごく小さいので、
待機電力が気になる人はマスター電源スイッチをつければ大丈夫。



動作は、前回のブログでも書いたが、100ミリでのオンオフのあと400ミリでのオンオフがあり、その後800ミリ間隔になるはずだが、動画ではそうなっていない。

800ミリの間隔の時の動作は、Raspberry piからの信号を待っている状態で、連携が確認されると、常時点灯になり、連携終了を通知している。

LEDとかスイッチとかは、3dプリンタ本来のものというか、スイッチの中にLEDが付いてて、押すと光るようにできるやつがつながることを想定していて、動画では試験用のダミー。まあ、言わなくてもわかるが。

本体側の設定は以下のようなものを予定していた。
1.GPIOポートを監視して、シャットダウンを開始するプログラムを開発して、それをsytemctl に登録する(いわゆる自動起動設定)
2.GPIOポートを監視して、シャットダウン信号を送るプログラムを開発して、それをSystemctlに塘路する(これはシャットダウン時処理)

これを作って登録してということをやっていて、実際できたんだけど、いろいろ調べていると、この動作は、実は設定するだけで、実現可能であることが判明した。
#powerdown on 
dtoverlay=gpio-poweroff,gpiopin=6,active_low=0

#for shutdown start
dtoverlay=gpio-shutdown,gpio_pin=4,active_low=1,debounce=1000


なんとこの2行(有効な行数)を設定するだけで、自動的にシャットダウンを開始し、しかも電源を切るための信号を出力してくれる。
config.txt への設定の詳細はここを参照してくださいを参照すること。

動画中最後のほうで、ボタンを何回か押してるのは、debounceの効果を確認するためで、1秒以上押されたら、シャットダウン指示と認識することを確認。

ただ問題があって、この設定をするとどうもReboot が効かなくなる(シャットダウンしちゃう)。

マイコンのプログラムは次回。



コメント(0) 
共通テーマ:趣味・カルチャー

Raspberry Pi 電源が切れちゃうかもしれないアダプタ [Raspberry pi]

IMG_4257.jpg

なんとなく見回すと、うちには、Raspberry Pi が複数台いらっしゃる。
基本的には、3Dプリンタのサーバになってたりするので、24時間運転してる。切るのがめんどくさいから。

閑話休題
前回のブログでもシリーズ化している、VORON 0.1 改造版の3Dプリンターは、いわゆる3dプリンタマザーボードと、それに追加したRaspberry Pi で協調しながら動作するようになっている。
最も、この動作はKlipperというファームウェアを前提としているので、現状のおいらのMotherボードでは、Klipperが動かないので、本とはなくてもいいんだけど。

話を戻して、なぜRaspberry Pi を24時間運転しているかというと、単に切るのも面倒なんだけど、なんでめんどくさいかというと、RaspberryPIはLINUXという、割と高級なOSを利用しており、このOSはシャットダウンの動作が必要になる。

Windowsでもシャットダウンは必要だよ。という声が聞こえてきそうだが、そのあたりのPCは、シャットダウンをしたら自分で電源が切れるハードウェアを持っているため、シャットダウンのための必要な処理を行った後、電源が落ちる。

しか~しだ、RaspberryPIこのような高級な電源かいろはついていない。で、それを可能にできるかどうかを試すアダプタを考えた。

回路図は、以下のようになる。
RpiPwr.jpg


電源を入れると搭載されたマイクロコンピュータを介した電源制御回路により、RaspberryPI向けの5V電源を制御している。
このマイコンは、AtTiny10という小さなコンピュータで、大きさ的には、米粒程度しかない。
このコンピュータは、以下のような処理をしている。
0 このコンピュータは、小さく、起動も早いので、 起動してから5秒までの間、5V制御線をオフにする 初期化フェーズであるために200mS周期でLEDをブリンクする
1 5秒経過後、5V制御線をオンにする。(これによりRaspberryPIが起動する) また、ここで、60秒間、400mS周期でLEDをブリンクする
2 この後、RaspberryPI側からの起動確認信号を受信し、定常走行モードに移行する, ここで、シャットダウン信号の監視を開始する
3 で、RaspberryPiからのシャットダウン信号を受け取ると、5V制御線をオフにする。(これによりシャットダウンする!)



5Vの電源の制御は、グランドを共通化したいことからハイサイドスイッチとした。ハイサイドスイッチとするためには、PCHMOSFETの方がいいようなので、そのようにした。

Raspberry Pi は、USBコネクタで電源を入れるが、GPIOピンにも5Vが出てるので、それをつかって引火している。最も、このピンに4Aも流せるのか問題もあるので、自己責任でお願いします。

どのようなマイコンのプログラムがどうなっているかは、次回だけど、信号を送ってやることで言々が切れるところまでは確認した。



コメント(0) 
共通テーマ:趣味・カルチャー

3Dプリンター作成 --MiniAftterBurner 改造 -- [3D加工]


Voron のエクストルーダは、特徴的なのが付いている名前はMiniAfterburner 。
0.1以降の大きなプリンタにはAfterBurnerというなんともかっこいい名前がついている。

MiiniAfterBurnerは以下のような形をしている。
AfterBurnerOrginal.jpg

いわゆるボーデンタイプではなく、ホットエンドにエクストルーダが同行されているタイプで、ステップモータが同居している。

が、図で正面にファン、右、左の両サイドにブロアが付いている。ファンはホットエンドで発生する熱をマウントしてる部分に到達しないように冷やすFANで、両サイドのブロアは、印刷中の対象物を冷やすためにに使う。

そこで、このFanと、ブロアが曲者で、国内ではてに入らない(最近Amazonでも売ってるのを見つけた)。オリジナルの設定では ファンのサイズは、30x30x7のサイズで、24Vが指定されている。これが単品で見つからない。

そこで、簡単に見つかる30x30x10のファンが使えるように厚みをちょっとつけた。よくん見ないと分からないけど。

AfterBurner.jpg

これをABS+で印刷した。いろいろVORONのサイトで見るとABSで印刷しろとかあるが、ABSを印刷するために作ろうとしているプリンタなので、ABSが使えるのであれば、最初から作らない。
(ABS+は、そりが少ないABSだけど、そりがないわけではない)

途中途中での写真は撮ってないので、出来上がり
IMG_4244.jpg

コメント(0) 
共通テーマ:趣味・カルチャー

3Dプリンター作成 [3D加工]

最近3Dプリンタを作っている。
voron0x.jpg
基本的には、VORON デザインのVORON0.1を作るんだけど、また同じものは作らない病が発症して、非常に苦労してしまった。

このプリンタは、Klipperというファームウェアが乗っかっている。
普通の3dプリンタのファームは、3dプリンタ上のマザーボードに乗っける場合がほとんどだけど、このKlipperは、どちらかというと3Dプリントエンジンは、RASPBERRY PI上に載っていて、3dプリンタ用のマザーボードをハードウェアの吸収用みたいな感じで使っている。

ファームの話は、されにやってしまったポカによってもうひと悶着あるんだけど。


このVORON0.1であれば、いろいろキットとしても販売されているので、そっちを買った方がいろいろと楽なんだけど、そこは、どこか頭がおかしい私なので、そのまま、やることはしなかった。

VORON0.1は15x15 のアルミフレームをもとに作成されている。今思えば、これはとても的を得ている設定だったとは思うが、国内では、この15x15のアルミフレームは入手がめんどくさい。

なので、まず簡単に入手できる20x20のframeに変更。
締結に使用するビスはM4を基本とする。
一般的に、20x20のアルミフレームは、X字のような構造になっていて、真ん中に丸穴が開いており、この穴にねじを立てれば、締結が可能なようになっている。M4にした方がいいと今回は考えたので、
今回はNICオートテックのアルミフレームを選択した。

VORONは、このアルミフレームに穴をあけて、そこからねじを使って締結する方法をとっているので、このねじの決定は意外と重要。このあたりは、VORONのマニュアルを見てもらえればわかると思う。

しかしこの決定にも問題があったわけだが。

後はベッドサイズ、オリジナルは120x120で、今使ってる150x150よりも小さい。なので、以前かなり前に買った220x220のヒータを使うべく220x220のヒートベッドに拡張した。220x220のヒータを使うときは、235x235にするらしいが、そのまま220x220にした。

ということで、Fusionで設計してみたものので作ったフレームがこんな感じIMG_4197.jpg



コメント(0) 
共通テーマ:趣味・カルチャー

3D printer のフィラメント [3D加工]

ちょっと前まではPETGを使っていたが、最近はReprapperno 低そりABSにしている。
PETGと変わらない条件でも行けるし、ほんとにそりが少ない。

もう少し使い込んでみるが、ひらぺったい板でもなければ大丈夫なんじゃないかと思う。

PLAは、ノズルの中で、固まっていくし、硬くて削りにくいので、やめていて、
PETGはいい感じだけど、ちょっと重い感じと妙に出るつやがちょっとなあって感じ。でも常用してた。これもRepRapperの。とちゅうに出るぷつぷつもほとんど最近は出ないし(あ、夏でもね)すごくいい感じだったんだけど、試しに低そりABSにしてみようとしたら、いい感じ。

意外といけるかも。

ただ、低そりABSの黒は、現在品切れ中。

もうちょっと追記


コメント(0) 
共通テーマ:趣味・カルチャー

フロンティアモデルのトリガープル [APS]

久しぶりにAPS-3の話。

APS-3の今年の?Limited Edition としてLE2020が発売されたが、ぼやぼやしているうちに、入手困難になってしまった。目玉商品としては、マルゼン純正リアサイトと、新設計ステンレスシアが搭載され、さらrに、調整済みで出荷されている。APS-3はかなり高精度に組み上げられているが、それでも個体差はある。それをある程度の範囲になるまで、マルゼン社が調整してくれていたわけだ。

このステンレスシア、すこぶる調子がいいらしい。確かに、打たせてもらった感じは、やっぱりいい。これがどんな感じなのかをやはり確認してみたくなった。そこで、おいらが作ったこの装置の登場である。
この界隈でこれ(トリガーの引き位置での荷重の計測)ができるのはこの製品だけだと思っている(当社比)。


IMG_2301.jpg


で、比較のために、LE2017 のトリガープルはいかのようになっていた。
2017.jpg

この装置は、トリガーの位置をずらしていきその時の荷重を計測した、少しでも荷重を感知したら0.5㎜分巻き戻し、550gを目指してとリーガーを少しずつ引いていき、その位置での荷重をグラフ化している。
0.5mmから3.2mmぐらいまでの140gグラムまでの直線は、いわゆる前引きで、3.2㎜以降の急峻にたちがあるところが本引きとなる。この急峻な立ち上がりが急に解放される多ところでトリガーが落ちる。2017では、495gぐらいで切れている。2017は、APの練習用を目指して作っていたので、500gが一つの目安となったと思われる。
2017は、本引きが始まってから、ストライカーが落ちる直前までほぼ一直線となっているところである。トリガーコントロールを荷重ではなくストロークで正確に制御できる車種ではあれば、500gという重いトリガーでもちゃんと制御できる。
しかし、急にトリガーが軽くなるところを探しながら打っていく射手では、この制御は少し難しいだろう。

500g付近から一旦下がった後、急激に荷重が上昇している部分は、バックストップに当たったことを示している(いわゆる後引き)。2017は、落ちた後、バックストップまでの距離が短い。

2021Frontier.png

続いて、2020フロンティアモデルだ。本来はLE2020のトリガーカーブを表示するべきだろうが、持っていないので、ご勘弁を。
で、この銃の特徴は、やはり本引きが始まってから落ちるまでのストロークの距離の少なさと、頂上付近のほぼ平らな部分があることの2つだと思う。さらにいうと後引きがちゃんとある。

あ、因みに、前引きの距離は、APS-3 ではコントロールできるので、この距離はあまり気にしなくていい。
因みに私は、前引きは長めにして、あと引きも長いほうがいいと思う。APS-3では前引きは調整できるけど、あと引きの調整はちょっと難しい。

本引きの距離が短いから、ボン引きを登りきるはるか前で、サイティイグをしても距離が短いので、(トリガーに対して引火する荷重を少なくできるので(ほんとは荷重ではないけどここではわかりやすく))ストライカーが移動するために銃を揺らす部分は、難しいが、トリガーを指で制御するために引火する荷重によるブレを軽減できる。

真ん中を狙っていても、指にかける重さのために銃が動いたり、結果として指の部分の重さの移動によるブレとかを限りなく0にしたい射撃のなかで、機構的にそのあたりに貢献してくれるのはありがたい。

この二つ目の山を、縦にも横にも小さくすることで真ん中に当てやすい銃ができる。縦方向を小さくする(荷重を小さくする)と、なんかの刺激をピクンと受けてしまうと、暴発気味に売ってしまったりするのである程度の重さが必要で、専門家が使うというように割り切れば、軽くすることも可能。
(ちなみに私は方法論を、知りません)

どっちにしてもこの銃はいいと思う。まだちょっと残ってるみたいだから、気になる人は、フロンティアモデルの在庫を確認してみるといいんじゃないかと思う。

タグ:APS-3
コメント(0) 
共通テーマ:趣味・カルチャー

SpotMicro(mini) その30 ーその他のI2Cデバイスノード ー [ROBOT]

今回作った、SpotMicroに搭載されている機能(コンポーネント?)は、

ROSメッセージを制御するためのコンピュータ、

動かすためのサーボ

FPVのためのカメラ

GYRO、磁気、加速度 センサ

電池電圧センサ、

近接センサ

あと、どうでもいい文字列を出力するためのLCD

が搭載されており、

各センサと、LCDがすべてI2cに説臆されている。


i2cdetect.jpg


ROSのプログラムは、センサ等のノードを定期的に誰宛ともなく、”Publish”し、利用数が和では、それを”Subscribe”する。
これらのセンサは、前述のとおり同じI2Cバスにつながれている。I2Cは、RASPBERRY PIから見ると、一つのデバイスとして、みえており、それぞれのセンサは、I2Cバスに対する入出力として、インプリされてみる。

言い換えると、ファイルの1バイト目は、何とかセンサ、2バイト目は何とかセンサ”みたいにアクセスする。Cのプロラムから見ると、一つのファイルとして、アクセスすることになる。
このあたりは、よく理解している人には、釈迦に説法だけど。

GYRO,加速度、磁気センサのアドバタイズ周期と、電池の電圧センサのアドバタイズ周期は、
別にしたいと考えている(両方ともなるべく少なくしたいが)。

ROSのプログラムは、公告するメッセージ毎にノードを作るのが割と普通なんだけど、別々の
プロセスにすると、I2Cデバイスの競合が起こる可能性があるので、一つのプロセスですることにした。

1秒間に60回チャンスをつくり、センサにより、何回か毎に出力するようにした。

番号トピック名構造向き、概要
1/spot/imuVector3 acel
Vector3 gyro
Vector3 magn
Float32 temp
出力:9軸センサ(加速度、各加速度、地磁気)と温度
2/spot/battteryFloat32 volt出力:電池電圧
3/spot/lcd String line入力:表示する文字列。改行文字で改行
4/spot/lcd1String line入力::1行目文字出力
5/spot/lcd2String line入力:2行目文字出力
6/spot./tofFloat32 left
Float32 right
出力:近接センサ距離(LRはうまく動かない)


となっている。
タグ:SpotMicro robot
コメント(0) 
共通テーマ:趣味・カルチャー

バリアブルリアサイト発注。 [APS]

APS関連の記事を久しぶりに書こうと思う。SpotMicroがここのところ上がってこないのは、ソフトウェアを開発中なんだけど、あまり進捗内からで、やめたわけじゃないよ。

で、バリアブルリアサイトをDMMに発注しました。もちろん私用。だれからも作ってほしいなんて話は聞かないし。

なぜ、注文したかというと、APS-3のフロンティアモデルを買うから。
私の鉄砲の特徴である、ちょっと伸びてるバレルカバーをどうするか問題は、いったんおいといて、リアサイトとフロントサイトを変える。後、グリップと。

明日、エニスヘいって。レンズホルダもかわないといけない。


ターンバックルがちょっと憂鬱。


タグ:APS-3
コメント(0) 
共通テーマ:趣味・カルチャー

キーボード変換装置 [Arduino]

ちょっと感動。

普段Perixxの英語キーボードを使っているんだけど、
このキーボードはビッグフットなんだけど、メカニカルっぽいキーボードで、打鍵時の反発力とかがいい感じなのと、何しろ安いのが気に入ってる。(これが壊れた時に買い替えられるのかが不安だけど)
ちなみにドイツ製らしい。Made in Chinaなんだけど。

Windowsの入力デバイスに、英語キーボードに設定すると、何も
問題なく使えるんだけど、この設定で、リモートデスクトップを使う場合に、接続したWindowsのデフォルトキーボードが日本語の時とかに、’¥’とか ’|’とかが入力できなくなることがある。’¥’は、ディレクトリの区切り文字なので、とっても困ることがある。

そのためだけにキーボードを付け替えるのも嫌なので、いろいろ検索していると、

なんとUSB2USBとして、変換装置を公開してくれているkirin3722さんのブログが見つかった。
USB2USB Bootkeyboard

今まで、JoyStickを作ろうとして、ProMicroを使ったHIDデバイスの作成はなんとなくわかっていたdけど、なるほど、こうすれば、いけるかもしれない。ということで、
作ってみた。
IMG_4056.jpg

必要な部品は、ProMicroの3.3Vのものと、miniUSB HOSTシールドの2個と、あとちょっとの線。

必要な作成方法は、kirin3722さんのページにもある、東京お天気カメラさんの
コメント(0) 
共通テーマ:趣味・カルチャー

SpotMicro(mini) その29 ー現時点での到達点 ー  [ROBOT]

機体で残っているのは、
1左右のTOFセンサからの測定値読み込みがまだできてない。同じI2Cにつながっていて、センサのアドレスも変更できない。このセンサを使用例があまりに少ないので、ちょっと萎えている。でもちゃんと売られているので、使えるはずで、それをコントロールする方法を探し中。また、I2CなのにCSがあるので、それで右と左を制御できる。だいぶパンチを食らって放ってある。
2ジャイロセンサからの入力が取り込めてない。9軸のセンサはついていて、いつでもかけるからいいやっていうので、放ってある。
3電池残量を図る機構は組み込んであり、Pythonでの取得は確認済みであるが、まだROSに取り込んでないので、その部分を作成する必要がある


Spot制御プログラム
このプログラムはROSベースであはあるものの、誰かが作ったプログラムはなるべく使わないという方針でスクラッチから書き下ろしているわけだが、i2cpwmboard関連は除いて。
1どのノードで、どのトピックを扱うかを考えないといけない。
2動作状態(歩行等)の遷移とイベントの確認
3gyroからの入力による姿勢の制御
4カメラ画像からの自己位置推定(別ノードかも)


Iphone コマンダー

なんといっても、画像が出力されているまではできているので、ほぼ完成なんだけど、
1機体から出力される(はずの)Gyro情報のHUD化
2機体の電池残量表示
3その他機体の状態表示機能追加


まだまだやらないといけないな。
タグ:robot ROS SpotMicro
コメント(0) 
共通テーマ:趣味・カルチャー

SpotMicro(mini) その28 ーリモコン そうだIphoneを使おう (その4)ー [ROBOT]

ということでリモコンプログラムがとりあえずできた。


現状のソースをなんと惜しげもなく(恥ずかしげもなく)公開する




#
#
import socket
import ImageFile
import Image
import ui
import io
import base64
import ui
import time

def onAction(sender):
	bt=sender.title
	
	cmds={
		'歩':'stp','座':'sit','立':'std','伏':'lie',
		'前':'fwd','停':'sto','後':'bck','左':'lft',
		'央':'ctr','右':'rgt'}


	soc.send(bytes(cmds[bt],'utf-8'))
		
def addButton(_title,x,y,_height):
	btn = ui.Button(title=_title)
	btn.bounds=(0,0,_height,_height)
	btn.font=('',30)
	btn.background_color='#f0f0f0'
	btn.flex =''
	btn.center=(x,y)
	btn.action=onAction
	return btn
	

soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
soc.connect(("192.168.11.129",11320))


v=ui.View()
v.title='SpotMicro Control'
v.name='SpotMicro Control'
v.background_color='#aaaaaa'
iv = ui.ImageView()
v.present(style='fullscreen',orientations=['landscape'])


iv.flex='LRB'
iv.ackground_color='yellow'
iv.bounds=(0,0,400,300)
iv.center=(v.width/2,150)
LeftAllign=60

btnHeight=40
RightAllign = v.width-btnHeight
BottomAllign = v.height-btnHeight/2

btnStp= addButton('歩',LeftAllign,btnHeight*1,btnHeight)
btnSit= addButton('座',LeftAllign,btnHeight*2.5,btnHeight)
btnLay= addButton('伏',LeftAllign,btnHeight*4,btnHeight)
btnFwd= addButton('前',RightAllign,btnHeight*1,btnHeight)
btnBan= addButton('停',RightAllign,btnHeight*2.5,btnHeight)
btnBck= addButton('後',RightAllign,btnHeight*4,btnHeight)
btnCtr= addButton('央',v.width/2,BottomAllign, btnHeight)
btnLft= addButton('左',v.width/2-70 , BottomAllign,btnHeight)
btnRgt= addButton('右',v.width/2+70 , BottomAllign,btnHeight)


v.add_subview(iv)

v.add_subview(btnStp)
v.add_subview(btnSit)
v.add_subview(btnLay)
v.add_subview(btnFwd)
v.add_subview(btnBan)
v.add_subview(btnBck)
v.add_subview(btnCtr)
v.add_subview(btnLft)
v.add_subview(btnRgt)


while True:
	line = soc.recv(32).decode()
	head=line.split(':')
	tag=head[0]
	frm=int(head[1])
	tim=int(head[2])
	siz=int(head[3])
	
	len=siz
	if tag == 'jpeg':	
		img=''
		buf=soc.recv(siz,socket.MSG_WAITALL)
		jpg=base64.b64decode(buf)	
		parser = ImageFile.Parser()
		parser.feed(jpg)
		jpgimg = parser.close()
		
		with io.BytesIO() as bIO:
			jpgimg.save(bIO,'png')
			img=ui.Image.from_data(bIO.getvalue())			
		
		iv.image = img



解説を期待している人はあまりいないだろうが、そんなのは無視してやると、
インポートのブロックのあとにあるonAction関数は、ボタンを押された後の動作を行う。
ボタンが押されると、onActionは、Senderを受け取る。senderには、押されたボタンのオブジェクトが格納されており、そのボタンのtitle を読みだしたことで押されたボタンの正体が判明し、それから
コマンドを送る
cmds配列は、ボタン名からコマンドへの変換テーブルで、コマンドは半角3文字とした。
コマンドが押された後の動きは、受け取った側でコントロールする。
選択されたコマンドは、socで指定されるソケットにより、commanderに送信される。
コマンドは、3文字の固定長文字列としている。

次のブロックは、ボタンを定義するサブルーチンで、画像にあるような9個のボタンを画面上に配置するために、タイトル、X位置、Y位置、ボタン高さ(幅)を指定する。

ボタンを押されたときの処理を決定するonAction関数を設定している。

これ以降はメインプログラムで、最初はソケットの作成を行っている。
ソケット作成した後、ベース画面を作成し、画面タイトル、背景色などを設定している。
ui.viewでは、titleではなく、nameで名前を設定するようだ。

iv は、受信した画像を表示するためのImageViewを指定する。Iphoneの画面は、本当は縦長なのだが、横位置に指定したかったので、背景windowを横位置にして、そこから計算される縦位置から、400x300にサイズを決定した。

次のブロックは、ボタンを配置している。画面の左に3個、右に3個、下に3個だ。

次のブロックで、作成した画像window、ボタンを背景に追加している。

whileから始まるブロックで、画像を受信する。
画像は、32バイトで指定される、フレーム番号、フレーム時刻、サイズで指定されたヘッダをまず受け取り、ここで、指定されるサイズバイトを実際に受け取り、バッファに格納している。
画像自体は、JPEGであるがバイナリによる動作の不安定さを防ぐために、いったんBase64に変換したもので通信している。
受け取ったバッファを、Base64でデコードした後ByteIoを使って、Jpegイメージかして、それを先ほど作った画像Windowに張り付けているということになる。


ただ、このプログラムには欠点があり、それを直さないといけないとは思うんだが、ほおってある。




コメント(0) 
共通テーマ:趣味・カルチャー

SpotMicro(mini) その27 ーリモコン そうだIphoneを使おう (その3)ー [ROBOT]

ちょっと時間がかかりった。
前回の作戦をもとに、Pythonista3で作っていましたが、いろいろUI上の癖みたいなのがあって、
向こうが期待している通りの設定をしないとうまく動いてくれない感じでしたが、
とりあえずUI部品の配置を終えて、だいたいの遅延を計測するまではできるようになった。



ボタンは配置してあるだけでライブではありません。
とりあえず、画像が転送できるところまでできたので。

コメント(0) 
共通テーマ:趣味・カルチャー

SpotMicro(mini) その26 ーリモコン そうだIphoneを使おう (その2)ー [ROBOT]

Pythonistaを用いたROSでの発信(トピックのパブリッシュ)はできたけど、サブスクライブができないのは、前言ったとおりだ。

すべてがROSの世界で実現できるとすると、こんな感じを予定してた。

ros.jpg

が、実際にやってみるとできなかったわけである。この絵でいうところのIPhoneで、CompressedImage
を使うところがうまくいけないわけだ。

そこで、どうするかを考えた。
1PythonistaのROSの環境の動かない理由を探索して、修正して動くようにする。
2ROSをpyto上のインストールして、使えるようにする。
3SpotMicroから出力されるJpegイメージをいったん別のノードで受けて、それをROSではない普通のソケットストリームに変換して、IPhone上のPythonista で受信する。


1番2番の方法は、世の中的にも紹介している人があまりいないので、できれば、すごく有名になれるチャンスかもしれないが、逆に言うと、IPHONEをROSの端末として使うことはあまり需要がないのかもしれない。あと、私は、IPhoneしか持ってないので、エディタの字が小さくなってきてちょっと厳しい。

ので、正攻法?とでもいえる3番を使うことにした。
とすると、上記の図は、以下のように変更する。

rosChange.jpg

カメラ画像はいわゆる動画ではないが、JPEG画像が連続して飛んでくる来るわけで、とても忙しい処理をしないといけない。Pythonは、インタプリタ言語であるので、普通のコンパイラ言語よりは遅い。
処理的に間に合うかが問題となりそう。

とりあえず、連続する画像をしばらく見ることはできた。


タグ:Pythonista ROS robot
コメント(0) 
共通テーマ:趣味・カルチャー

SpotMicro(mini) その25 ーリモコン そうだIphoneを使おうー [ROBOT]

オリジナルのSpotmicroのサイトでは、XboxだったりPS5だったりのコントローラが使われている。
これは一瞬いいようにも見えるが、接続がBluetoothなので、移動距離がある程度離れると、使えなくなる。最もWIFIでも同じだけど、もう少し広い。

で、機種変更で手元にあるIphone7に白羽の矢を立てた。
IOSではROSが動くと紹介しているページもあり、それとなく買っていたPythonista もあるので、
これに挑戦してみることとした。

ROSは、メッセージをセンサ等の情報を経て、何らかの処理を行い、その結果をモータなどのコントらーらにつなげるとっても素晴らしい仕掛けで、データが発生するところと、処理をするところ、分散するコンピュータで使用することができる。

なので、IPで接続された複数のコンピュータで、処理を分散できるわけだ。


で、話を戻して。SpotMicro君を運転するとすると、カメラの画像を見ながら、前進後進は、停止加速、などをコントロールしたい。

ここで、機種変更で手元にあるIPHONEを使おうt思ったわけだ。

で、先ほどのページを参考にして、なるほど。発信はできた。
が、受信がうまくできない。

ROSのトランスポートはTCPなので、接続がうまくいかないことは ないと思うんだけど、なんか受信がうまくいかない。
具体的に言うとraspicam_node/image/comressedメッセージを受信して、表示するというものを作りたいわけだけど、うまくいっている人がいたら、教えてほしいです。

よろしくお願いします。





コメント(0) 
共通テーマ:趣味・カルチャー

SpotMicro(mini) その24 ー現状の到達点ー [ROBOT]

現状を確認するためにマインドマップを書いてみた。
これから先はプログラムとかかかないといけないから、何気にかけないから。
まあ、毎日書く必要のないんだけどこのブログは。

ははは。

Spot.jpg

静歩行実行中のフェーズで、足を下すところで、何かを踏むと、機体が傾くので、それをジャイロが検出した場合、卸している足を水平に戻るまで高さを戻して、その時の高さで、そのあとの行程を続けることができたら、ちょっとした段差なら、耐えることできないかなあ。と

歩行には動方向とか、お座りとかやりたいなあ。
一番やりたいのは、おしっこした後の土をけるやつ。
コメント(0) 
共通テーマ:趣味・カルチャー

SpotMicro(mini) その23 ーROSTopicによるサーボ動作ー [ROBOT]

キャリブレーションが終わったので、ROSのメッセージで、サーボを動かしてみる。

以下の動画は、このスクリプトで動かしている。

#min
rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray "{servos:[{servo: 1, value: 320},{servo: 2, value: 534},{servo: 3, value: 180},{servo: 5, value: 320},{servo: 6, value: 130},{servo: 7, value: 450},{servo: 9, value: 306},{servo: 10, value: 530},{servo: 11, value: 190},{servo: 13, value: 310},{servo: 14, value: 130},{servo: 15, value: 450}]}"

# center
rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray "{servos:[{servo: 1, value: 320},{servo: 2, value: 490},{servo: 3, value: 294},{servo: 9, value: 306},{servo: 10, value: 458},{servo: 11, value: 306},{servo: 13, value: 310},{servo: 14, value: 181},{servo: 15, value: 325},{servo: 5, value: 320},{servo: 6, value: 170},{servo: 7, value: 331}]}"

# max
rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray "{servos:[{servo: 1, value: 320},{servo: 2, value: 275},{servo: 3, value: 492},{servo: 5, value: 320},{servo: 6, value: 368},{servo: 7, value: 133},{servo: 9, value: 306},{servo: 10, value: 260},{servo: 11, value: 504},{servo: 13, value: 310},{servo: 14, value: 379},{servo: 15, value: 127}]}"

# center
rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray "{servos:[{servo: 1, value: 320},{servo: 2, value: 490},{servo: 3, value: 294},{servo: 9, value: 306},{servo: 10, value: 458},{servo: 11, value: 306},{servo: 13, value: 310},{servo: 14, value: 181},{servo: 15, value: 325},{servo: 5, value: 320},{servo: 6, value: 170},{servo: 7, value: 331}]}"


#min
rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray "{servos:[{servo: 1, value: 320},{servo: 2, value: 534},{servo: 3, value: 180},{servo: 5, value: 320},{servo: 6, value: 130},{servo: 7, value: 450},{servo: 9, value: 306},{servo: 10, value: 530},{servo: 11, value: 190},{servo: 13, value: 310},{servo: 14, value: 130},{servo: 15, value: 450}]}"

#off
rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray "{servos:[{servo: 1, value: 0},{servo: 2, value: 0},{servo: 3, value: 0},{servo: 6, value: 0},{servo: 6, value: 0},{servo: 7, value: 0},{servo: 9, value: 0},{servo: 10, value: 0},{servo: 11, value: 0},{servo: 13, value: 0},{servo: 14, value: 0},{servo: 15, value: 0}]}"







よく見ると、まっすぐがやはりずれているので、それなりの修正が必要みたいだ。

ここまで来たから後は、いよいよ歩きのプログラムを作らないといけない。



コメント(0) 
共通テーマ:趣味・カルチャー

SpotMicro(mini) その22 ーサーボキャリブレーション再びー [ROBOT]

サーボキャリブレーションをもう一回やり直すことにした。
leg.png
絵がしょぼいのは、我慢して頂戴。
この図のように角度を決めて、その値を出力するとすると、最終的に、この表の
min angle とmax angleの間で泳いてもらえばいいことにした。L1サーボは、どうしたら
いいかわからんかったけど、-45,45の範囲とした。

NameBoardOutmin anglecenter anglemax angle min valcenter valmax valwidth anglewidth val
FR11213-45045409310211-90198-2.2
FR21314-20090137181379-110-2422.2
FR314153090180457325127-150330-2.2
RR145-45045221320419-90-1982.2
RR256-20090126170368-110-2422.2
RR3673090180463331133-150330-2.2
FL189-45045207306405-90-1982.2
FL2910-20090502458260-110242-2.2
FL310113090180174306504-150-3302.2
RL101-45045419320221-90198-2.2
RL212-20090534490292-110242-2.2
RL3233090180162294492-150-3302.2


これで、あとは、その15で示した表のt1,t2から計算した値を突っ込むと歩き出すはず。



もうちょっと追記


タグ:4足歩行
コメント(0) 
共通テーマ:趣味・カルチャー
前の20件 | -

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。