SimulinkからArduinoの出力ピンを制御する

MATLAB/Simulink 2013aあたりからArduinoの入出力ピンを制御することができるらしい。
相変わらずの異常な拡張性を実現するMathworksすごい。

使い方としては、

  1. Arduino UNOをWindowsへ接続
  2. MATLABでアドオンインストール
  3. Simulinkモデル上でArduinoの制御モデル作成
    • ライブラリブラウザでSimulink Support Package for Arduino Hardwareの
      各種ライブラリブロックを探せる
  4. 実行

というステップを経ていく。

上記の3.のステップで配置できるライブラリブロックとしては以下のものが標準部品として用意されている。 f:id:yusuke_ujitoko:20190720212823p:plain

上記の4.のステップはSimulinkのシミュレーション中にArduinoも同期的に実行できるのかなと思ったが、そうではなくてSimulinkモデルからArduinoで実行できるコードを生成しそれを実行してくれるだけだった。

注意が必要なのは、MATLAB起動後にArduinoを再接続すると、 Simulink内でArduinoが認識なされなくなること。 そのときにはSimulinkの"モデルコンフィグレーションパラメータ"で"ハードウェア実行"タブのところでCOMポート等の再設定することで認識させられる。

一番単純なサンプルは以下のようなもので、 指定したデジタル出力ピンにパルスを出力することを確認した。

f:id:yusuke_ujitoko:20190720213633p:plain

M系列信号を生成してみる

M系列信号(Maximum-length linear shift register sequence)は2値の周期的な信号であり,
1周期内では乱数として非常によい性質を持っているものらしい.
例えば,

  • 0と1の発生確率がほぼ同じ
  • 自己相関のピークが1周期に1度だけある
  • nビットのM系列の1周期中の連続するnビットはユニーク

といった性質がある.
そのM系列信号をpythonで可視化してみる。

import numpy as np
from numpy.fft import fft, ifft, fftshift, fftfreq
from scipy.signal import max_len_seq
import matplotlib.pyplot as plt
%inline matplotlib

def gen_mls(n):
    mls = max_len_seq(n)[0]
    print(mls)
    return mls

def main():
    seq = gen_mls(7) # MLS生成
    spec = fft(seq) # フーリエ変換
    acorr = np.correlate(seq, seq, 'full') # 自己相関

f:id:yusuke_ujitoko:20190716234815p:plain

線形システムの同定入力に用いる際のパラメータ選定方法

同定入力に用いるM系列信号をn個のシフトレジスタで生成するとすると、nをまず選定しなければならない。 nが大きいからと言って必ずしも同定制度が向上するわけではない。 これは、M系列は1周期のすべてのデータを利用してはじめて擬似白色信号となるためである。 したがって、同定実験の長さ[tex:T{exp}]はM系列の1周期の長さ以上である必要がある。 一般に、 [tex:T{exp}]は1~2周期に選ばれることが多い。

IEEE World Haptics Conference 2019にて素材の静止摩擦係数の知覚を視触覚間相互作用により変化させる手法を発表しました

f:id:yusuke_ujitoko:20190713224819j:plain

まとめ

  • 静止摩擦感を提示するためには,従来は専用ハードウェアを追加しなければならなかった
  • 本研究は視触覚間相互作用により,素材表面の静止摩擦を生起・変化させることを提案.
  • 心理物理実験により生起確率とその強度を検証.
  • IEEE World Haptics Conference 2019にて発表. arXivにも掲載

f:id:yusuke_ujitoko:20190501014503p:plain

背景だけ説明

振動触覚提示は,何かものに触れたときの表面の粗さや硬さ等の質感を表現する代表的なやり方であり,長らく研究されている. 近年では振動提示機能付きのスマートフォンタブレット等の廉価なモバイル端末が登場しつつあることもあり, これらのデバイスで振動による素材の質感提示を表現として取り入れたアプリケーションの登場が期待される.

そのような背景のもとで,次に課題になると考えているのが (1) 質感提示のための振動設計の生産性を向上することと (2)振動による質感表現の限界を超越することである.
(1) に対する解決策としてデザイナー向けの振動設計を自動化するツールを提案してきた(EuroHaptics2018での発表, SIGGRAPH Asia2018でのデモ).

一方の(2) に関しては,これまで質感の中の粗さの次元に関して視触覚間相互作用で粗さ知覚をソフト的に変化させる手法を提案してきた.
引き続き摩擦感に関する手法を提案したというのが今回にあたる.

内容の詳細は論文をご参照ください.

f:id:yusuke_ujitoko:20190713072403j:plain

触覚知覚・提示技術に関するサーベイ論文

今後ますます需要が伸びそうな触覚関係の知見を勉強するにあたって,
個々の論文を読むよりもその道の専門家の書いたまとめを読んだ方が近道である.

自分も最近調べ方が変わったのか,サーベイ論文を読む機会が増えてきた.
そのたびにどこにあったか調べ直すのも面倒なので,自分のためや他の方のために一応まとめておくことにする.
(今後も追記予定)

サーベイ論文まとめ

タイトル 著者 備考
Annual Review of Control, Robotics, and Autonomous Systems Haptics: The Present and Future of Artificial Touch Sensations H.Culbertson et al. 分量軽めだが触覚提示技術の広範囲をカバーしている.一番最初に読むならこれ.Culbertson氏はこのとき学生?最近出版(2018)
Haptic perception: A tutorial S.J.Lederman, R.L.Klatzky 触知覚のサーベイ.著者の研究の紹介多め.
Wearable Haptic Systems for the Fingertip and the Hand: Taxonomy, Review, and Perspectives P.Claudio et al ウェアラブルな触覚提示デバイスサーベイ.最近出版(2017)
A survey on haptic technologies for mobile augmented reality C.Bermejo and P.Hui 触覚提示技術全般のサーベイ.最近出版(2017)

論文からたどる方法

IEEE Transactions on Haptics等の触覚専門の論文誌から辿るか,
国際会議から辿るのが代表的だと思う.
国際会議は3種類代表的な国際会議がある.
以下の3つなのだが,2年ごとに開催されるので2年に3回あることになる.

  • IEEE Haptics Symposium
  • EuroHaptics
  • IEEE WorldHapticsConference

情報処理学会のtexテンプレートでdvipdfmxエラーになった際の対処法

情報処理学会texテンプレートで,

\documentclass[submit]{ipsj}

トランザクション向けに変更すると以下のようなエラーを吐く.

dvipdfmx:warning: Could not locate a virtual/physical font for TFM "futogo-b".
dvipdfmx:warning: >> This font is mapped to a physical font "FutoGoB101-Bold".
dvipdfmx:warning: >> Please check if kpathsea library can find this font: FutoGoB101-Bold
dvipdfmx:fatal: Cannot proceed without .vf or "physical" font for PDF output...

この様になった際には,ipsj.clsの中で,
1227行目を

\fontsize{18\JQ}{0\h}\usefont{JY1}{fgb}{m}{n}%

から

\fontsize{18\JQ}{0\h}\usefont{JY1}{gt}{m}{n}%

に変更し,

2764行目を

\usefont{JY1}{fmb}{m}{n}% FutoMin

から

%  \usefont{JY1}{fmb}{m}{n}% FutoMin

に変更する