スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

11月のたわごと

リアルテックですどうもこんにちわ,今日は文化の日なんですね.本当は記事なんて書いてる余裕はないけど,文化の日ぐらい文化的な活動をしておこうというアレ.ちなみにラボから書いてます.

とにもかくにも,今年は表に出せない頼まれごとや研究案件が増えたので,あまり自分のやりたいことができなかったなあといった感じ.特に6月以降はいろいろ抱えながら過ごして,ROBO-ONE 29th?にもやっとこさ,顔を出したのでした,今回のROBO-ONEはMAXIMUM JOKERで先輩と出場するものの,無線がトラブって痙攣を起こして,予選のコースから落下.おまけに頭までもげて破損してしまいました...とれぇどまぁくがぁ...

最近はSTM32をいじっていて,HALドライバは超絶使いやすいなあと身にしみて感じています.春先に向けて,かなり基板設計をしなければならなそうなので,そして論文提出も抱えているので,神戸行きは無理です,と最初に告知しておきます(加速研究会の皆さんごめんなさい)
これからはFreeRTOSいじりながら,しばらく土方の開発とか設計をやろうかなあと...いや時間との勝負かな...

そんな感じで,個人的な活動は全くできてませんが,日常生活はロボットに関わる案件で溢れています.
春先に向けての目標がサーボモータを作ること(モーター駆動とは言っていない)になったので,ロバストコントローラー基板とかがもし世の中に出ることになったら,リアルテックのことを思い出してくれると幸いです.
それではぽいちゃ,とりっくおあとりーと,お菓子は全部あげるからいたずらさせて欲しいandされたいリアルテックでした.
スポンサーサイト

デジタル制御のテスト用カンペ作る

