hooked on mechatronics

いつまで経っても初心者

DeepLを大学の図書館で使っていたら「無料でご利用いただける上限に達しました」

背景

大学の図書館で英語のレポートを書いている時に,DeepLを使おうとすると,
全然使ってないのにも関わらず「無料でご利用いただける上限に達しました」との表示が出ました.

原因

おそらく「個人が何回使ったか」ではなく,「その施設のWiFiに接続している人が合計で何回使ったか」という基準になってしまっているようです(推測).

解決策

私の場合は諦めて以下の手段を取っています.

参考になれば幸いです.

数式を含む英文を翻訳するツール作った

作ったもの

DeEqL --- 数式を含む英文を翻訳するツール

使い方

  1. DeepL Free Planに登録し,APIキーを取得する.Mathpixをインストールする
  2. Mathpixで英文サイト・論文などの翻訳したい箇所を読み取り,LaTeXコードを得る
  3. 作ったサイトAPIキーを入力し,LaTeXコードをコピペする
  4. 翻訳実行を押す

使用例

対象とする英文

WikipediaOrdinary differential equation常微分方程式)の中の,特に数式と英語が混み合っている部分を例にとって翻訳してみます.
あなたはこれをすぐに読むことができますか?

Ordinary differential equation -> Definitions -> Solutions

そのままDeepLで翻訳してみる

試しにこの部分をDeepLにコピペして翻訳すると,以下のようになりました.

微分方程式が与えられると {displaystyle Fleft(x,y,y',\ldots ,y^{(n)}right)=0}{displaystyle Fleft(x,y,y',\ldots ,y^{(n)}right)=0} が与えられると、以下のようになります。 a function u: I⊂R → R (I は区間) は F の解または積分曲線と呼ばれ、 u が I 上で n 回微分可能であり

{displaystyle F(x,u,u',\ldots ,\ u^{(n)})=0quad xin I.}{displaystyle F(x,u,u',\ldots ,\ u^{(n)})=0quad xin I.}となるとき、Fの解または積分曲線を表す。 2つの解uがあるとき J ⊂ R → R, v: I ⊂ R → R, u is called an extension of v if I ⊂ J and

{u(x)=v(x)\quad xin I.\,}u(x)=v(x)\quad xin I.\ とすれば、uをvの拡張と呼びます。 拡張がない解を最大解という。Rの全てに定義された解をグローバル解と呼びます。

このような結果だと,さすがに自分で英語のまま読んだ方が早いですね.

今回のツールで翻訳する

それでは,今回作ったツールを使って翻訳してみます.まず,Mathpixで文章をLaTeXコードに変換します.
これはショートカットキー「Ctrl + Alt + M」または「Control + Command + M」で一瞬でできます.

Mathpixでの読取結果

これを本ツールにコピペして実行してみます.

翻訳結果

数式をそのまま残しつつ,翻訳することができました!

作った方法

作った方法や他の方法との比較などはQiitaの記事にまとめました.

qiita.com

最後に

これで(自分も含む)英語を読むのが苦手・遅い理論系・数学系の人を救えます...

このツールが便利だと思った方は、Githubのリポジトリにスターをいただけるとモチベが上がります!

関連サイト

DeepL翻訳:高精度な翻訳ツール

Mathpix: AI-powered document automation

Shaper | 論文翻訳支援アプリ

http://to-normal-code.herokuapp.com/to-normal-code

ssh接続した後,バックグラウンドでMATLABスクリプトを実行

早く知りたい方用

sshログイン後,バックグラウンド実行

  • script.mを実行し,その標準出力をoutfile.txtに記述
nohup matlab -nosplash -nodesktop -nodisplay -r 'script' > outfile.txt < /dev/null &
nohup matlab -nosplash -nodesktop -nodisplay -r 'script' > /dev/null 2>&1 < /dev/null &

ブログ全体を読めばこのコマンドの意味が理解でき,自分でカスタマイズできるようになるはずです.

sshログインからmatlab実行

