粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

Barrierを用いてUbuntuとWindows間でマウス・キーボード・クリップボード共有

前回の続きです。これはかなり嬉しい。

ossyaritoori.hatenablog.com

Barrier with Ubuntu16.04

前回の記事ではBarrierでWindowsのPC同士でマウスとキーボードを共有しましたが,今度はWindowsUbuntu間で試しました。 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にも期待が持てますね。

symless.com

とはいえ安心=課金

フリーソフトマニアが言うのもなんですが,安心は金で買うべきです。 Flow対応のキーボードやマウスをLogicoolから買えばもっと楽にファイル共有なども行えるでしょう。


というわけで広告を貼ります。これ別に私にお金はいるわけではないですけどね。

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()

f:id:ossyaritoori:20191001093233p:plain
結果。 Legendは変な位置に行くならnortheastとかのほうがよいかも。

写真と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

qiita.com

Barrierを用いて複数のPC間でマウス・キーボード共有を行う(2019年秋Ver)

複数PCでのマウス・キーボード共有

複数のPCで作業する時に,マウスやキーボードをシームレスに共有するという思想が世の中には存在します。

Logicool社のFlowなんかもそうです。

www.youtube.com

FLowの場合,対応したマウスやキーボード機器を整える必要があり,またWindows間のみでの対応になります。


一方で,ソフトウェアのみをインストールすることで同様の機能を実現できるSynergyというソフトが存在します。 元がオープンソースなので古いverやソースコードは無料で手に入ったようですが,2019年現在実行ソフトを入れようとすると$29~39かかります(買い切り)。

SynergyではFlowでは対応していないWindowsLinux間での連携特別なハードウェアなしに実現可能な点が利点と言えます。 一方で,Linuxディストリビューションが多岐にわたり,完全な動作保証がしづらい点やLogicoolという大企業と比較すると購入後のサポート・保証にやや不安があります。 価格も買い切りとはいえ安いとは少し言いづらいので導入には少し気が引けます。


ということでSynergyから分岐したフリー版SynergyともいえるBarrierというソフトをお試しで浸かってみた記録をここに記します。

下記のサイトが大変参考になりました。 gihyo.jp

ざっくりBarrierの動作紹介

BarrierはWindowsLinux共に使用可能と説明があります。手持ちのWindows10,Ubuntu16.04を用いて試験をしました。

Barrierをインストールした後に起動すると,サーバーかクライアントかを選択します。メインでマウスとキーボードを使う側をサーバーとし,サーバー側PCから操作したいPCをクライアントと設定します

  • PCどうし接続するには同じWifi(回線)上に居なければならない(多分pingが通ればOK)
  • 設定した画面端にマウスを動かすと別のPC上でのマウスとキーボード操作に切り替わる
  • Windows間ではクリップボードの共有が可能(Linuxではまだとのこと)
  • ドラッグ&ドロップでファイル移動ができるとあるが動作を確認できず
  • Ubuntu16はそもそも非対応

Barrier試用結果まとめ

忙しい人用。

  • 無料でマウス&キーボード共有が可能
  • Windows間ならクリップボードも共有
  • Ubuntu16では正常に動作できなかった


インストールから設定まで

基本的にWindows版前提で話を進めていきます。Ubuntu18以降はgyhyo様のサイトに詳しく載っているので割愛します。

ソフトの入手・インストール

オープンソースなのでgitレポジトリから入手してコンパイルすることも可能ですが,実行ファイル形式でDLした方が手間が無いです。

f:id:ossyaritoori:20190926205847p:plain
このときはv2.3.1を使いました。
ダウンロード後管理者権限で実行すればすぐにインストール画面に進みます。

まともな日本語がきちんと整備されているので安心して言語選択で日本語を選べます。

インストール後,Bonjourというソフトをインストールするか聞かれます(オートコンフィグの為らしい)がなんとなくNoを押しました。 おそらくClient側からの自動接続機能用でしょうが,IPアドレスを手打ちすればいい話と思ったので