積分できても微分が出来ない子が,その先に未来を感じてくれたらなあと思います(余計なお世話
MathJax使って見るテスト,サポート切れたら知りません.スマホ非対応につき,ごめんね.
1.線形な状態空間モデルの離散時間表現(1入力1出力) \begin{align} \begin{cases} \dot{x}(t) &= Ax(t)+bu(t) \\ y(t) &= cx(t) \tag{1} \end{cases} \end{align} において,時間$t \in R,t>0$,状態変数$x \in \mathbb{R}^n$,入力$u \in \mathbb{R}$,出力$y \in \mathbb{R}$,$A \in \mathbb{R}^{n \times n}$,$b\in \mathbb{R}^{n}$,$c\in \mathbb{R}^{n}$である.(1)に解の公式を適用し,$x$の初期値$x(t_0)$としたときの連続時間における解は以下のとおり. \begin{align} \begin{cases} x(t)&= e^{A(t-t_0)}x(t_0)+\int_{t_0}^t e^{A(t-\tau)}bu(\tau)d\tau \\ y(t)&= cx(t) \tag{2} \end{cases} \end{align} ここで,制御入力が離散の値しか選べず,サンプリング周期ごとでしか制御入力の値が変更できない状況で,次ステップの状態変数の値を考える.このとき,任意のステップ$k \in \mathbb{Z}^+$における制御入力$u[k]$は,1サンプリング周期の中で同じ値を保ち続けるとする(0次ホールド).いま,サンプリング周期を$T$とし,ステップ$k$から次ステップ$k+1$へと時間が経過した時の解を(2)より求めよう. \begin{align} x(t)&= e^{A\{(k+1)T-kT\} }x(kT)+\int_{kT}^{(k+1)T} e^{A((k+1)T-\tau)}bu(\tau)d\tau \\ &= e^{AT}x(kT)+\int_{kT}^{(k+1)T} e^{A((k+1)T-\tau)}bu(\tau)d\tau \tag{3} \end{align} (3)の積分計算で,積分区間内では,$u(\tau)=u[k]$で定数となる.さらに$(k+1)T-\tau=\sigma$とおけば,$d\tau=-d\sigma$となり,積分区間は$\tau:kT\to k+1$から$\sigma:T\to 0$になるので,次のように表せる. \begin{align} &\int_{kT}^{(k+1)T} e^{A((k+1)T-\tau)}bu(\tau)d\tau \\ =& \int_{kT}^{(k+1)T} e^{A((k+1)T-\tau)} d\tau bu[k] \\ =& \int_T^0 e^{A\sigma} \times (-1) d\sigma bu[k] \\ =& \int_0^T e^{A\sigma} d\sigma bu[k] \tag{4} \end{align} おお~,いいね~,いい感じ(笑).(3)と(4)をまとめると以下のとおり. \begin{align} &\begin{cases} x[k+1] &= A_d x[k] +b_d u[k] \\ y[k] &= c_d x[k] \tag{5} \end{cases} \\ &\mathrm{where,} \begin{cases} A_d &= e^{AT} \\ b_d &= \int_0^T e^{A\sigma} d\sigma b \\ c_d &= c \end{cases} \\ \end{align}
これでPWM1ステップ後の状態考えるのもらくらくじゃんねw
続く

チョー久々に進捗などについて

とてもお久しぶりです.realteckです.
いろいろあってしばらく記事が書けませんでした.
2月以降はこんなことしてました.

3月:大道芸ロボット(ロボットグランプリ)
4月:ラボ生活が始まる.
5月:いろいろあってお引越し
6月:イマココ

ラボになれるのに数ヶ月+引っ越しで書く時間が取るに取れなかったですね.
最近になってちょぼちょぼ書きたい話が出てきたので,気まぐれに更新した次第です.いやはや習慣化するのは非常に大変.

ロボットはといえば全然いじれてません.ただ何もしないのも良くないと,4月以降はコツコツ情報収集や自作サーボ基板の設計,制御アルゴリズムなどをすこしづついじっていました.週に5日ぐらいは,1日1時間ほど時間をとってちまちまやれていた気がします.

今はまた新型機が作りたくなったので,しっかりと本腰を据えて要求性能を検討しています.これは「こうやって動く」とか「これができるようにする」という行動目標を大きく打ち立てて,そこから逆算して必要スペックを割り出す作業です.というのも今までは「この機構を使う」「この構造を使う」と方法論が先行していたので,それはマズいと思ったからです.なぜならこれでは完成した時点で目的が終了してしまい,動きの部分も含めた制作にはならないからです.「将来的にこの機構は変えられるようにしよう」と拡張性を考えても,目標とする形がないから変えようもないのです.と,ここに気づくのにまた随分と時間を費やしてしまいました.

以前,某氏とFreeScaleマイコンをSTMリンクからデバッグするといった件,まだ出来ていません,すみません.さっさとマイコン買えばいいのに,まだ発注書けられていないヘタレちゃんなのです.そんなんじゃ婚期も逃しちゃうぞ!(爆)


意外と離散系の制御則の話とか,ハイブリッドモデリングでロボットの状態が表現できる話とか,面白いねと言われることを研究の傍らに計算してたりするので,そういう話ができたらいいのですが,次に書くのはまた気まぐれですね.少なくともまだしばらくはロボットにさわれないので,内容もそういうことになります.

以下もっと個人的な話
・いろいろあって,いろいろ始まって,いろいろ巻き込まれ中(笑)
・研究はカルマンフィルタ(UKF)やってます.後半戦ではモデル予測制御(MPC)になります.
・モータにかけるPWM信号のDuty比が無負荷回転数出力に対して線形になるような制御則を組んだりしてました.
(シミュレーション上は出来ました.キーワード:ディジタル制御)
・今の僕はMATLABシミュレーションおじさんです.※ただしtoolboxは使っていない.
・Eagle先生の修行をしたら,回路設計のスピードがちょっとだけあがりました.

・最近はドールがほしいです.
・てかドール系ロボットが作りたいです.
・ドール沼ってこうして引きずり込まれるんですね.

今年のROBO-ONEは行けるかわかりませんが,オフ会主催しろと某院生にせがまれるので主催します.
次にいつかけるかわかりませんが,また次回ぽいちゃ

反省点 (ROBO-ONE 28th in つくば 行ってきた)

こんにちはrealteckです。
もう大会が終わって1週間半ですが、少しずつ自分の中で整理がついてきたので、まとめていこうと思います。

とりあえず今回も予選自動化を目指してセンサーの実装をしていました。予選当日の朝10時の時点でrcb-3に3軸の絶対角(Z軸のみ相対角)を読み取らせるまで行きましたが、そこで時すでに時間切れ。結局は前回の予選からちょっとだけモーションを補正したロボットで頑張ることになりました。

まあ、結果はまたも予選落ちで、またも自分自身の機体での決勝トーナメント進出はおあずけとなりました。


そんなROBO-ONEの前後でいろいろな人と話して、結局自分の時間のかけ方が下手だったのかな?ということに気づけた気がします。今は生活習慣を改善していて、タスク管理用にソフトを導入してみたり、定時での登校、下校を心がけたりして、なんとかロボットに毎日手をかけられるようになりました。それでも時間にしてほんの僅かですが・・・。

タスク管理ソフトを導入して気づいたのは、僕が1週間でやろうとしていることが、結構多かったこと。おかげで仕事量のフィードバックができるようになったので、今は自分に降っている仕事をなんとか減らしている状態です。

結構ロボトレースに参加すると安請け合いしてしまったのが、ここに来て仇になっています。それが終わればロボメカのことも無くなるので、すでにシフトしつつある研究にも、本腰を入れられそうです。


早くロボメカの加工機担当変わってくれよ・・・それが先輩からの切実な願いだ・・・
それではまた次回。

Xenomai導入まとめ(備忘録)

どうもrealteckです。
今回は今やってる、Linux(Ubuntu)へのXenomaiパッチ当ての備忘録を書き残します。あくまで自分のために書いているので、何かあっても当方で責任は負えません。ご容赦ください。



以下Ubuntu 14.04 LTSにて
①対象とするカーネルとXenomaiバージョンの選定
・インストール当初のUbuntuのバージョンは3.13.0-24
・(このときの)XenomaiのI-pipe(パッチ当て用のツールとでも思えばいい)がlinuxのv3系では3.18.20までなので、それ以下で最大のものを選択する。v4系でもいいが・・・Ubuntu上での安定動作は謎。一度安定動作を確認したいときは手順②へ。動作に不安がない、またはmenuconfigの設定ができる自信があるなら③へ。

②後のconfigに備えて一度カーネルをアップデート。(参考にしたサイト Hisakazu's Programming Notes より)
・以下のサイトにて、Ubuntuの様々なLinux kernelが存在する。
 http://kernel.ubuntu.com/~kernel-ppa/mainline/
 ちなみにUbuntuのバージョンごとのコードネームは公式HP「Ubuntuとは」に記載。
・14.04はコードネームはTrusty Tahr。なのでv3.16.7-ckt23-trustyを選択しておく(cktの意味はわからない)。
・ホームディレクトリまたは適当なフォルダを作っておき、headersとつくファイルでall.debと対応CPU.deb、またimageとつくファイルで対応CPU.debをダウンロードする。
 今回のCPUはintelの64bitなので、
 linux-headers-3.16.7-031607-generic_3.16.7-031607.201601280530_amd64.deb
 linux-headers-3.16.7-031607_3.16.7-031607.201601280530_all.deb
 linux-image-3.16.7-031607-generic_3.16.7-031607.201601280530_amd64.deb
 (genericとはUbuntuのカーネル郡のこと。Ubuntu wiki内 「UbuntuStudioTips/Setup/Kernels」 に記載)
・以下のコマンドですべてのファイルを指定して、パッケージインストールをする。ここではdpkg -iを使うが、こうすることで複数バージョンを後からでも切り替えることができる上、後で当該カーネルを消せる利点がある。
 sudo dpkg -i linux-headers-3.16.7-*.deb linux-image-3.16.7-*.deb
  (ここではダウンロードした3ファイルが選べれば良いと思われ。)
・再起動後にsudo update-grubしましょう。

・もしこのバージョンアップしたカーネルで異常が出るなら、他のバージョンを選ぶ。カーネルを削除する際は以下のコマンド
 sudo apt-get remove linux-headers-3.16.7-* linux-image-3.16.7-*

・バージョン管理にはgitを使った賢いやり方もあるんだろうけど、僕gitは使えないんです・・・

余談:UbuntuはRT-Preemptパッチを当てたlowratencyというカーネルを用意している。当方で実験してみたが、intelのx64アーキのCPUならおそらくレイテンシは最大でも200usぐらいだと思う。なおUbuntuをリアルタイム向けに強化してUbuntuStdioという強力なツールも存在するため、簡単にそこそこのリアルタイムのPCを作りたいならこの選択が無難だ。
だって sudo apt-get install linux-lowlatency でリアルタイムカーネルに切り替えてくれるんだから・・・

③Xenomaiパッチ当て (参考にしたサイト jbohren.com, Xenomai 公式HPのインストールページ より)
・ホームディレクトリか適当なフォルダを別に作り、いくつかダウンロードする。
・その前にコンパイル用の下準備、リンク先の英語ページを鵜呑みにして以下のコマンドを実行した。
 sudo apt-get install kernel-package
 sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge
 sudo apt-get build-dep linux
 sudo apt-get install git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev

  (bzImageを作ってインストールしてもいいけど、めんどくさいのでfakerootでpkgを作るコマンドを実行する腹らしい)
・これが実行できない場合は、一度g++をダウンロードする。
 sudo apt-get install g++
・今後の処理を少し楽にするため、参考サイトに則って環境変数を作っておこう。ここでのLinuxバージョンやXenomaiのバージョンは予め選定してあったものを使用する。Xenomai3はリリースされて日が浅いが、いくつか追加になった機能が存在するらしい。怖い人はXenomai2系を選ぶといいだろう。以下はダウンロードするディレクトリで行っていく(pwdがあるため)。
 export linux_version=3.16.7 #選んだバージョンで
 export linux_tree=`pwd`/linux-$linux_version
 export xenomai_version=3.0.1 #選んだバージョンで
 export xenomai_root=`pwd`/xenomai-$xenomai_version
 export ipipe_version=3.16.7-x86-5 #linuxのバージョンに合わせたほうがいい
 export ipipe_root=`pwd`/ipipe-core-$ipipe_version.patch

・続いて各種ファイルのダウンロード。参考サイトとはリンクが違うので注意。僕がgitが使えれば(ry
 wget https://xenomai.org/downloads/xenomai/stable/xenomai-$xenomai_version.tar.bz2
 tar xvf xenomai-$xenomai_version.tar.bz2
 wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-$linux_version.tar.gz #バージョンによって拡張子が違うので注意
 tar xvf linux-$linux_version.tar.gz
 wget https://xenomai.org/downloads/ipipe/v3.x/x86/older/ipipe-core-$ipipe_version.patch


・configファイルを持ってくる。ここで②をしておくことが生きてくる(と思う)
 cp -vi /boot/config-`uname -r` $linux_tree/.config
・xenomaiのパッチ当て
 cd $linux_tree
 $xenomai_root/scripts/prepare-kernel.sh --arch=x86_64\ #--arch=には該当デバイスの形式を記述
 --adeos=`find $xenomai_root | grep $linux_version-x86`\ #xenomaiの該当は64bit,32bitでもx86らしい?
 --linux=$linux_tree --ipipe=$ipipe_root

 今時はarmにだって入っちゃうんだからすげえよ。

・コンフィグ
 make menuconfig #ここでXenomaiの設定をオンにする。詳しいやり方は参考サイトに譲る
 (ここでつまづくことがおおいので何度かやるといい。ミスったら展開したlinuxのカーネルファイルだけを消して、もう一度展開。同様にconfigファイルのコピー以降の手順を繰り返す。)

④debファイルの作成。
・ところでdebファイルはdebianベースのOSのみに許されたファイル形式なので、RedHat系のFedoraとか、他の郡のOSだと話はまた変わってくる。
・debファイル作成
 export CONCURRENCY_LEVEL=4 #引数 -j4に相当、8とかでもいいと思う。プロセッサ次第。
 fakeroot make-kpkg --bzimage --initrd\
 --append-to-version=-xenomai-$xenomai_version kernel-image kernel-headers modules

・インストール
 cd ..
 sudo dpkg -i linux-image-*.deb linux-headers-*.deb

 これで導入完了です。再起動後にsudo update-grubしましょう。

これ以降のオプションがいろいろありますが、そこは他のサイトに譲ることにします。
arm系マイコンでlinuxが入るなら手続きは同様なのかは調査中です。
またクロスコンパイルについてはまだ書く気が起きないので、もしその機会が来たらまた記すことにします。

(shファイル作ると楽かもね。)
最新記事
プロフィール

realteck

Author:realteck
2足歩行ロボットをマターリと製作の大学生。
製作日記はもちろんのこと、ロボットに関する理論・考察等もしてます。
基本毎週or隔週更新です。

realteck(当ブログ管理人)は
・JSRC(SRC)規格
・rp(ロパ)での機体評価方式
・大学ホビロボ連盟(2足版ロボコンの開催)
に賛成しています。

FC2カウンター
今までに訪れた人数
Twitter...
カテゴリ
最新コメント
月別アーカイブ
最新トラックバック
検索フォーム
リンク
ブロとも申請フォーム

この人とブロともになる

ブロとも一覧
メールフォーム

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。