ssh xxx matlab -nodisplay < hogehoge.m

これについてはあまり触れません. MATLABの公式HPのこちらを参照.

概要

上のコマンドは,

 \displaystyle
\underbrace{\textsf{nohup}}_{\textsf{バックグラウンド実行}} \, \underbrace{\textsf{matlab -nodesktop -nodisplay -r 'script'}}_{\textsf{MATLABコマンド}} \, \underbrace{\textsf{> outfile.txt < /dev/null}}_{\textsf{リダイレクト}} \, \underbrace{\textsf{&}}_{\textsf{バックグラウンド実行}}

のように分けられるので,

  • バックグラウンド実行
  • MATLABコマンド,オプション
  • リダイレクト

に分けてまとめて行こうと思います.

目次

対象読者

  • 既にssh接続したLinuxサーバ上でMATLABを動かしたことがある人
  • 基本的にはLinuxサーバを想定

やりたいこと

ssh接続を切ってもMATLABスクリプトを実行し続けるようにしたい
オプションを理解して,状況に応じて使い分けたい

バックグラウンド実行

nohupと&

以下のようにコマンドの最後に&を付けると,プログラムをバックグラウンドで実行するようになります.

command &

ただ,ssh接続を切ると,プログラムの実行が終了してしまうので, nohupを付けて終了しないようにします.
ちなみに,nohupはno hang-upの略です.

nohup command &

バックグラウンド実行後のプロセスの確認

バックグラウンド実行すると,その実行が終了したのかなどプロセスの状況が分からなくなります.
そこで,実行したプロセスの状況を見る方法は幾つかありますが,ひとまず

top -c

と打てば,現在動いているプロセスの一覧とそれらの消費リソースを見ることができます.
また,-cオプションをつけることで,そのプロセスを動かした時のコマンドが全て出てくるので,
簡単に対象のプロセスを探すことができます.

沢山のプロセスが動いているサーバで,対象のプロセスを見つけにくい場合は,
-uオプションで自分のユーザー名を指定すると良いかもしれません.

top -c -u username

MATLAB

MATLAB実行オプション

詳しくはこちらを参照ください.
基本的には,バックグラウンド実行のためによく使うものだけを取り上げます.

モードオプション

  • -nodesktop
    デスクトップを開かずに実行.
  • -nojvm
    JVMソフトウェアなしにMATLABを起動.
    デスクトップ ツールやグラフィックスが使えません(恐らく並列計算なども).
    その分,起動が早くなります.

表示オプション

  • -nodisplay
    MATLABデスクトップを起動せずにJVMソフトウェアを起動.

  • -nosplash
    スプラッシュ スクリーンを非表示.

スクリプトまたは関数の実行

  • -r "hogehoge"
    hogehogeの部分にはdisp()のような関数や,sciript.mのようなスクリプトを置き換えます.
    また,セミコロン;で区切ることで複数のスクリプトまたは関数を実行できます.
    「ダブルクォーテーション“”で囲うこと」と「拡張子.mは書かないこと」に注意してください.

初期作業フォルダ

  • -sd "hogehoge"
    初期作業フォルダを指定.

Linuxの場合,初期作業フォルダはMATLABを起動したフォルダになります.
他のOSの方はこちらを参照.

-nodisplay-nodesktopの違い

グラフィックを表示できる環境の場合,nodisplayの場合はグラフィックが表示されないのに対し,
nodesktopの場合はグラフィックのみが表示されるそうです.→参考
また,どちらの場合でもグラフィック(画像等)の保存はされるようです.

注意点

プログラムの実行がずっと終了しないということが起こりえるため,
コマンドに< /dev/null(Windowsの場合はNUL)か,プログラム内にexitまたはquitをつける必要があります.
ただし,後者の場合エラーが出た場合には,永遠に終了しないということが起きうるようです.詳しくはこちらを参照.

  • < /dev/null を用いる場合
nohup matlab -r 'script' < /dev/null &
  • プログラム内にexitまたはquitをつける場合