サーバー・クライアント共通の設定

共通の設定の設定から入ります。

f:id:ossyaritoori:20190926150439p:plain
Barrierの起動後に現れる画面

  • 設定を開く

「Barrier」→「Change Settings」或いは「F4」キーを押して設定を開きます。

f:id:ossyaritoori:20190926150544p:plain
この画面が現れます

  1. スクリーン名をわかりやすいものに変更(後の配置時に使います。)
  2. Enable SSLのチェックを外す。

「OK」を押して終了です。

注)接続がうまく行かないときは,ポート番号を変えるとうまくいくなどの報告があるのでポート番号をキチンと確認しておきましょう。

サーバーの設定

続いて,サーバー側の設定です。

  • サーバーの設定を開く

「サーバーを設定」から開きます。以下のような画面が出てきます。「画面とリンク」でPC同士の画面の配置,「サーバーの詳細な設定」のタブでその他設定を調整します。

f:id:ossyaritoori:20190926183200p:plain
PCを三台配置してみた。の図。

  • PCの画面の配置

上の図にもあるように最大25個の画面を配置するスペースがあります。25個も配置できるのかはよく知りませんが。PCはドラッグアンドドロップで配置を変更できる上,右上から追加,左上のアイコンから削除ができます。


  • 詳細な設定

詳細な設定を押すと以下の画面が現れます。Linux版はファイル転送やクリップボードのシェアが未実装なのでチェックを外すようですが,Windows版では特にいじらなくても平気です。

f:id:ossyaritoori:20190926202233p:plain

以上の設定の後に「開始」ないし「更新」を押すと設定が保存されプログラムがスタートします。

クライアント側からの操作

クライアント側からはサーバーのIPアドレスを入力すればOKです。ローカルな通信をしていますが,これってグローバルなIPでやってもできるんでしょうかね?

f:id:ossyaritoori:20190926202643p:plain

外部ディスプレイとの競合チェック

ここまでやって気になるのは外部ディスプレイ接続との競合です。

知見1:外部ディスプレイの先にアクセスできない

例えば右側にBarrierでディスプレイを設定した後に,外部ディスプレイでメインPCのディスプレイを右に拡張した場合,Barrierの移動が無効化されるようです。

f:id:ossyaritoori:20190926183115p:plain
外部ディスプレイとの相性① 外部ディスプレイの先には配置できないっぽい?

逆に左側でも同様でした。

f:id:ossyaritoori:20190926203652p:plain
左側に外部のディスプレイを設置するとその先にはアクセスできない。

知見2:なんか右方向は苦手

拡張ディスプレイの向きをBarrierの配置と干渉しないようにした結果,何故か右方向のディスプレイに移動できないことを発見しました。 なお,この構成だと拡張したディスプレイの左側からもBarrierの左でディスプレイにアクセスできます

f:id:ossyaritoori:20190926203345p:plain
上に拡張した場合,何故か右側にはアクセスできない。

下においた場合も同様です。

知見3:Barrier接続面の位置をあわせること

先程の試験で拡張したディスプレイからもBarrierのディスプレイにアクセスできることを確認しましたが,以下のように横のアライメントが合わないと拡張したディスプレイ側からは移動できなくなります。 マウスポインタの座標かなんかを使ってスイッチしているからでしょうか。

f:id:ossyaritoori:20190926204244p:plain
メインディスプレイの左端から左にはアクセスできる。

拡張ディスプレイの解像度の設定をいじっている人は気をつけるべきと思います。

なにやってんだろ。。。

おまけ

最適構成例?

先程のまとめで左側に配置したほうが安定していたので,左に拡張していったほうがやりやすいっぽいです。 皆さん右を向いて作業しましょう。

f:id:ossyaritoori:20190926204942p:plain
左に拡張していくのが最も安牌っぽい?

