×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
幅広く、浅く、ゆるく、気まぐれにが目標のブログ的なもの。
| |
タイトルはこうつけましたが、 最初の方は愚痴ですね あとは役に立ちづらい情報 まあ、たたないだろうが 前回のうつな回より気分にはうつ 簡単に言えば、投げやりにおれなんて何の役にもたたないんだよ ってな感じ 前回のうつ話の始まりは確か無力感から始まりましたが 今日は無力なのは充分承知だ だが、役にたたない無駄だ という感じかな いや~ 本当に最初は何にもならない愚痴ですよ こんなところで一人で言ってもしょうがないとは思いますが 本当に何なんでしょう私 タイミングが相変わらずかなり悪く やってもできない そんな勝手な解釈も悪いのはわかっていますが、 それでも… モチベーションが持たなくてもやらないことはないんですが なんだかんだ理由をつけても やったりやらなかったりと大変中途半端 明らかな無気力より よりたちが悪い 集中力がないんですかね 本人にだけ問題がある けして、誰かのせいではない 本人が悪い でも諦めとやる気が折り混ざって中途半端 やるにはやるが どうもだめ 皆さんが教えても大したことはできない いや、何も理解できてない だが、諦めないから より訳が分からない 理解する気がないのに やろうとする 意味をわかろうとしないのに 使おうとする マジカルナンバー0? それでもやる 諦める どうにもならない 私が完全にできるものなんてない 誰にも誇れない 上辺の知識を知らない人にかすめるに限る はぁ~ 珍しくよし、これをやるぞと決めても 何らかの理由でちゃんとできることはない と思うからこそ一つの簡単なつまずきで全てをこぼす 選択肢を間違え続ける あてにならない もっとちゃんとできるようにはなりたいのだけど… という感じで 後半です いつの間にか大変重要な立ち位置になってしまった ジャイロセンサです。 最初はやってみるか と軽い感じで始めたはずが 自己位置推定においてなくてはならないものに リアルワールドではオドメトリなんてずれるのだよ あざ笑うかのよう だいぶ重いものになってしまった 申し訳ない限りではあります。 障害物の検知と回避にはあまり関係はないのですが 自己位置を理解する上では必要不可欠なもの 自分の今の向きってかなり重要 方位センサを用いる手もありますが、 定番はこれ 使用するのが サイズは大きいが、素晴らしい精度の光ファイバージャイロではなく 小さいが技術の向上により精度が上がっている 振動型ジャイロ 軽し、小さいからね。 最初に使っていたのが、ストロベリーリナックスに売ってた "IMU 5 Degrees of Freedom" 三軸加速度と二軸ジャイロを搭載 ADXL335+IDG500 電源電圧:3.3V これでいろいろ学んだんですよ。 赤い基板。 とりあえず、回路が駄目な私は周りに教えてもらいながら SH7125でAD変換してその数値をシンプルタームでPCに表示 最初は加速度と角速度すらミスして何を表示しているかもわかっていない。 三軸の加速度と二軸のジャイロですから。 これはやっと把握 で、使うのは二軸のジャイロ しかし、どうやらそのままでは使えない ということがわかった。 グラフにすると全くの静止状態でもブレまくる これではね・・・・。 これも教えてもらいながら、補正。 補正内容としては =((現在の値*4)+(過去の値*6))/10 フィルタをかけて補正。 まあ、4とか6はヒューリスティックに決めた値だから、そのときに応じて変更 入力される電源電圧自体がぶれていた時はコンデンサをGNDとVCCの間に挟む。 接続自体がUSBならまあ、PCによるらしい。 今回の場合はUSBではなくRS232Cだけどね・・・。 一応これで多少の安定は保たれたかに見えたが その前にAD変換はセンサの値をアナログからデジタルに変えるのだが、 変えた後の値はいきなり角速度が出るわけもなく そのままでは使えないので計算 今回の場合はSH7125のについているAD変換器を使用。 だから分解能は10bit 電源電圧は3.3V サンプリング周波数は10m これを考慮して手計算 =(AD[V]-平均値[V])/(2^(10[bit])*19[m]/5[V]) でよかったはず。 これで角速度がでる。 さらに使いたかったのは角度 簡易な積分 =[deg/sec]*割り込み時間 ででる。 これで安心と思ったら、 ジャイロって温度でドリフトするんですね。 ドリフト言うのは、角度が全くの静止状態でも 0で保てずに段々と動き続ける さらに積分をしているため 積分誤差がたまり続ける。 これも大分迷惑。 これをなくすことにいろいろと悩んだんですよ。 最初に使ったのはあとからこの方法は大分マイナーだと知ったのですが 当時(数週間前)はこれならいけるのではと かなり安易にとりあえずで、 プログラムに実装してみたんですよ。 内容としては ADを加算して割って小数点を切り捨てたものと ADを加算して割ったものを比較 ある決めた値より大きいか、小さいかを比較する 小数点を切り捨てたものの方が大きかった場合、 最小二乗法で近似した値をオフセットに 小さかった場合は そのままの値をオフセットにする このオフセットをADの値から引く これをADの値として計算する。 ややこしい。 赤い基板の方ではまあまあ安定したんだけどね。 もっと簡単にした方がいい というか理論もわかってないのにつかなということで もっと簡単な方法を試した 平滑化です。 より簡単にいうと平均化かな 値を何個かの平均の値を使用 =AD-|(AD-平滑化値)| でいいかな こちらは試してない。 この平滑化の値は計算時に毎回変えるのではなく 最初にとってそのまま使い続ける。 これで数値をとれば、温度のドリフトはある程度防げるはず。 まだ、問題の積分誤差はあるのだけど。 こちらはただただ上がり続けるものなので こちら側も計算上で引き続ければいいはず。 まあ、ジャイロ側はこんな感じで 他にいろいろあったのが、 ジャイロセンサの値を受ける側がいろいろ変わった件について 私は回路については本当に駄目駄目なので 結果的には全てがだめだめでしたが・・・・ ともかく、マイコンも変化が 最初はSH7125の内部AD変換10bitだったが 分解能が足りないのではということで PIC+外部AD変換16bit これが私の最小二乗のプログラムを重すぎて使えなかった。 ということで SH+外部AD変換16bit まあ動いたには動いたのですが 前に言ったようにこのアルゴリズムでは使えない。 平滑化をつくっていたのですが 最終的にはRTミドルウェア上で動かすため マイコンからのAD変換の値を受けるコンポーネントが必要に 私はこれでも作成しようと かなり思考錯誤したのですが 環境作成時点でできてない・・・ 間に合わない。 ということでできる先輩が作成 よって PIC+外部AD変換に戻った。 どうやらPICで計算するのは重いらしく 計算はコンポーネントでしているよう。 平滑化も4つで行っているよう。 結果的に私は役立たず。 駄目だこりゃ。 さらに何もしてないのではまずかと 調整を任されたのですが 回路的に壊しましたよ。 はぁー 電子回路基礎をもっとべんきょうします。 ちなみにジャイロセンサの方も変わりました 赤い基板から 1軸の高精度ジャイロに まあ、壊したんだけどね。 コンポーネントについてもしっかりと学ばないと やることはまだまだたくさんある 今のところは中途半端に役立たず。 では次回。 PR 更新回数が格段と減っていますが、
ブログをやめるという選択肢はありません。 うつな内容はしませんが、 専門的な内容をしたいと思います。 自分の脳内の整理のためにも ということで今回もRTミドルウェアの話を 図もなく、見ずらいですが 感覚だけでもつかみたい。 内容は参考資料に大分近いです 内容は違いませんが、話の仕方は大分崩れています。 そういえば思いましたが、 このような勉強はのせてもいいですが 研究となるとあまりよろしくはないみたいですね。 情報開示的な意味で 私のことだから、今後くちばしそうで怖いですね。 今回はコンポーネントの内部説明をします。 各コンポーネントがどのように中で処理しているかについてまとめてみます。 この参考にした本ではLEGO MINDSTORMSのシミュレータを使用してますが ここでは別にその話はしません。 本の内容がそのままでもしかたないので、 このシミュレータはJavaとC++のRTコンポーネントを同時に動かしている感じ シミュレータでJava3Dを使用するため。 といってもつくるのはコントローラのみ コンポーネントの設計では具体的には 4つの機能をどのように使用するか検討する データポート アクティビティ サービスポート コンフィギュレーション の4つ 一つ一つ考えてみます。 データポート データの入出力をするポート InportからOutportにデータが流れる 種類としては TimedState RTコンポーネントの状態を表現するデータ型 TimedShort 符号あり2バイト整数型 TimedLong 符号あり4バイト整数型 TimedUShort 符号なし2バイト整数型 TimedULong 符号なし4バイト整数型 TimedFloat 単精度浮動小数点(2バイト) TimedDouble 倍精度浮動小数点(4バイト) TimedChar 符号あり1バイト整数型 TimedBoolean ブール。論理型。TRUEかFALSEの2値のみ TimedOctet 符号なし1バイト整数型 TimedShortSeq 符号あり2バイト整数型配列 TimedUShortSeq 符号なし2バイト整数型配列 TimedLongSeq 符号あり4バイト整数型配列 TimedULongSeq 符号なし4バイト整数型配列 TimedFloatSeq 単精度浮動小数点(2バイト) TimedDoubleSeq 倍精度浮動小数点(4バイト) TimedCharSeq 符号あり1バイト整数型配列 TimedBooleanSeq ブール配列 TimedOctetSeq 符号なし1バイト整数型配列 場合に応じて使い分ければいいはず。 たとえば、モーターコントロールのコンポーネントがあるとしたら、 Inportが外部からのセンサの値で Outportが駆動モータの速度 がでてきたりする。 アクティビティ ロジック RTコンポーネントのアクティビティはステートマシンとして動作する コンポーネントの動作はステートマシンの状態や状態遷移時として動作する ステートマシンとはある状態における動作を設計図のようにまとめて その場その場で状態に応じた動作を決定するというロジック RTコンポーネントのステートマシンは決まっているのでそれを見ればよい。 図は著作権的にのっけていいのかわからなかったので 産総研の解説ページでみてください。 解説としては 開始を黒丸、終了状態を二重の黒丸、 それ以外の状態を角度のゆるい四角で囲んでます。 図によると、開始状態(黒丸)→Create状態→Alive状態→終了状態(二重黒丸) Alive状態の内部で変化する 上部分にあるのはStopped(停止中)とRunning(実行中) 停止状態がstartを受け取ると RTコンポーネントのonStartupを実行して実行状態に 実行状態がstopを受け取ると RTコンポーネントのonShutdownを実行して停止状態に 遷移する 停止状態の場合は全てのアクションが動作しない。 下部分にあるのはActive(アクティブ)と Inactive(非アクティブ)とError(エラー) 初期状態だと非アクティブになっており、 アクティブ化するとRTコンポーネントに onActivateがコールされてアクティブになる アクティブになるとonExecuteが繰り返し実行され続ける。 ロボットの基本的な動作はこのonExecute内で記述される。 またコンポーネントはエラーがでるか、非アクティブにならない限り アクティブ状態にたまり続ける 非アクティブ化されるときはonDeactivateがコールされて非アクティブになる。 エラーが出た場合はonAbortingがコールされエラー状態に遷移する。 エラーの場合はリセットがかかるまでエラー状態にたまり続け、 onErrorがコールされ続ける。 外部からリセットするとonResetがコールされ、 それが成功すると非アクティブ状態に遷移する。 再びアクティブ状態にすることも可能ですが、 失敗するとまたエラー表示になります。 アクションのまとめ onInitialize 初期化処理.コンポーネントの起動時に一度だけ呼ばれる. onActivated 非アクティブ状態からアクティブ化されるとき1度だけ呼ばれる. onExecute アクティブ状態時に周期的に呼ばれる. onDeactivated アクティブ状態から非アクティブ化されるとき1度だけ呼ばれる. onAborting ERROR状態に入る前に1度だけ呼ばれる. onReset エラー状態からリセットされ非アクティブ状態に移行するときに1度だけ呼ばれる. onError エラー状態にいる間周期的に呼ばれる. onFinalize コンポーネントライフサイクルの終了時に1度だけ呼ばれる. onStateUpdate onExecuteの後毎回呼ばれる. onRateChanged ExecutionContextのrateが変更されたとき呼ばれる. onStartup ExecutionContextが実行を開始するとき1度だけ呼ばれる. onShutdown ExecutionContextが実行を停止するとき1度だけ呼ばれる. サービスポート 何らかの機能(サービス)を提供したり使用したりするための仕組み データポートに入力ポートと出力ポートに分かれているように サービスにも出力する側と受け取る側がある サービスを提供するポート(サービスプロバイダ)と サービスを使用するポート(サービスコンシューマ)がある。 これらのポートから接続してサービスコンシューマから要求を出すことにより サービスプロバイダの提供するサービスを使用できる。 任意で複数のサービスインターフェースを使用できる。 コンフィギュレーション RTコンポーネントのパラメータ管理の仕組み RTCLinkなどからパラメータを変更したり パラメータの初期値の読み込みができたり コンフィギュレーションをセットで複数もち、 状況に応じたパラメータを使い分けることもできます パラメータは名前と値の組み合わせで管理 このパラメータは任意の数だけもつことが可能 このパラメータ群のことをコンフィギュレーションセット といいこれにも名前がつきます。 このコンフィギュレーションセットも任意の数だけもつことが可能 また、使う人は複数のコンフィギュレーションセットの中から 使用したいものを一つだけ選び有効にすることができる。 これをアクティブコンフィギュレーションといい セット名を変更することにより自由に変更することができる データポートは動的に動くもの コンフィギュレーションは静的に動くものに向いている。 今回はこんな感じで RTコンポーネントはこの4つを変更することにより、 動作している様子。 この文章に意義があるのかは置いといて 私的にはこのようにまとめてみた方が脳の整理になる リハーサル? 長期記憶にいれるための脳内整理? 一応関係している用語もまとめてみた。 流石に140文字には納めずらいからね。 IDL(Interface Definition Language) インターフェース定義言語 ソフトウェアコンポーネント間のインターフェースを記述のときに使用される言語 プログラミング言語に依存しない形式で記述するため 異なる言語でかかれたソフトウェア間の通信を可能にする CORBA OMGが定めた分散オブジェクト技術の仕様 異機種分散環境上のオブジェクト(プログラム部品)間で メッセージを交換するためソフトウェア(ORB)の仕様を定めている 参考資料 はじめてのコンポーネント指向ロボットアプリケーション開発 RTミドルウェア つっこみどころがあるようなら是非コメントをよろしくお願いします。 毎回、専門話のまとめにはしたくはないなー。 ではまた次回。 最近更新は少ないですね
ツイッターではいろいろ言ってますが、 ブログも更新しないと 更新したい。 今回は最近勉強しているRTミドルウェアの話でもします。 別に研究っているわけでもないので話します といっても、別に分かりやすいマニュアルを作りたいわけではないので これまでの復習的になメモ程度のものにします。 私の頭の回転は遅い方と思っているので・・・・ ミスがあったら教えてください。 あくまでも私の認識ですから ではまずはRTミドルウェアとは このブログ自体ロボットの話ばかりやっているようなブログでないので 簡単なところから RTミドルウェアとは ロボットのためのソフトウェアの規格 うーん。 これではかたいかな? 通常、ロボットはハードウェア・ソフトウェアに分かれているが 今現在は私の認識ではロボット研究は それぞれがそれぞれのハードのためのソフトになっている 各個人個人で別々に作成している それでは規格がなくて進歩が大幅には進まない。 ということで産業技術総合研究所によって作成された規格 具体的には PC内でRTコンポーネントというものを配置して繋げるだけで 通信などは勝手にやってくれてロボットが動く RTコンポーネントとはRTミドルウェア上で動くシステム 実際にはこれを開発する 部品というかブロックみたいな感じ 配置して決まった線同士をコンポーネントごとにつなぐ これに外部からの情報を入力して制御する わかりずらいですかね? まあ、わかりやすい解説はもっとあるので 丸投げします。 ようはソフトを簡単にブロックみたいにつなぐだけでソフトが完成する あとはちゃんと動くハードがあれば問題ない。 となるもの。 便利なはずなんですが・・・・ なぜかそんなにやってない なぜか? 今のところの感覚だと いろいろとなんだかわかりずらい。 まあ、動かしてみないことにはねー 概要はこんな感じで さっそくRTミドルウェアの環境設定からインストをします。 正直なところ、いろいろと面倒です。 マニュアルは産総研のRTミドルウェアの公式ページで ダウンロードもそこに必要なものは全部あると思います。 一応私も動いたので 使用したものリストを ACE-5.6_vc9.msi OSの互換 eclipse32_rtclink041_rtctemplate042_win32.zip エクリプスなんですが、いろいろエクリプスには違うバーションがあるのですが、 今回は産総研の全部入りをダウンロード 本来なら、RtcLinkと呼ばれるプラグインが必要です。 omniORB-4.1.2_vc9.msi コルバのインストです。 OpenRTM-sidt-0.4.2-jp_vc9.msi これが本体 バージョンは0.4.2です。 この上の1.0がありましたが、こちらの方が性能は上らしいですが いろいろ試す分にはサンプルは0.4の方が多いらしいので (知り合いの感想) python-2.4.4.msi 言語のパイソン 今回は2.4.4で動きました pyYAML-3.05.win32-py2.4.exe YAMLライブラリ 私の場合起こった注意するべき点は 今回はwindowsVistaで環境を作ったのですが vistaでは管理者権限というものがあり、 ネームサーバへのアクセスが管理者権限が必要になる そのため、OpenRTM内の一部の権限を変えておかなくてはならないです。 そこに引っ掛かるといろいろと面倒です。 あと、もとから入れてたエクリプスを使おうとしたら、 前文にも書いたようにRtcLinkが必要です。 ってな感じで動きました。 サンプルがあるのでそこを動かしました 今の段階ではサンプルを動かす程度で 1と書いたように今後もまた進んだら、 続きを書こうと思います。 参考図書は はじめてのコンポーネント指向ロボットアプリケーション開発 ~RTミドルウェア入門~ です。 今後はどうにかこうにか簡単なコンポーネント作成をしたいかな では次回。 いや、研究室合宿から帰ってきました。
いろいろありました。 まあ、いろいろ 基本的には研究室メンバーと仲を深めるということがメインテーマ なので、そんなに学ぶ! ということはしていませんが、 全くしてなかったわけでもありません。 合宿内でのミーティングはありました。 学年関係なくチームをつくり一つのことについて議論しました。 ルール的には妥協と多数決はなしだったのですが その中で私の所属していたチームの中で話に上がり、 結果的に私だけが一人残されて妥協できなかったことがあったので 今回はそんな話。 簡潔にいうならば、 ロボットにハードは必要か? ということです。 ロボットというものは今の段階では定義は固定されていません。 一般の人からのイメージはありますが、 そんなものは定義ではありません。 一般のイメージだと ひどい場合は漫画やアニメを意識しすぎて、 二足の完全なる人型のものイメージするかもしれません。 しかし、それはほんの一部にすぎません。 あくまでも一例 幻想この上ない。 安直です。 日本人はそれによって、ロボットに対するイメージが悪くないという 良い点もありますが、 それだけではありません。 その場合はどちらかというとアンドロイドです ロボット=アンドロイドではないですからね。 しかも、ロボットという言葉よりアンドロイドの方がはやくからあります。 よってロボット=人型ではありません。 ならば、どうならばロボットなのか? それが難しいのです。 はっきりといえば、人の見解によって違います。 自律するかしないか CPUからアクチュエータを動作させる 入力から何かしら出力が出せればいい など人により違いますがいろいろあります。 そこで出てくるのが、ハードの必要性です。 ただただ、何かしらを自分で考えて出力するだけであるならば ロボットにハードは必要ない。 が、実際の空間でロボットを動かす必要があるならば ロボットにハードは必要。 それが問題です。 これがないあるによって今後が大幅に違う 今後というのも、今後ロボットが本当に一般化していた世界になると仮定したとき ハードがないとまさに電脳世界。 実感覚の存在するネットゲームのような世界 本人であり本人ではないアバターの世界 究極的には本体である人間の体が必要なくなるかもしれない? ・・・・ロボット? 妄想を無駄に広げすぎですね。 とりあえず、ハードがなくデータ上に存在するロボット 自動と感覚 他に考えるとハードのある世界 ロボットが体の身代わりとなる世界 また、外れてる気がしますが 人間本人とは別に自身が考えて動く体がある? 補助として現実的に使える?現実? お手伝いさん? 飛躍はしません。 人間の身体力の限界を超えた稼働のできる存在かな これをどのように使用するかは別の話ということで 今後共々、ロボットに現実世界に存在する形が必要かという話 話を進めると、 私は必要だと思うんです。 しかし、結果的には必要がないとされた 私の説得力不足。 必要だと納得させるだけの理由が必要ということ。 テーマ的には会話でした ただ、会話という行動に限るのならば ハードは必要ないんです 画面に話しかけて、答えが返ってくればいいんですよね 画面?マイクかな とりあえず、アクションに対して何かしらのリアクションが帰ってくればいい まあ、画面というハードがあるのは無視して。 現段階では完全にソフトだけどはいかない だって現実世界に出力するためのハードがないと 人間には理解できない。 それは置いておいても、 ロボットというならば、機体があってこそだとは思うんですが 自分が作りたいからだけではなく、 機体を必要とするはずだから 本体があるならば、現実世界に人間には不可能なことができる それが会話という場合において必要かどうかを考えると・・・。 会話においては必要ないかな・・・ でも、それはあくまでも会話に限る場合 会話ではない場合は必要だと思います・・・ 話がまとまらない・・・。 また、今度書きなおしますかね では次回。 | カレンダー
カテゴリー
フリーエリア
最新CM
[06/05 ProrUnioroMut]
[05/07 Axonryunene]
[08/03 にゅん。]
[07/24 にゅん。]
[07/19 にゅん。]
最新記事
(12/24)
(11/27)
(11/12)
(11/06)
(10/25)
(10/24) 最新TB
プロフィール
HN:
ねこう・へば~
性別:
男性
ブログ内検索
最古記事
(06/19)
(06/19)
(06/19)
(06/19)
(06/23)
(06/23) カウンター
アクセス解析
|