nohup matlab -r 'script; exit' &

このように,-rオプションのクオーテーション''内に書くと書きやすいです.
もちろんscript.mの最終行に書いても大丈夫です.

リダイレクト

リダイレクトというのは,プログラムへの入出力は通常ターミナルから(へ)行いますが,
それをファイルから(へ)入出力できるようにすることです.

出力先のリダイレクト

nohupでプログラムを実行すると,デフォルトでは標準出力・標準エラー出力はnohup.outに記述されます.
ここでは,その記述先を変更する方法,および何処にも記述しない方法についてまとめます.
詳しくは他のサイトをご覧ください.

標準出力と標準エラー出力を別ファイルに出力

nohup command > output.log 2>error.log

">"は"1>"と等価で,1は標準出力を,2は標準エラー出力を表しています.

追記する形で,標準出力と標準エラー出力を別ファイルに出力

nohup command >> output.log 2>> error.log

標準出力と標準エラー出力をどこにも記述しない

nohup command >/dev/null 2>&1

標準出力の記述先を"/dev/null"に変更することで記述しないようにしています.
また,"2>&1"は標準出力(1)の記述先を標準エラー出力(2)の記述先に設定するということを表しており,
結果的にどちらの出力も記述しないようにしています.

標準入力先のリダイレクト

command < /dev/null

標準入力をnullとしています.
これによって,実行中に入力待ちが発生してプログラムが永遠に終了しないということを防いでいます.

roscore permission denied

エラー

IOError: Permission denied: '/home/usr/.ros/roscore-11311.pid'

.rosにはrosdepのディレクトリがあったので、なんとなく

rosdep update

してみると、

sudo rosdep fix-permissions

して とのこと。言われた通りにすると直った。言われるがまま。

JupyterLabでアニメーションが表示されない

概要

jupyterLabでmatplotlib.animation.FuncAnimationを使おうとしたところ、
アニメーションが生成されず、静止画像のみが表示されたので、とりあえずの解決策を共有します。

詳解確率ロボティクスを読んでいてこの問題に行き当たったので、
今後問題に困る人が少なくなるようにこのブログを残しておきます。

前提・動作環境

  • OS: windows
  • 環境: Anaconda
  • JupyterLab 1.1.4
  • matplotlib: 3.1.1

コードは「詳解確率ロボティクス」の物をそのまま実行しました。

matplotlib.use('nbagg')が入っていることも確認しています。

調査

このサイトにてJupyter Notebook/JupyterLabでのmatplotlibによるGIFアニメーションについて書かれていました。
2018年4月の記事です。

これによると、

まず、Jupyter NotebookやJupyterLab上に表示する際、

・%matplotlib inline (主に静止画)