コピペの限界について

Windowsならクリップボードの内容を保持できるとのことですが,ファイルそのもののコピペはできません。 これはWindowsではファイルコピペ時にはデータのアドレスを操作しているからです。

ファイルの移動で、コピーより切り取りの方が速い理由 - t-hom’s diary

その代わり,スクリーンショットなどの画像データに関してはきちんとコピペを行うことが出きます。実際この記事のいくつかのスクショはBarrier経由で引っ張ってきています。

ファイル移動機能が使えない?

使えたらさぞかし便利なのでしょうが私の環境では使えませんでした。Issueもいくつか立っているので有名な問題のようです。

github.com

解決したら教えて。

まとめ

Barrierは設定が簡単な割には面白い使い方ができるソフトだと思います。 ファイル送信のバグが取れたら誰か連絡ください。

日本一と言われるウェルビーのサウナに行ってきた

以前,サウナと水風呂のサイクルを繰り返して俗に「整う」というトランス状態になれるという話を聞いてから何度か挑戦していますがまだその境地には達せていません。 私も整いたいですね。↓ こんな感じになるそうな。(出典:サ道~マンガで読むサウナ道~)


https://sakagami3.com/wp-content/uploads/2018/02/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2018-02-13-19.48.01.png

ウェルビー栄:店舗紹介

そんな中,ちょうど出張で名古屋に来ていた際に友人に『日本一』のサウナがあると教えられて立ち寄ったのがこの「ウェルビー栄」です。

ウェルビーのグループは本格的なサウナに力を入れているようで福岡などにも店舗があるそうですね。


場所は栄駅から徒歩10分程度で,同名のカプセルホテルと一緒に営業しているようです。(なお利用者は男性のみ)

www.wellbe.co.jp

料金

筆者はサウナ初心者なので界隈と比べたコスパ議論は控えますが,感覚的にはサウナの料金は結構高めです。

f:id:ossyaritoori:20190912211129p:plain
2019年の夏の料金表。学割の記述はないが受付で聞けば教えてくれる。

1時間コースもありますがサウナを楽しむのに1時間は正直少し短いので数百円を足して1860円食事付きの2時間コースが良いと思います。 なお,記載がないですが学割だと1540円で24時までいれるので学生証がある方は学割プランが良いと思います。

値段が張る代わりに,館内はきれいで無料の貸しタオルや飲料,ボディケアのアメニティが充実しているので私のように唐突に手ぶらで訪れても問題ありません。

設備

入り口以降はカプセルホテルによくある縦長ロッカーに荷物を預けて館内着に着替えます。 風呂場洗面台の他に,

  • マッサージ・垢すり
  • 食堂
  • 給水所
  • 休憩スペース

があります。


休憩スペースは広い上にごろ寝用のシートが快適で,セキュリティ上の問題がなければそのまま寝ていたいくらいです。 できることなら長期滞在で利用したいものです。




風呂場レビュー

風呂場は大まかに

  • 風呂場 2箇所
  • 水風呂
  • 高温サウナ
  • 森のサウナ
  • 北極サウナ
  • 休憩スペース

があります。

日帰り出張だったので時間に追われており,普通のお風呂には一切入らなかったのであしからず。

水風呂

入ってい左のサウナ①の近くに丸い桶状の水風呂があります。

f:id:ossyaritoori:20190912221622p:plain
見た目より深いです


ソムリエいわく温度は15,6度ということでこれは業界でも高水準の冷たさ(?)のようです。

水風呂の底が深めになっており,中腰くらいの体制で全身たっぷり水につかれる点が良かったです。 サウナトランスはわかりませんが酸欠のようなクラクラした感じを味わうなら手っ取り早く後頭部を冷やすと良いと今までの実験で判明しているのでいっそ潜るくらいでも良いでしょう。


「サウナトランス」のセルフ人体実験記録はいずれ公開するとして,楽しみ方についてサウナ名人のアドバイスが待たれるところです。

