背景
大学の図書館で英語のレポートを書いている時に,DeepLを使おうとすると,
全然使ってないのにも関わらず「無料でご利用いただける上限に達しました」との表示が出ました.
原因
おそらく「個人が何回使ったか」ではなく,「その施設のWiFiに接続している人が合計で何回使ったか」という基準になってしまっているようです(推測).
解決策
私の場合は諦めて以下の手段を取っています.
参考になれば幸いです.
WikipediaのOrdinary differential equation(常微分方程式)の中の,特に数式と英語が混み合っている部分を例にとって翻訳してみます.
あなたはこれをすぐに読むことができますか?
試しにこの部分を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」で一瞬でできます.
これを本ツールにコピペして実行してみます.
数式をそのまま残しつつ,翻訳することができました!
作った方法や他の方法との比較などはQiitaの記事にまとめました.
これで(自分も含む)英語を読むのが苦手・遅い理論系・数学系の人を救えます...
このツールが便利だと思った方は、Githubのリポジトリにスターをいただけるとモチベが上がります!
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 xxx matlab -nodisplay < hogehoge.m
これについてはあまり触れません. MATLABの公式HPのこちらを参照.
上のコマンドは,
のように分けられるので,
に分けてまとめて行こうと思います.
ssh接続を切ってもMATLABスクリプトを実行し続けるようにしたい
オプションを理解して,状況に応じて使い分けたい
以下のようにコマンドの最後に&を付けると,プログラムをバックグラウンドで実行するようになります.
command &
ただ,ssh接続を切ると,プログラムの実行が終了してしまうので, nohupを付けて終了しないようにします.
ちなみに,nohupはno hang-upの略です.
nohup command &
バックグラウンド実行すると,その実行が終了したのかなどプロセスの状況が分からなくなります.
そこで,実行したプロセスの状況を見る方法は幾つかありますが,ひとまず
top -c
と打てば,現在動いているプロセスの一覧とそれらの消費リソースを見ることができます.
また,-cオプションをつけることで,そのプロセスを動かした時のコマンドが全て出てくるので,
簡単に対象のプロセスを探すことができます.
沢山のプロセスが動いているサーバで,対象のプロセスを見つけにくい場合は,
-uオプションで自分のユーザー名を指定すると良いかもしれません.
top -c -u username
詳しくはこちらを参照ください.
基本的には,バックグラウンド実行のためによく使うものだけを取り上げます.
Linuxの場合,初期作業フォルダはMATLABを起動したフォルダになります.
他のOSの方はこちらを参照.
グラフィックを表示できる環境の場合,nodisplayの場合はグラフィックが表示されないのに対し,
nodesktopの場合はグラフィックのみが表示されるそうです.→参考
また,どちらの場合でもグラフィック(画像等)の保存はされるようです.
プログラムの実行がずっと終了しないということが起こりえるため,
コマンドに< /dev/null(Windowsの場合はNUL)か,プログラム内にexitまたはquitをつける必要があります.
ただし,後者の場合エラーが出た場合には,永遠に終了しないということが起きうるようです.詳しくはこちらを参照.
nohup matlab -r 'script' < /dev/null &
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としています.
これによって,実行中に入力待ちが発生してプログラムが永遠に終了しないということを防いでいます.
IOError: Permission denied: '/home/usr/.ros/roscore-11311.pid'
.rosにはrosdepのディレクトリがあったので、なんとなく
rosdep update
してみると、
sudo rosdep fix-permissions
して とのこと。言われた通りにすると直った。言われるがまま。
jupyterLabでmatplotlib.animation.FuncAnimationを使おうとしたところ、
アニメーションが生成されず、静止画像のみが表示されたので、とりあえずの解決策を共有します。
詳解確率ロボティクスを読んでいてこの問題に行き当たったので、
今後問題に困る人が少なくなるようにこのブログを残しておきます。
コードは「詳解確率ロボティクス」の物をそのまま実行しました。
matplotlib.use('nbagg')が入っていることも確認しています。
このサイトにてJupyter Notebook/JupyterLabでのmatplotlibによるGIFアニメーションについて書かれていました。
2018年4月の記事です。
これによると、
まず、Jupyter NotebookやJupyterLab上に表示する際、
・%matplotlib inline (主に静止画)
・%matplotlib nbagg (動画、インタラクティブ)
この二種類のbackendsを用いるのですが、基本的にJupyterLabだと「nbagg」のほうはダメみたい。
と書かれています。
解決方法が下のサイトで詳しく書かれており助かりました。
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は1980年代半ばに,ボルボのBakkerらとデレフト工科大学のPacejkaらによって共同で開発されました.Magic Formulaは,4つの変数 とスリップ率・スリップ角を入力として,タイヤの力またはトルクを出力とするタイヤモデルであり,それらの入出力関係は三角関数(逆三角関数)を用いて表されます.この式をここでは基礎式と呼びます.さらに,その4つの変数 はを他の入力(空気圧や輪荷重など)と10-20程度の係数との線形和で表されます.(詳しくは後述します. )そして,タイヤの試験データを用いてそれらの係数を同定する事により,関数が一意に決まります.それに加え,晴れや雨などの条件に対応できるよう,倍率係数という変数も用意されています.
Magic Formulaには,ピュアモデルとコンバインドモデルの2種類があります.ピュアモデルは単一方向(縦または横)の試験データのみを用いたタイヤモデルで,試験が少なく済みますが適用範囲が絞られてしまいます.コンバインドモデルは縦横両方の試験データを活用し,摩擦円を考慮したタイヤモデルとなります.ABSなどのシステムの発展によって,コンバインドモデルの需要がかなり高まっています.
Magic Formulaの基礎式はバージョンや入出力によらずに一つの式によって表されます.
with
ここで, は入力である (スリップ角)または (スリップ率)を表し, は出力である横力,縦力またはセルフアライニングトルクを表します. 基礎式に現れる変数はそれぞれ,剛性係数 ,形状係数 ,ピーク値 ,曲線係数 ,水平方向シフト ,垂直方向シフトと呼ばれます.
これらの係数(ここでは便宜上,上級係数と呼ぶ)は,さらにスリップ角・スリップ率以外の入力(空気圧・輪荷重・キャンバ角など)とより細かい係数(下級係数と呼ぶ)によって表されます. この下級係数による上級係数の表現方法はMagic Formulaのバージョンによって異なります.より沢山の下級係数を用いて複雑な式を用いて表現すれば,より正確なタイヤモデルを得られるように思えますが,実際は過学習の問題や局所最適解にはまってしまって最適解を得られないといった問題が生じるため,十数~数十個の係数を用いる場合が多いです.(しかし,近年の深層学習の発展によって,多くの係数(パラメータ)を用いて同定する方法も提案されています.)
式を見れば分かるように全てが の前に付きます.つまり, 方向に拡大縮小をする役割があります.
基礎式を微分すれば分かりますが,原点での傾きは になります.
正弦関数の最大値は1であるので, がピーク値になります.
と の意味からも推測がつくように は形状を表します.
曲線のピーク付近の曲率に影響を与えます. は に依存して変化します.
タイヤ各々の不均一性によります. はconicityに, はply steerによると言われます.
下級係数はスリップ率・スリップ角以外の入力(空気圧・輪荷重・キャンバ角など)との線形結合によって上級係数を表現します.このように定数が2階層に分かれているのですが,このように分けられたのは恐らく表現が完結にまとめられて,かつ係数を同定しやすくなるというのが2階層に分けられた理由なんじゃないでしょうか.(実際に2階層に分けたことで同定がしやすい場合が多く,そのような同定法を2段同定法と呼ぶそうです[水野ら1999].
上述したように,下級係数の定義はバージョンによって異なります.現状一般的なモデルは,MF-Tyre 6.1というタイヤモデルです.PacejkaによるTyre and Vehicle Dynamics 3rd eddition内に掲載されています.
Magic Formulaの基礎式は
という形で表されるわけですが,どうしてこのような形を取るのでしょうか?
実験に得られる横力のタイヤデータは以下の図の青線のような形です.
おおよそ 関数の区間 くらいを区間 まで引き伸ばしたような形をしています.なので,ある関数 を用いて とすれば,「 関数の区間 を区間 まで引き伸ばした」関数を構築することができます.さて,そのような関数 をあなたはご存知でしょうか.そうです. です. は実数空間 を に写します.なので, を定義して, とすることで,先ほどの「 関数の区間 を区間 まで引き伸ばした」関数を書くことができます.この は基礎式の形状係数 です.名前の由来も理解できたのではないでしょうか.
次に, 関数の最大値は1であるのに対して,タイヤデータの最大値は数万Nと非常に大きいので,タイヤデータの最大値を として(実際は少し違います),と書きます.これがピーク値 です.
そして, によって縦軸方向のスケールを合わせたのと同様に,横軸方向のスケールを によって調整できるようにします.すなわち,と書きます.
あとは, の部分です. については既に述べたので,簡単のために として, について見ていきます.これは, のマクローリン展開を用いて近似することでおおよそ理解できます. のマクローリン展開は
と表され, に適用すると,
と展開できます.なので, は に対する高次の項の影響を調整するための係数になっています.これはつまり, が小さい時は の値は の影響を大きく受け, が大きい時は高次の項の影響を大きく受けるということなので, は原点から遠い位置での曲線の形に影響します.よって, は曲率係数と呼ばれます.(なぜここで を用いたのかについては,現状私は理解できていません.ご存知の方,ご教授いただければ幸いです.)
タイヤ発生力の最大値からおおよそ求まります.
で なので, でのタイヤの発生する力を とすれば,
となり,これを式変形すれば
と が求まります.
傾きから がわかり,上述から がわかるので,求まります.
が最大となる を とすると,その時 の中身は となるので,
となります.式変形をして は以下になります.
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モデルが有名で、多くの車両運動解析やカーシミュレーターで使用されています。
あまり詳しい日本語の文献は見らないので別の記事で簡単に説明しています。
実験データを補間することでタイヤモデルを作るカーペットモデルがありますが、今はほとんど研究されていません。
x方向の試験結果とy方向の試験結果のどちらかの方向のみを用いて、その方向について同定するためのモデルです。
摩擦円の事を考えれば納得しやすいと思いますが,縦力と横力の大きさは互いに影響し合って決定されます.
よって、このモデルではx,y両方向のタイヤデータを用いてモデルを同定します。
そこまで加速しない場合のy方向の運動解析や発進時の解析では、ピュアモデルで済むのですが、
操舵しながら加減速する状況を考える場合はコンバインドモデルが必須となってきます。