Barrierを用いてUbuntuとWindows間でマウス・キーボード・クリップボード共有
前回の続きです。これはかなり嬉しい。
Barrier with Ubuntu16.04
前回の記事ではBarrierでWindowsのPC同士でマウスとキーボードを共有しましたが,今度はWindowsとUbuntu間で試しました。 Ubuntu16は公式ではサポートしていないのでコミュニティのログを血眼になって探したところ,一つ前のバージョンで動作をさせることができました。
インストールする手順
インストールされるのはBarrier2.0です。現在の最新は2.1で2.2がbetaなのでギリギリ大丈夫だとは思います。
以下のコマンドを走らせることで,Barrierのソースを落としてきて自前の環境でコンパイルすることができます。
sudo apt-get -y install build-essential cmake qt5-default wget libxtst-dev libxinerama-dev libice-dev libxrandr-dev libavahi-compat-libdnssd-dev libcurl4-openssl-dev libssl-dev dh-make wget https://github.com/truatpasteurdotfr/barrier/archive/v2.0.0.tar.gz && tar xzvf v2.0.0.tar.gz cd barrier-2.0.0 && dpkg-buildpackage -us -uc | tee debian.log
barrierの実行ファイルはbarrier-2.0.0/build/bin
に作成されるのでディレクトリ移動して起動するかPathを設定しましょう。個人的にはディレクトリ移動して起動するスクリプトを書くほうが無難な気がします。
動作確認
さて,公式のissueなどではUbuntuマシンではクリップボード共有などはうまく行かないなどの報告が多いですが,偶々?私の環境ではきちんと動作させることができました。
欠点はWindows同士と比べて若干ラグを感じることです。タッチパッドのスクロールなんかは少し怪しいです。(ASUSのドライバがあんまり出来が良くないという説もあります。)
それでも無料のソフトを使ってマウス・キーボード・クリップボードをLinux-DOS間で共有できるというのは割とすごいことの様に思われます。 ちなみにLogicoolのFlowでも今の所対応できていません。
製品版のSynergyにも期待が持てますね。
とはいえ安心=課金
フリーソフトマニアが言うのもなんですが,安心は金で買うべきです。 Flow対応のキーボードやマウスをLogicoolから買えばもっと楽にファイル共有なども行えるでしょう。
というわけで広告を貼ります。これ別に私にお金はいるわけではないですけどね。
ロジクール ワイヤレスキーボード 無線 キーボード K380BK Bluetooth マルチOS:Windows Mac iOS Android Chrome OS対応
- 出版社/メーカー: Logicool(ロジクール)
- 発売日: 2015/11/05
- メディア: Personal Computers
- この商品を含むブログ (2件) を見る
- 出版社/メーカー: Logicool(ロジクール)
- 発売日: 2017/06/15
- メディア: Personal Computers
- この商品を含むブログを見る
matplotlibを用いた作図テンプレート(PDF図)
より良い記法をみつけ次第更新。こだわりポイントがある人はコメントで教えてください。
結論
折れ線プロット
PDFでplotをきれいに吐きたいならとりあえずこれ。
# setup import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages import numpy as np x = np.arange(0,10,0.5) y = np.sin(x) # plot template fig = plt.figure(figsize=(5,4),dpi=80) plt.plot(x,y,'-*',label='this is used for legend') plt.grid() plt.rcParams['font.family'] = 'Arial' plt.title('Title above') plt.ylabel('ylabel') plt.xlabel('Time [s]') plt.legend(loc='best', borderaxespad=0, fontsize=12) plt.show() # Save figure as PDF pp = PdfPages('pdf_test.pdf') pp.savefig(fig) pp.close()
写真とplotを重ねる
写真と重ねたplotはベクターにする意義が薄いがまぁ統一するならPDFか。
fig = plt.figure(figsize=(10,10),dpi=200) # Image Plot img = plt.imread(’Filename’) plt.imshow(img) plt.grid() # Scatter Plot plt.scatter(ConvertedX,ConvertedY,c=color_code) plt.colorbar() plt.xlabel('longitude') plt.ylabel('lattitude')
個々の機能について
Font変更
Times New Roman教の方はこちらから。 matplotlib のフォントはデフォルトで Bitstream Vera Sansですが,ArialやNew Romanなどがいい人は以下のように変更すればいいと思います。
自分用メモ: matplotlibを使ったグラフの調整 - Qiita
plt.rcParams['font.family'] = 'Arial' #plt.rcParams['font.family'] = 'Times New Roman'
figureのサイズなどをいじる
plt.figure()の中身をいじればfigureのレイアウトや解像度を指定可能。
fig = plt.figure(figsize=(5,4),dpi=80)
PDFにエクスポート
多用するなら関数化しても良いかも。なお,ただの画像ならplt.savefig('figure.png')
でOK。
from matplotlib.backends.backend_pdf import PdfPages def savefigPDF(fig,filename): pp = PdfPages(filename) pp.savefig(fig) pp.close()
subplot①
fig = plt.fgure(figsize=(10,10),dpi=200) ax=fig.add_plot(1,2,1) plt.plot() ...
subplot②
こちらの書き方の場合,plt.~~
で設定していた箇所が ax.set_~~
になる。図ごとに設定をいじれるが書き方が面倒と思ってしまう。
img = plt.imread("Map3forsave.png") fig, ax = plt.subplots(1, 2,figsize=(10,10),dpi=200) ax[0].imshow(img) ax[1].scatter(sigpos_img[:,0],sigpos_img[:,1],c=signal_freq) ax[0].set_xlabel() ax[0].set_ylabel() ax[0].set_title()
参考サイト
https://shimolab01.blogspot.com/2018/02/matplotlibpdf.htmlshimolab01.blogspot.com
Barrierを用いて複数のPC間でマウス・キーボード共有を行う(2019年秋Ver)
複数PCでのマウス・キーボード共有
複数のPCで作業する時に,マウスやキーボードをシームレスに共有するという思想が世の中には存在します。
Logicool社のFlowなんかもそうです。
FLowの場合,対応したマウスやキーボード機器を整える必要があり,またWindows間のみでの対応になります。
一方で,ソフトウェアのみをインストールすることで同様の機能を実現できるSynergyというソフトが存在します。
元がオープンソースなので古いverやソースコードは無料で手に入ったようですが,2019年現在実行ソフトを入れようとすると$29~39
かかります(買い切り)。
SynergyではFlowでは対応していないWindowsと Linux間での連携や特別なハードウェアなしに実現可能な点が利点と言えます。 一方で,Linuxはディストリビューションが多岐にわたり,完全な動作保証がしづらい点やLogicoolという大企業と比較すると購入後のサポート・保証にやや不安があります。 価格も買い切りとはいえ安いとは少し言いづらいので導入には少し気が引けます。
ということでSynergyから分岐したフリー版SynergyともいえるBarrierというソフトをお試しで浸かってみた記録をここに記します。
下記のサイトが大変参考になりました。 gihyo.jp
ざっくりBarrierの動作紹介
BarrierはWindows,Linux共に使用可能と説明があります。手持ちのWindows10,Ubuntu16.04を用いて試験をしました。
Barrierをインストールした後に起動すると,サーバーかクライアントかを選択します。メインでマウスとキーボードを使う側をサーバーとし,サーバー側PCから操作したいPCをクライアントと設定します。
- PCどうし接続するには同じWifi(回線)上に居なければならない(多分pingが通ればOK)
- 設定した画面端にマウスを動かすと別のPC上でのマウスとキーボード操作に切り替わる
- Windows間ではクリップボードの共有が可能(Linuxではまだとのこと)
- ドラッグ&ドロップでファイル移動ができるとあるが動作を確認できず
- Ubuntu16はそもそも非対応
Barrier試用結果まとめ
忙しい人用。
インストールから設定まで
基本的にWindows版前提で話を進めていきます。Ubuntu18以降はgyhyo様のサイトに詳しく載っているので割愛します。
ソフトの入手・インストール
オープンソースなのでgitレポジトリから入手してコンパイルすることも可能ですが,実行ファイル形式でDLした方が手間が無いです。
ダウンロード後管理者権限で実行すればすぐにインストール画面に進みます。
まともな日本語がきちんと整備されているので安心して言語選択で日本語を選べます。
インストール後,Bonjourというソフトをインストールするか聞かれます(オートコンフィグの為らしい)がなんとなくNoを押しました。 おそらくClient側からの自動接続機能用でしょうが,IPアドレスを手打ちすればいい話と思ったので
サーバー・クライアント共通の設定
共通の設定の設定から入ります。
- 設定を開く
「Barrier」→「Change Settings」或いは「F4」キーを押して設定を開きます。
- スクリーン名をわかりやすいものに変更(後の配置時に使います。)
- Enable SSLのチェックを外す。
「OK」を押して終了です。
注)接続がうまく行かないときは,ポート番号を変えるとうまくいくなどの報告があるのでポート番号をキチンと確認しておきましょう。
サーバーの設定
続いて,サーバー側の設定です。
- サーバーの設定を開く
「サーバーを設定」から開きます。以下のような画面が出てきます。「画面とリンク」でPC同士の画面の配置,「サーバーの詳細な設定」のタブでその他設定を調整します。
- PCの画面の配置
上の図にもあるように最大25個の画面を配置するスペースがあります。25個も配置できるのかはよく知りませんが。PCはドラッグアンドドロップで配置を変更できる上,右上から追加,左上のアイコンから削除ができます。
- 詳細な設定
詳細な設定を押すと以下の画面が現れます。Linux版はファイル転送やクリップボードのシェアが未実装なのでチェックを外すようですが,Windows版では特にいじらなくても平気です。
以上の設定の後に「開始」ないし「更新」を押すと設定が保存されプログラムがスタートします。
クライアント側からの操作
クライアント側からはサーバーのIPアドレスを入力すればOKです。ローカルな通信をしていますが,これってグローバルなIPでやってもできるんでしょうかね?
外部ディスプレイとの競合チェック
ここまでやって気になるのは外部ディスプレイ接続との競合です。
知見1:外部ディスプレイの先にアクセスできない
例えば右側にBarrierでディスプレイを設定した後に,外部ディスプレイでメインPCのディスプレイを右に拡張した場合,Barrierの移動が無効化されるようです。
逆に左側でも同様でした。
知見2:なんか右方向は苦手
拡張ディスプレイの向きをBarrierの配置と干渉しないようにした結果,何故か右方向のディスプレイに移動できないことを発見しました。 なお,この構成だと拡張したディスプレイの左側からもBarrierの左でディスプレイにアクセスできます。
下においた場合も同様です。
知見3:Barrier接続面の位置をあわせること
先程の試験で拡張したディスプレイからもBarrierのディスプレイにアクセスできることを確認しましたが,以下のように横のアライメントが合わないと拡張したディスプレイ側からは移動できなくなります。 マウスポインタの座標かなんかを使ってスイッチしているからでしょうか。
拡張ディスプレイの解像度の設定をいじっている人は気をつけるべきと思います。
なにやってんだろ。。。
おまけ
最適構成例?
先程のまとめで左側に配置したほうが安定していたので,左に拡張していったほうがやりやすいっぽいです。 皆さん右を向いて作業しましょう。
コピペの限界について
Windowsならクリップボードの内容を保持できるとのことですが,ファイルそのもののコピペはできません。 これはWindowsではファイルコピペ時にはデータのアドレスを操作しているからです。
ファイルの移動で、コピーより切り取りの方が速い理由 - t-hom’s diary
その代わり,スクリーンショットなどの画像データに関してはきちんとコピペを行うことが出きます。実際この記事のいくつかのスクショはBarrier経由で引っ張ってきています。
ファイル移動機能が使えない?
使えたらさぞかし便利なのでしょうが私の環境では使えませんでした。Issueもいくつか立っているので有名な問題のようです。
解決したら教えて。
まとめ
Barrierは設定が簡単な割には面白い使い方ができるソフトだと思います。 ファイル送信のバグが取れたら誰か連絡ください。
日本一と言われるウェルビーのサウナに行ってきた
以前,サウナと水風呂のサイクルを繰り返して俗に「整う」というトランス状態になれるという話を聞いてから何度か挑戦していますがまだその境地には達せていません。 私も整いたいですね。↓ こんな感じになるそうな。(出典:サ道~マンガで読むサウナ道~)
ウェルビー栄:店舗紹介
そんな中,ちょうど出張で名古屋に来ていた際に友人に『日本一』のサウナがあると教えられて立ち寄ったのがこの「ウェルビー栄」です。
ウェルビーのグループは本格的なサウナに力を入れているようで福岡などにも店舗があるそうですね。
場所は栄駅から徒歩10分程度で,同名のカプセルホテルと一緒に営業しているようです。(なお利用者は男性のみ)
料金
筆者はサウナ初心者なので界隈と比べたコスパ議論は控えますが,感覚的にはサウナの料金は結構高めです。
1時間コースもありますがサウナを楽しむのに1時間は正直少し短いので数百円を足して1860円食事付きの2時間コースが良いと思います。 なお,記載がないですが学割だと1540円で24時までいれるので学生証がある方は学割プランが良いと思います。
値段が張る代わりに,館内はきれいで無料の貸しタオルや飲料,ボディケアのアメニティが充実しているので私のように唐突に手ぶらで訪れても問題ありません。
設備
入り口以降はカプセルホテルによくある縦長ロッカーに荷物を預けて館内着に着替えます。 風呂場洗面台の他に,
- マッサージ・垢すり
- 食堂
- 給水所
- 休憩スペース
があります。
休憩スペースは広い上にごろ寝用のシートが快適で,セキュリティ上の問題がなければそのまま寝ていたいくらいです。 できることなら長期滞在で利用したいものです。
風呂場レビュー
風呂場は大まかに
- 風呂場 2箇所
- 水風呂
- 高温サウナ
- 森のサウナ
- 北極サウナ
- 休憩スペース
があります。
日帰り出張だったので時間に追われており,普通のお風呂には一切入らなかったのであしからず。
水風呂
入ってい左のサウナ①の近くに丸い桶状の水風呂があります。
ソムリエいわく温度は15,6度ということでこれは業界でも高水準の冷たさ(?)のようです。
水風呂の底が深めになっており,中腰くらいの体制で全身たっぷり水につかれる点が良かったです。 サウナトランスはわかりませんが酸欠のようなクラクラした感じを味わうなら手っ取り早く後頭部を冷やすと良いと今までの実験で判明しているのでいっそ潜るくらいでも良いでしょう。
「サウナトランス」のセルフ人体実験記録はいずれ公開するとして,楽しみ方についてサウナ名人のアドバイスが待たれるところです。
高温サウナ
入って右手にあるサウナその①。高温とありますが90度くらいでした。
温度は90度程度で部屋が広いため暑さはそこまででもありません。 部屋の片側はテレビと時計が近く,寝転がる為の斜めのスペースがあります。…寝転がるスペースがあります。 寝転がるサウナは長居しやすく,とても良いです。
寝サウナ。オススメです。
入り口を挟んで反対側は火元にやや近く,波の音が流れており静かに楽しみたい人用のスペースになっているようです。 私が行った時は瞑想をしている人がいました。
端的に良かった点をまとめると,
- アロマの香りが強くロウリュの無いときも良い香りが漂っている
- 寝転がるスペースが快適
- 熱波師やアロマ含めてロウリュのクォリティが高い
となります。
19時に受けたロウリュですが,熱波師の扇ぎ方が非常に上手でサウナ上空の空気を打ち下ろされるので強い熱量を感じることができます。 最高点からバシっと打ち下ろす感じはタオルでラケット競技の素振りをするのに少し近い気がします。
バド,テニスプレーヤーは熱波師の素養がある説を唱えておきます。
ロウリュ中のアロマは当然良いのですが,ロウリュ後もアロマの香りがずっと続くのでアロマが好きな人にはポイントが高いと思われます。
森のサウナ
サウナその②。奥にあるなにやらムーディな空間に配置されています。
入り口近くの木の棚にはサウナハットや腰布などが用意されていて,空間演出のこだわりが感じられます。
部屋が小ぶりで天井も近いため体感温度は先程のサウナよりも更に高いです。 また,ヒノキの香りが非常に強く森感をよく醸し出しています。
↑ オモコロより画像引用。分子ガストロノミーもやってみたいですね。
例のごとく寝転がるスペースがある他,本格的な白樺の枝がありました。(ヴィヒタというらしい)
これで体をバシバシ叩くとロウリュにも劣らない熱量と独特の刺激が加わり気分良く体を温められます。
正直サウナ入っているときって暇なので手持ち無沙汰で一人でずっとバシバシしてました。
私も瞑想,覚えようかな。
アイスサウナ~湖のほとり~
本場フィンランドではサウナ後に氷点下の湖にダイブするそうです。アホかな?
ということで森のサウナの直ぐ側にはこのような雰囲気のアイスサウナがあります。 本格派ということで中の手すりなども凍っているくらい冷たい冷凍庫のような空間です。というか冷凍庫です。
入った感想はあっこれはアカンやつやです。 水掛けの後10秒強体を沈めただけで手足がしびれてきてしまい本能的に飛び出してしまいました。確か出川○朗みたいなリアクションをしながら部屋を出たと思います。ヤバイよ~~。
おそらく修行が足りないせいだと思うのでみなさんも死なない程度にチャレンジしてくると良いと思います。冬の海で魚獲ってた濱口さんすげぇっす。
休憩スペース
一番奥には休憩スペースがあり,乾いたタオルで少し体を拭きながら休憩できます。
サウナで気持ちよくなるのに楽な姿勢になるのは必要なシークェンスだと思うのでこれは非常にありがたいです。
なお,お風呂を出てもラウンジの休憩スペースがあるのでそちらでゆったりするのも良いでしょう。
サウナ&水風呂でクラクラした後,横になると気持ちよさからそのまま眠ってしまいそうになりますが今回は帰りの新幹線の時間が気になりすぎて寝れませんでした。 次は宿泊利用します…。
総評
宿泊利用で入り浸るべき。 あと誰かサウナトランスのコツ教えて下さい。
参考文献
マンガ サ道~マンガで読むサウナ道~(1) (モーニング KC)
- 作者: タナカカツキ
- 出版社/メーカー: 講談社
- 発売日: 2016/01/22
- メディア: コミック
- この商品を含むブログ (1件) を見る
- 出版社/メーカー: 学研プラス
- 発売日: 2015/07/02
- メディア: Kindle版
- この商品を含むブログを見る
Netlify CMS+Hugo+Githubで個人用のメモサイトを管理する
完成度は30%というところでしょうか。
目的
2019年夏現在の要望としては個人用の雑記やメモなどの文章を保管,管理できるようにしたいというのがあります。 より具体的にやりたいことを書いていくと,
と言ったところです。
論文感想や教科書読んだ時のちょっとしたメモ,プログラミングのメモなど小ネタ等を書いてまとめるなくさないオンラインノートがほしいといったところでしょうか。
候補比較
すでにいくつか候補が上がっており,他の方も色々と考察してくれています。
各自いろんな基準を設けているようですが,以下の方の記述に非常に共感しました。
はてなブログやQiitaなどのブログサービス
- 作成も管理も楽。
- ローカル環境に記事が残らないのがややネック
Google Keep
スマホなどの小型端末から簡易的にアクセスするなら断然こっち
Dropbox paper
- Wordに似た書き味だが,Markdownと制御文字が被っていてかなり良い感じ
- 2019年8月現在 Dropboxとストレージが別になっているのもGood
- この手のサービスは改悪されたりするので正直怖い面もある
- ローカルからファイルに直接アクセスできない?
正直GoogleDocumentもあまりうまく使えていないので二の舞になりそうではある。
Inkdrop
評判が良いが有料サービスなので整理が苦手な自分的には避けたい。StackEditに定期課金した500円がどうなったのか把握してないくらいなので… ハッカー向けノートアプリ「Inkdrop」は最高に使いやすいメモ帳ツールだった | Web Design Trends
メモ環境考察まとめ
- 記事を公開してFBが欲しいならはてなかQiita
- モバイル環境と連携した細かなメモならGoogleKeep
- DropboxPaper,GoogleDocumentは良いところもあるがハマる使い所がわからない
手元にない欠陥を埋めるならば,ローカルに記事を保管しつつオンラインで閲覧,編集ができるサイト運営がしたい。
Netlify CMSで個人メモ環境を作る①
正直良くわかっていないのでざっくりと書くと,
という事になっているみたいです。
必要な準備
巷ではHugoという静的サイトをコンパイルする?ソフトを入れるという説明が多いですが,Netlify上で動かす分には自前で用意しなくても大丈夫です。
Minimum Setup
以下のブログに従えば最小限の手間でサイトを作成できます。とりあえず試したいひとは適当なリポジトリを作って試すと良いです。 ottan.xyz
基本操作
Githubから編集する以外にも作成されたブログのアドレスの下に/adminを入れると管理画面に飛び,そこから編集を行うことができます。当然Githubに編集は反映されます。
ブラウザ,エディタの双方から編集できるので使用感は結構良い感じです。
カスタマイズ:不要な箇所を削除
デフォルトだとまんまKALDIのサイトになっているので見た目を気にするならば気になる所を削除します。これは後に追記します。
Hugoのテンプレから作成する②
上記の手順だとどうしても他のテーマで記事を作成したくなりました。
本来まともにやるならHugoでローカルでレイアウトを自分なりに編集しつつNetlifyにホスティングしてもらうという手順が良さそうですが今回はより簡単に済ませてしまおうと思います。
↓ちゃんとやっている例 https://blog.mismithportfolio.com/web/hugo-netlify-build
今回はこちらの記事を参考に進めていきます。 gomagaru.hatenablog.com
Hugoのテンプレからテーマを決める
以下のHugoのテーマ集から好きなテーマを選択してCloneないしzipでダウンロードしてきます。 themes.gohugo.io
私は検索機能を重視したかったのでDocDock
というテーマにしました。Academic
というテーマも良さそうです。
このリポジトリの内容を自分のリポジトリにforkあるいはコピーします。一応ライセンス条項的には違反してないですがこの辺のマナーはよくわかりませんので詳しい人が居たらご教授願います。
Netlifyでホスティング
このままだとただのGithubリポジトリになるので,Netlifyのページに行って,New Site from Git
を押して先程編集したリポジトリを選択します。
その後しばらくしたら見れるようになっているはずです。
その後,作成されたブログのURLが表示されるので,
config.toml
を開いてbaseURLを「https://XXXX.netlify.com/」に修正します。
/をつけることを忘れずに。
詳細は以下のページを参考にすると良いでしょう。今回やってみた所ビルドのコマンド等は勝手に決めてくれました。 Hugoで作成したページをNetlifyでホスティングする - Miki's Blog
Netlify CMSを導入
このままだとURLの下に/adminを入れても管理画面に飛びません。次にまた同じ方の記事をなぞってやっていきます。
上の記事の
- Github連携
- Netlify連携
- adminフォルダ作成
を済ませます。
static/admin/config.ymlの編集
config.ymlは今後もいじりそうなので個別に項目を設けます。
config.yml
のリポジトリ名を自分のリポジトリに変える- post するfolderを変更
exampleSite/content/MyPages
- publish modeの項をコメントアウト:draftとか管理するよりすぐ記事にしたい為
テーマに沿った編集
ここからはdocdockを前提とした話を書きます。
Mypageフォルダを作成
このテーマでは左にmenubarの様にファイルを表示できます。
これは内部的にはフォルダで管理されています。
構成的には
-フォルダ |- _index.md |- その他の.mdファイル
となっており,_index.md
は以下の記述を文頭に持つ必要があります。
+++ title = "My Page" description = "" date = "2019-08-05T18:43:24+02:00" creatordisplayname = "Yourname" creatoremail = "yourmail@gmail.com" lastmodifierdisplayname = "Yourname" lastmodifieremail = "yourmail@gmail.com" tags = ["tag1","tag2"] weight = 10 pre ="<i class='fa fa-edit' ></i> " +++
- title:左のmenubarに出てくる名前
- weight:字の大きさ?
titleを変更してmenuバーの表記を変えることだけ覚えていればとりあえずは良さそうです。
数式を入力可能にする
そのままではMathJaxが有効になっていないので,数式が打てません。 以下の記述をページに読み込んでmathjaxを使えるようにします。
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
ヘッタやフッタのテンプレートに潜り込ませるのが良いらしいのでlayout/partial/menu-footer.html
に追加しました。
この時点でひとまずサイトとしては動きますが気力があれば続きます。
微小回転に関する覚書:微小回転行列近似 VS クォータニオン
メモです。余裕のあるときに後でリファインします。
前提
座標系が角速度 で回転しているとする。
微小回転行列
本来三次元回転SO3は非可換であるが,微小回転を考えればこれを可換にすることができる。1
先程の角速度で微小回転行列というものが考えられており, とすれば以下のような回転行列で表せる。
これは以下に示すcross product表記を用いれば,と表すことができる。
クォータニオンによる角速度の積分
クォータニオン便利計算ノートによればクォータニオンによる積分は以下の通り。
先程のcross productを用いて表すなら,
$$ \dot{q}=\frac{1}{2} \begin{pmatrix} 0 & -\omega^\top\\ \omega & \omega_{\times} \end{pmatrix} q $$
と書いたほうがスッキリするだろう。
MATLABで比較プログラム
P.I.corke先生のRobotics Tool boxを使用。課金できる方は自前でToolboxを買うと良い。 なお,2019年以降に東大に在籍している学生は無料で全ライセンス使えるのでぜひ活用するとよい。
昔は全機能使えたと思ったのですが今入れたらいくつかの機能が削除されていたような???
問題設定①
最初の角度をオール0とする。同次変換行列を作っておく。
orig_eul = [0,0,0]' orig_tr = rpy2tr(orig_eul')
omegaを適当に定め,10ms積分するとする。
omega = [0.1,0.2,0.3]; dt = 0.01;
微小回転行列の作成
cross productを計算するskewという関数を用いて簡単に作成可能。
R1=skew(omega*dt)+eye(3)
TR1 =r2t(R1)*orig_tr TR1 = 1.0000 -0.0030 0.0020 0 0.0030 1.0000 -0.0010 0 -0.0020 0.0010 1.0000 0 0 0 0 1.0000
クォータニオンの計算
回転操作などをクォータニオンに変換すればよいが,新しく落としたToolbox:10.3.1はクォータニオンにまつわる変換がいくつか取り去られていた。 しょうがないので自分で書いた。
orig_q = eul2quat_self(orig_eul) P2q = integratequat(orig_q,omega*dt) TR2 = rpy2tr(quat2eul_self(P2q)) TR2 = 1.0000 -0.0030 0.0020 0 0.0030 1.0000 -0.0010 0 -0.0020 0.0010 1.0000 0 0 0 0 1.0000
問題設定②
最初の角度を適当に決める。ロールピッチヨーのオイラー角を適当に決める。うん。後でやります。
orig_eul = rand(3,1) orig_eul = 0.9134 0.6324 0.0975
TR1 = 0.8014 0.4054 0.4398 0 0.0816 0.6543 -0.7518 0 -0.5926 0.6384 0.4913 0 0 0 0 1.0000
TR2 = 0.8014 0.4054 0.4398 0 0.0816 0.6543 -0.7518 0 -0.5926 0.6384 0.4913 0 0 0 0 1.0000
結果がほぼ同じになるのは違和感がある。前者は1次近似で後者は変換部を除けば理想的な計算結果になると思っていたので。 誤差は1e-5のオーダ。
TR1-TR2 = 1.0e-05 * 0.7539 -0.0609 0.1604 0 0.1528 0.0783 -0.5804 0 -0.0849 0.0234 0.3760 0 0 0 0 0
自前関数
こちらの記述を大部分引用。
参考文献
あとで♡
MATLAB symbolic mathを使って煩雑な手計算を自動化する
座標変換などで手計算をあまりしたくないのでsymsをうまく使ってこれを回避する方法をメモします。
Image Jacobianの導出
カメラの座標系から見て位置(X,Y,Z)にある物体を考えます。焦点距離fとすると,以下の関係が成り立ちます[1]。
カメラが6軸の速度・加速度を持つときに画像内の点がどのように動くのか,その関係性を表す行列を導出します。
時間変化する変数を定義
時間tに関する関数として位置の各変数を定義できます。[2]の橋本先生の論文を例にとって見てみましょう。
syms t X(t) Y(t) Z(t) image_p = [X(t); Y(t)]/Z(t)
計算結果:
image_p = (X(t))/Z(t) (Y(t))/Z(t)
時間で偏微分
tで偏微分します。
diff_p = diff(image_p,t)
こうなります。
diff_p = diff(X(t), t)/Z(t) - (X(t)*diff(Z(t), t))/Z(t)^2 diff(Y(t), t)/Z(t) - (Y(t)*diff(Z(t), t))/Z(t)^2
特定の数式の代入による式整理
先程の式のXdotなどをvxに変換していくために以下の数式を代入します。
subs(対象式, 代入対象, 代入する式)
という構文を用いて代入。
diff(X(t), t)という式を消していきます。
syms vx vy vz wx wy wz before={diff(X(t), t),diff(Y(t), t),diff(Z(t), t)}; after = { -vx-wy*Z(t)+wz*Y(t), -vy-wz*X(t)+wx*Z(t), -vz-wx*Y(t)+wy*X(t)}; diff_p_XYZ = subs(diff_p,before,after)
結果,以下のようになります。
(X(t)*(vz - wy*X(t) + wx*Y(t)))/Z(t)^2 - (vx - wz*Y(t) + wy*Z(t))/Z(t) (Y(t)*(vz - wy*X(t) + wx*Y(t)))/Z(t)^2 - (vy + wz*X(t) - wx*Z(t))/Z(t)
小手先の代入テク
ただ,元の式展開では,[x,y]=[X/Z,Y/Z] の関係を用いてX,Yの変数を消去しています。これもsubsで計算可能です。
syms x y before={X(t), Y(t)}; after = { x*Z(t), y*Z(t) }; diff_p_xy = subs(diff_p_XYZ ,before,after)
(x*(vz - wy*x*Z(t) + wx*y*Z(t)))/Z(t) - (vx + wy*Z(t) - wz*y*Z(t))/Z(t) (y*(vz - wy*x*Z(t) + wx*y*Z(t)))/Z(t) - (vy - wx*Z(t) + wz*x*Z(t))/Z(t)
上では明らかにZで約分できるにもかかわらず約分されていないのが気になります。
小手先テクですがsimplify
関数を適用することで整理が可能です。
diff_p_xy = simplify(subs(diff_p_XYZ ,before,after)) diff_p_xy = wz*y - vx/Z(t) - wy - wy*x^2 + (vz*x)/Z(t) + wx*x*y wx - vy/Z(t) - wz*x + wx*y^2 + (vz*y)/Z(t) - wy*x*y
多項式から 行列形式への変形
最終的には画像内の点の動きd[u,v]/dtとカメラの動きの対応を以下のように行列形式で扱います。その時の変換行列が画像ヤコビ行列というやつです。
先程求めたのは多項式ですので,equationToMatrix
という関数を使います。
% 便宜上の数式変換なのでぶっちゃけ右辺は何でも良い eqns = [diff_p_xy == [0;0]]; % 抜き出す変数 vars = [vx vy vz wx wy wz]; % 係数行列(ヤコビ行列の抽出) J = equationsToMatrix(eqns,vars)
結果がこちら。計算ミスなく簡単に導出できますね。
J = [ -1/Z(t), 0, x/Z(t), x*y, - x^2 - 1, y] [ 0, -1/Z(t), y/Z(t), y^2 + 1, -x*y, -x]
まとめ
このように式をこねくり回すのもMATLABに任せれば良いと言いたいところですが,結局計算ミスの代わりにプログラムのデバッグが必要になります。 特に添字などの間違いは見逃しやすいのでうまいこと定義した数式を見やすくするなどしてデバッグのコストを下げたいところです。
symbolicを直接latexに変換するといったプラグインも開発されてたりするそうなのでうまいこと活用して楽ができればいいですね。
prettyコマンドの活用
数式を少し見やすくするためのコマンドが一応用意されています。
これ本当に見やすいかな???
>> pretty(diff_p) / d d \ | -- X(t) X(t) -- Z(t) | | dt dt | | ------- - ------------ | | Z(t) 2 | | Z(t) | | | | d d | | -- Y(t) Y(t) -- Z(t) | | dt dt | | ------- - ------------ | | Z(t) 2 | \ Z(t) /
参考文献
[1] P.I.Corke先生のYotube解説より抜粋 url
[2] 橋本先生の「Visual Servo - IV - Feature Based Visualservo(ビジュアルサーボ:特徴ベースビジュアルサーボ)」より抜粋