メインコンテンツへスキップ

Julia製の経路最適化ソルバALTROを導入する

·1334 文字·3 分
目次

はじめに
#

Windows環境にJuliaと経路最適化ソルバALTROを導入する方法を備忘録として残します。

ALTRO (Augmented Lagrangian TRajectory Optimizer) は、2019年にスタンフォード大学のTaylor A. Howell氏らが発表した経路最適化ソルバです。このソルバには、iLQR (iterative Linear Quadratic Regulator) とActive-Set Projection Methodを組み合わせた手法が実装されています。

この記事ではALTROのアルゴリズムには触れず、JuliaとALTROをインストールし、サンプルのプログラムを動かすところまでまとめています。

環境
#

OSはWindows 10 Homeとし、使用したライブラリ等のバージョンは以下の通りです。

  • Julia v1.7.2 64bit
  • TrajectoryOptimization v0.7.0
  • ALTRO v0.7.0
  • RobotDynamics v0.4.6
  • RobotZoo v0.3.1
  • StaticArrays v1.4.3

TrajectoryOptimizationは最適化問題を定義する(最適化モデリングツール)ライブラリであり、ALTROはソルバーです。また、RobotDynamicsとRobotZooは動的システムを記述するためのライブラリです。いずれもALTROの開発元であるRoboticExplorationLabが提供しています。なお、これらのライブラリはTrajectoryOptimizationのv0.2以前はTrajectoryOptimizationに集約されていましたが、現在は分割されています。

余談ですが、altroはイタリア語で「他の」(other)という意味を持ちます。

JuliaとALTROのインストール
#

まず、Juliaを以下の公式サイトからダウンロードしてインストールします。 The Julia Programming Language このとき、Juliaのパスを通しておくと後々便利です。

次に、ALTROと関連するパッケージをインストールします。Juliaのターミナル画面を起動します。]を押すと、パッケージマネージャモードというパッケージをインストールできるモードに切り替わります。パッケージマネージャモードでは、プロンプトがjulia>から(@v1.7) pkg>のように変わります。 この状態でadd [package name]を実行すると、パッケージがインストールされます。必要なパッケージをすべてインストールします。

(@v1.7) pkg> add TrajectoryOptimization
(@v1.7) pkg> add ALTRO
(@v1.7) pkg> add RobotDynamics
(@v1.7) pkg> add RobotZoo
(@v1.7) pkg> add StaticArrays

なお、TrajectoryOptimization.jlGitHubには、以下でインストールするとあります。

Pkg.add("TrajectoryOptimization")

しかし、これを試したところエラーとなりました。

julia> Pkg.add("TrajectoryOptimization")
ERROR: UndefVarError: Pkg not defined
Stacktrace:
 [1] top-level scope
   @ REPL[1]:1

Julia 1.0以降では、上記のコマンドでインストールするのは不可となり、パッケージマネージャを使うように仕様が変更されたようです。

Julia 1.0の注意点 - Qiita

サンプルスクリプトの実行
#

続いて、サンプルスクリプトを実行します。RoboticExplorationLabのリポジトリから、以下のquickstart.jl(ハッシュ:31bc8c65a477)をローカルに保存します。

quickstart.jl (RoboticExplorationLab_Altro.jl)

次にPowerShellを起動し、julia quickstart.jlで保存したスクリプトを実行します。実行に成功した場合、以下のように表示されます。

PS > julia quickstart.jl

SOLVE COMPLETED
 solved using the ALTRO Solver,
 part of the Altro.jl package developed by the REx Lab at Stanford and Carnegie Mellon Universities

  Solve Statistics
    Total Iterations: 44
    Solve Time: 2911.9224999999997 (ms)

  Covergence
    Terminal Cost: 1.5391141512743358
    Terminal dJ: -0.00034024145968047925
    Terminal gradient: 0.014634616904838724
    Terminal constraint violation: 5.896280974582169e-7
    Solve Status: SOLVE_SUCCEEDED

参考
#

Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

最適制御向け最適化ライブラリOpEnのRust build of TCP interface failedエラーについて
·1185 文字·3 分
OpEnで発生するRust build of TCP interface failedエラーの解消方法を示します。
最適制御向け最適化ライブラリOpEnに入門する
··1759 文字·4 分
Rust製の最適制御向け最適化ライブラリOpEnに入門するためチュートリアルの非線形計画問題を解いたので、備忘録を兼ねてまとめた。
PythonとCasADiを使ったDirect Single Shooting法による最適制御
·2545 文字·6 分
Pythonと最適化ライブラリCasADiを使って、Direct Single Shooting法と呼ばれる手法によって最適制御問題を解きました。対象とした例題は斜方投射(物体を斜め方向に上げる)で、指定の時刻・距離に物体を到達させる最小の初速度を求めます。
Direct Single Shooting法による最適制御
·1793 文字·4 分
最適制御問題を解く手法の1つである、Direct Single Shooting法のアルゴリズムをまとめた。
非線形モデル予測制御とPANOC
·1729 文字·4 分
非線形システムを対象としたモデル予測制御の最適化問題を解くPANOCというアルゴリスムについてまとめた。
Rust製最適化ライブラリOpEnのインストール
··868 文字·2 分
Rust製の最適化ライブラリOpEnをWindows 10にインストールし、Pythonから使えるようにする。