高温サウナ

入って右手にあるサウナその①。高温とありますが90度くらいでした。

f:id:ossyaritoori:20190912222343p:plain
手前が瞑想?ゾーン。奥がテレビ&寝サウナゾーンです。

温度は90度程度で部屋が広いため暑さはそこまででもありません。 部屋の片側はテレビと時計が近く,寝転がる為の斜めのスペースがあります。…寝転がるスペースがあります。 寝転がるサウナは長居しやすく,とても良いです。

寝サウナ。オススメです。

入り口を挟んで反対側は火元にやや近く,波の音が流れており静かに楽しみたい人用のスペースになっているようです。 私が行った時は瞑想をしている人がいました。

端的に良かった点をまとめると,

  • アロマの香りが強くロウリュの無いときも良い香りが漂っている
  • 寝転がるスペースが快適
  • 熱波師やアロマ含めてロウリュのクォリティが高い

となります。

19時に受けたロウリュですが,熱波師の扇ぎ方が非常に上手でサウナ上空の空気を打ち下ろされるので強い熱量を感じることができます。 最高点からバシっと打ち下ろす感じはタオルでラケット競技の素振りをするのに少し近い気がします。

バド,テニスプレーヤーは熱波師の素養がある説を唱えておきます。

ロウリュ中のアロマは当然良いのですが,ロウリュ後もアロマの香りがずっと続くのでアロマが好きな人にはポイントが高いと思われます。

森のサウナ

サウナその②。奥にあるなにやらムーディな空間に配置されています。

f:id:ossyaritoori:20190912222938p:plain
実際はもっと暗いです。手前には寝サウナスペースがあります。


入り口近くの木の棚にはサウナハットや腰布などが用意されていて,空間演出のこだわりが感じられます。

部屋が小ぶりで天井も近いため体感温度は先程のサウナよりも更に高いです。 また,ヒノキの香りが非常に強く森感をよく醸し出しています。


https://omocoro.jp/assets/uploads/15439855821jr1y.jpg

オモコロより画像引用。分子ガストロノミーもやってみたいですね。

例のごとく寝転がるスペースがある他,本格的な白樺の枝がありました。(ヴィヒタというらしい)

f:id:ossyaritoori:20190912223456p:plain
水に浸かっているヴィヒタ。使い方がよくわからんので適当にバシバシしてきました。

これで体をバシバシ叩くとロウリュにも劣らない熱量と独特の刺激が加わり気分良く体を温められます。 正直サウナ入っているときって暇なので手持ち無沙汰で一人でずっとバシバシしてました。
私も瞑想,覚えようかな。

アイスサウナ~湖のほとり~

本場フィンランドではサウナ後に氷点下の湖にダイブするそうです。アホかな?

f:id:ossyaritoori:20190912223240p:plain
例えるなら冷凍庫。手すりも凍ってます。

ということで森のサウナの直ぐ側にはこのような雰囲気のアイスサウナがあります。 本格派ということで中の手すりなども凍っているくらい冷たい冷凍庫のような空間です。というか冷凍庫です。

入った感想はあっこれはアカンやつやです。 水掛けの後10秒強体を沈めただけで手足がしびれてきてしまい本能的に飛び出してしまいました。確か出川○朗みたいなリアクションをしながら部屋を出たと思います。ヤバイよ~~。


おそらく修行が足りないせいだと思うのでみなさんも死なない程度にチャレンジしてくると良いと思います。冬の海で魚獲ってた濱口さんすげぇっす。

休憩スペース

一番奥には休憩スペースがあり,乾いたタオルで少し体を拭きながら休憩できます。

f:id:ossyaritoori:20190912224730p:plain
これまたムーディな休憩スペース。小鳥のさえずりがどこからか流れてきます。