・%matplotlib nbagg (動画、インタラクティブ

この二種類のbackendsを用いるのですが、基本的にJupyterLabだと「nbagg」のほうはダメみたい。

と書かれています。

解決方法が下のサイトで詳しく書かれており助かりました。

qiita.com

詳解確率ロボティクスに特化した解決法

IPython.display.HTML

from IPython.display import HTML

これを追加してインポートし、途中のplt.show()の部分を

plt.close()
return HTML(self.ani.to_jshtml())

に変更します。 jupyterlab上ではplt.show()をせずとも描画されてしまうようのでそれを閉じ、

メソッド内でHTML(self.ani.to_jshtml())とするだけでは描画されないので、returnすれば描画されました。

最後に

初学者なので間違っていたら色々指摘してください。

Magic Formulaについて

タイヤモデル

 タイヤモデルについては以下をご覧ください.

hooked-on-mas.hatenablog.com

Magic Formulaとは

 Magic Formulaは1980年代半ばに,ボルボのBakkerらとデレフト工科大学のPacejkaらによって共同で開発されました.Magic Formulaは,4つの変数 B, C, D, E とスリップ率・スリップ角を入力として,タイヤの力またはトルクを出力とするタイヤモデルであり,それらの入出力関係は三角関数(逆三角関数)を用いて表されます.この式をここでは基礎式と呼びます.さらに,その4つの変数 B, C, D, E はを他の入力(空気圧や輪荷重など)と10-20程度の係数との線形和で表されます.(詳しくは後述します. )そして,タイヤの試験データを用いてそれらの係数を同定する事により,関数が一意に決まります.それに加え,晴れや雨などの条件に対応できるよう,倍率係数という変数も用意されています.

 Magic Formulaには,ピュアモデルとコンバインドモデルの2種類があります.ピュアモデルは単一方向(縦または横)の試験データのみを用いたタイヤモデルで,試験が少なく済みますが適用範囲が絞られてしまいます.コンバインドモデルは縦横両方の試験データを活用し,摩擦円を考慮したタイヤモデルとなります.ABSなどのシステムの発展によって,コンバインドモデルの需要がかなり高まっています.

基礎式

Magic Formulaの基礎式はバージョンや入出力によらずに一つの式によって表されます.

{\displaystyle
\quad y=D \sin [C \arctan \{ Bx-E(Bx- \arctan Bx) \} ] \\
}

with

{\displaystyle
\quad Y(X) = y(x)+S_v \\
\quad x=X+S_h
}

ここで,X は入力である \tan \alpha(スリップ角)または \kappa(スリップ率)を表し,Y は出力である横力,縦力またはセルフアライニングトルクを表します. 基礎式に現れる変数はそれぞれ,剛性係数 B,形状係数 C,ピーク値 D,曲線係数 E,水平方向シフト S_h,垂直方向シフトS_vと呼ばれます.

これらの係数(ここでは便宜上,上級係数と呼ぶ)は,さらにスリップ角・スリップ率以外の入力(空気圧・輪荷重・キャンバ角など)とより細かい係数(下級係数と呼ぶ)によって表されます. この下級係数による上級係数の表現方法はMagic Formulaのバージョンによって異なります.より沢山の下級係数を用いて複雑な式を用いて表現すれば,より正確なタイヤモデルを得られるように思えますが,実際は過学習の問題や局所最適解にはまってしまって最適解を得られないといった問題が生じるため,十数~数十個の係数を用いる場合が多いです.(しかし,近年の深層学習の発展によって,多くの係数(パラメータ)を用いて同定する方法も提案されています.)

各係数の特徴

剛性係数B

 式を見れば分かるように全てが x の前に付きます.つまり,x 方向に拡大縮小をする役割があります.

BCD の積

 基礎式を微分すれば分かりますが,原点での傾きは BCD になります.

ピーク値 D

 正弦関数の最大値は1であるので,D がピーク値になります.

形状係数 C

 B,DBCD の意味からも推測がつくように C は形状を表します.

曲率係数 E

 曲線のピーク付近の曲率に影響を与えます.Ex に依存して変化します.

シフト値 S_h,S_v

 タイヤ各々の不均一性によります.S_h はconicityに,S_v はply steerによると言われます.

より細かい係数(分かりやすいよう下級係数と呼んでいます)について

 下級係数はスリップ率・スリップ角以外の入力(空気圧・輪荷重・キャンバ角など)との線形結合によって上級係数を表現します.このように定数が2階層に分かれているのですが,このように分けられたのは恐らく表現が完結にまとめられて,かつ係数を同定しやすくなるというのが2階層に分けられた理由なんじゃないでしょうか.(実際に2階層に分けたことで同定がしやすい場合が多く,そのような同定法を2段同定法と呼ぶそうです[水野ら1999]

 上述したように,下級係数の定義はバージョンによって異なります.現状一般的なモデルは,MF-Tyre 6.1というタイヤモデルです.PacejkaによるTyre and Vehicle Dynamics 3rd eddition内に掲載されています.

基礎式の解析

 Magic Formulaの基礎式は

{\displaystyle
\quad y=D \sin [C \arctan \{ Bx-E(Bx- \arctan Bx) \} ] \\
}

という形で表されるわけですが,どうしてこのような形を取るのでしょうか?

 実験に得られる横力のタイヤデータは以下の図の青線のような形です.

Tire data and magic formula fit [Kanwar & Srikanth 2015]

おおよそ \sin 関数の区間 (-\frac{2 \pi}{3}, \frac{2 \pi}{3}) くらいを区間 (-\infty, \infty) まで引き伸ばしたような形をしています.なので,ある関数  f:\mathbb{R} \rightarrow (-\frac{2 \pi}{3}, \frac{2 \pi}{3}) を用いて \sin \{  f(x) \} とすれば,「\sin 関数の区間 (-\frac{2 \pi}{3}, \frac{2 \pi}{3})区間 (-\infty, \infty) まで引き伸ばした」関数を構築することができます.さて,そのような関数  f: をあなたはご存知でしょうか.そうです. \arctan です.\arctan は実数空間 \mathbb{R}(-\frac{\pi}{2}, \frac{\pi}{2}) に写します.なので, C=\frac{4}{3} を定義して,\sin \{ C \arctan(x) \} とすることで,先ほどの「\sin 関数の区間 (-\frac{2 \pi}{3}, \frac{2 \pi}{3})区間 (-\infty, \infty) まで引き伸ばした」関数を書くことができます.この C は基礎式の形状係数 C です.名前の由来も理解できたのではないでしょうか.

 次に,\sin 関数の最大値は1であるのに対して,タイヤデータの最大値は数万Nと非常に大きいので,タイヤデータの最大値を D として(実際は少し違います),D \sin \{ C \arctan(x) \}と書きます.これがピーク値 Dです.

 そして,D によって縦軸方向のスケールを合わせたのと同様に,横軸方向のスケールを B によって調整できるようにします.すなわち,D \sin \{ C \arctan(B x) \}と書きます.

 あとは, Bx-E(Bx- \arctan Bx) の部分です.B x については既に述べたので,簡単のために B=1 として,x-E(x- \arctan x) について見ていきます.これは, \arctanマクローリン展開を用いて近似することでおおよそ理解できます. \arctanマクローリン展開

{\displaystyle
\quad \arctan x = x - \frac{x^ 3}{3} + \frac{x^ 5}{5} - \frac{x^ 7}{7}+...
}

と表され,x-E(x- \arctan x) に適用すると,

{\displaystyle
\quad x-E(x- \arctan x) = x- E \left \{ \frac{x^ 3}{3} + \frac{x^ 5}{5} - \frac{x^ 7}{7}+... \right .
}

と展開できます.なので,Ex-E(x- \arctan x) に対する高次の項の影響を調整するための係数になっています.これはつまり,x が小さい時は x-E(x- \arctan x) の値は x の影響を大きく受け,x が大きい時は高次の項の影響を大きく受けるということなので,E は原点から遠い位置での曲線の形に影響します.よって, E は曲率係数と呼ばれます.(なぜここで \arctan を用いたのかについては,現状私は理解できていません.ご存知の方,ご教授いただければ幸いです.)

各係数をおおよそ同定してみる

Dについて

タイヤ発生力の最大値からおおよそ求まります.

Cについて

x→∞\arctan x→ \frac{\pi}{2} なので, x→∞でのタイヤの発生する力を y_a とすれば,

{\displaystyle
\quad y_{a}=D \sin [C \frac{\pi}{2} ]
}

となり,これを式変形すれば

{\displaystyle
\quad C= \frac{2}{π} \arcsin  \frac{y_{a}}{D}
}

C が求まります.

Bについて

傾きから BCD がわかり,上述から C,D がわかるので,求まります.

Eについて

y が最大となる xx_m とすると,その時 \sin の中身は \frac{\pi}{2} となるので,

{\displaystyle
\quad \frac{\pi}{2} = C \arctan \{ Bx-E(Bx- \arctan B x_m) \}
}

となります.式変形をして E は以下になります.

{\displaystyle
\quad E= \frac{B x_m - \tan \frac{π}{2C}}{B x_m -\arctan(B x_m)}
}

参考文献

Singh, Kanwar & Sivaramakrishnan, Srikanth. (2015). An adaptive tire model for enhanced vehicle control systems. SAE International Journal of Passenger Cars - Mechanical Systems. 8. 10.4271/2015-01-1521.

車両運動解析で用いられるタイヤモデルについて

タイヤモデルとは

 タイヤモデルは主に複数のパラメータ(スリップ角・スリップ率・キャンバー角・空気圧・垂直荷重)を入力とし、
タイヤが作り出す力またはモーメント(横力・縦力・SAT等)を出力とする関数として表されます。
ただし、入力パラメータには他にも温度や時間軸、タイヤの回転数なども含む場合があります。

 タイヤは異方性を持つ積層複合材料で作られる上、路面状況などによって入力パラメータが多く存在するという、解析が難しいコンポーネントです。しかし、車が動くための力を地面に伝える、唯一のコンポーネントであるため、タイヤモデルの研究は古くからされてきました。しかし、今もなお完璧にタイヤの挙動を表現できるタイヤモデルは存在しません。

タイヤの座標系について

 タイヤの座標系は、日本では主に以下の座標系の定義が用いられます。

  • x軸: タイヤの中心線に平行の向き。通常車両と同じ向きだが、操舵すると座標系も回転。

  • y軸: x軸に垂直で、右手系。

  • z軸: 地面に垂直上向き。キャンバー角がついても回転しない。

ただ、日本以外ではZ軸が下向きになるように定義されるところが多いようです。
Z軸が下向きになるように定義すると,垂直荷重が常にマイナスの値になりちょっと不自然ですが、その分セルフアライニングトルクの定義が自然になります。

タイヤモデルの分類

 タイヤモデルは一般的にempiricalかtheoretical(実験ベースか理論ベースか)という観点で分類がなされ、以下4グループに分けられます。

  • 複雑な物理モデル

  • 純化された物理モデル

  • 半実験同定モデル

  • 実験同定モデル

 この4つの分類・特徴を簡単に説明します。

複雑な物理モデル

 タイヤの設計の際などに使用されるFEM(有限要素法)モデルです。
計算時間に多くの時間がかかるため車両運動解析ではあまり用いられて来ませんでしたが、
計算機性能の向上やABSなどのシステムを正確に解析する必要などから重要性は増しています。

純化された物理モデル

 基本的にタイヤの特性を定数として置くために非線形な特性が表しにくいので,適用範囲は限定されます。
ただ、解析的なアプローチを取れるため、現象の理解や応用に繋がりやすいというメリットがあります。
Fialaモデル、Brushモデルなどが有名で、これらのモデルは以下の本で紹介されています。

半実験同定モデル

 試験機によって得られたデータなどから関数を同定するので、より正確に表現できるモデルです。
しかし、試験の必要があることや試験の条件によって入力パラメータが制限されることなど、デメリットがあります。
Magic Formulaモデルが有名で、多くの車両運動解析やカーシミュレーターで使用されています。
あまり詳しい日本語の文献は見らないので別の記事で簡単に説明しています。

hooked-on-mas.hatenablog.com

実験同定モデル

 実験データを補間することでタイヤモデルを作るカーペットモデルがありますが、今はほとんど研究されていません。

ピュアモデルとコンバインドモデル

ピュアモデル

 x方向の試験結果とy方向の試験結果のどちらかの方向のみを用いて、その方向について同定するためのモデルです。

コンバインドモデル

 摩擦円の事を考えれば納得しやすいと思いますが,縦力と横力の大きさは互いに影響し合って決定されます.
よって、このモデルではx,y両方向のタイヤデータを用いてモデルを同定します。
 そこまで加速しない場合のy方向の運動解析や発進時の解析では、ピュアモデルで済むのですが、
操舵しながら加減速する状況を考える場合はコンバインドモデルが必須となってきます。