サウナで気持ちよくなるのに楽な姿勢になるのは必要なシークェンスだと思うのでこれは非常にありがたいです。 なお,お風呂を出てもラウンジの休憩スペースがあるのでそちらでゆったりするのも良いでしょう。

サウナ&水風呂でクラクラした後,横になると気持ちよさからそのまま眠ってしまいそうになりますが今回は帰りの新幹線の時間が気になりすぎて寝れませんでした。 次は宿泊利用します…。

総評

宿泊利用で入り浸るべき。 あと誰かサウナトランスのコツ教えて下さい。

参考文献

名古屋のサウナの最高峰ウェルビー栄を初体験したよ!

Netlify CMS+Hugo+Githubで個人用のメモサイトを管理する

完成度は30%というところでしょうか。

目的

2019年夏現在の要望としては個人用の雑記やメモなどの文章を保管,管理できるようにしたいというのがあります。 より具体的にやりたいことを書いていくと,

  • ローカル環境(オフライン)で記事を編集,閲覧できる
  • 記事の検索などの機能が利用できる
  • Markdownで楽に書く
  • 初期設定が楽だと良い
  • (将来的には独自ドメインで運営?)

と言ったところです。

論文感想や教科書読んだ時のちょっとしたメモ,プログラミングのメモなど小ネタ等を書いてまとめるなくさないオンラインノートがほしいといったところでしょうか。

候補比較

すでにいくつか候補が上がっており,他の方も色々と考察してくれています。

各自いろんな基準を設けているようですが,以下の方の記述に非常に共感しました。

メモアプリを本気で選んでみた - Qiita

はてなブログやQiitaなどのブログサービス

  • 作成も管理も楽。
  • ローカル環境に記事が残らないのがややネック

Google Keep

  • Googleアカウントに紐ついたメモ帳。
  • すぐ使える。タグやアーカイブ,検索機能もある。
  • テキストしか書けず,高級な表現ができない。

スマホなどの小型端末から簡易的にアクセスするなら断然こっち

Dropbox paper

  • Wordに似た書き味だが,Markdownと制御文字が被っていてかなり良い感じ
  • 2019年8月現在 Dropboxとストレージが別になっているのもGood
  • この手のサービスは改悪されたりするので正直怖い面もある
  • ローカルからファイルに直接アクセスできない?

f:id:ossyaritoori:20190806220912p:plain
文章はこの様にきれいに書ける

正直GoogleDocumentもあまりうまく使えていないので二の舞になりそうではある。

Inkdrop

評判が良いが有料サービスなので整理が苦手な自分的には避けたい。StackEditに定期課金した500円がどうなったのか把握してないくらいなので… ハッカー向けノートアプリ「Inkdrop」は最高に使いやすいメモ帳ツールだった | Web Design Trends

メモ環境考察まとめ

  • 記事を公開してFBが欲しいならはてなかQiita
  • モバイル環境と連携した細かなメモならGoogleKeep
  • DropboxPaper,GoogleDocumentは良いところもあるがハマる使い所がわからない

手元にない欠陥を埋めるならば,ローカルに記事を保管しつつオンラインで閲覧,編集ができるサイト運営がしたい。

Netlify CMSで個人メモ環境を作る①

正直良くわかっていないのでざっくりと書くと,

  • ローカルでリポジトリ上のファイルを作成・編集し
  • Githubでバージョンを管理
  • Netlifyというサービスで静的サイトへと変換

という事になっているみたいです。

必要な準備

巷ではHugoという静的サイトをコンパイルする?ソフトを入れるという説明が多いですが,Netlify上で動かす分には自前で用意しなくても大丈夫です。

  • Github等のアカウントを作成(というか基本操作がわかっている前提)
  • Netlifyのアカウントを作成(Github等との連携)

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というテーマも良さそうです。

github.com

このリポジトリの内容を自分のリポジトリにforkあるいはコピーします。一応ライセンス条項的には違反してないですがこの辺のマナーはよくわかりませんので詳しい人が居たらご教授願います。

Netlifyでホスティング

このままだとただのGithubリポジトリになるので,Netlifyのページに行って,New Site from Gitを押して先程編集したリポジトリを選択します。 f:id:ossyaritoori:20190806223745p:plain

その後しばらくしたら見れるようになっているはずです。

f:id:ossyaritoori:20190806223919p:plain
右上の顔になっている辺りをClickするかURLを入力すればOK

その後,作成されたブログのURLが表示されるので,

/をつけることを忘れずに。

詳細は以下のページを参考にすると良いでしょう。今回やってみた所ビルドのコマンド等は勝手に決めてくれました。 Hugoで作成したページをNetlifyでホスティングする - Miki's Blog

Netlify CMSを導入

このままだとURLの下に/adminを入れても管理画面に飛びません。次にまた同じ方の記事をなぞってやっていきます。

gomagaru.hatenablog.com

上の記事の

  • Github連携
  • Netlify連携
  • adminフォルダ作成

を済ませます。

static/admin/config.ymlの編集

config.ymlは今後もいじりそうなので個別に項目を設けます。

テーマに沿った編集

ここからは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に追加しました。

maku77.github.io

この時点でひとまずサイトとしては動きますが気力があれば続きます。

微小回転に関する覚書:微小回転行列近似 VS クォータニオン

メモです。余裕のあるときに後でリファインします。

前提

座標系が角速度  \omega = (r,p,y)^\topで回転しているとする。

微小回転行列

本来三次元回転SO3は非可換であるが,微小回転を考えればこれを可換にすることができる。1

先程の角速度で微小回転行列というものが考えられており,  \omega \Delta t = (\alpha,\beta,\gamma)^\top とすれば以下のような回転行列で表せる。

f:id:ossyaritoori:20190719013841p:plain

これは以下に示すcross product表記を用いれば, R= \omega\Delta t_{ \times }+eyeと表すことができる。

f:id:ossyaritoori:20190719014129p:plain
wikipediaより引用:歪対称行列

クォータニオンによる角速度の積分

クォータニオン便利計算ノートによればクォータニオンによる積分は以下の通り。

f:id:ossyaritoori:20190719014911p:plain
一番下の式には1/2が入っていないと思う。見落としがなければ。

先程の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年以降に東大に在籍している学生は無料で全ライセンス使えるのでぜひ活用するとよい。

petercorke.com

昔は全機能使えたと思ったのですが今入れたらいくつかの機能が削除されていたような???

問題設定①

最初の角度をオール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]。

f:id:ossyaritoori:20190712145950p:plain
カメラの撮像幾何[1]

カメラが6軸の速度・加速度を持つときに画像内の点がどのように動くのか,その関係性を表す行列を導出します。

f:id:ossyaritoori:20190712150807p:plain
何故かうさぎをアクチュエータに使うPeter先生。かわいい。

時間変化する変数を定義

時間tに関する関数として位置の各変数を定義できます。[2]の橋本先生の論文を例にとって見てみましょう。

f:id:ossyaritoori:20190712151433p:plain
ピンホールカメラモデルによる撮像の式(ただしf=1として省略)

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で偏微分します。

f:id:ossyaritoori:20190712151618p:plain
商の微分

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に変換していくために以下の数式を代入します。

f:id:ossyaritoori:20190712151743p:plain
pdot=-v+w×p から計算

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

f:id:ossyaritoori:20190712153325p:plain
展開結果

多項式から 行列形式への変形

最終的には画像内の点の動きd[u,v]/dtとカメラの動きの対応を以下のように行列形式で扱います。その時の変換行列が画像ヤコビ行列というやつです。

f:id:ossyaritoori:20190712153526p:plain
画像ヤコビ行列

先程求めたのは多項式ですので,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(ビジュアルサーボ:特徴ベースビジュアルサーボ)」より抜粋