JavaScriptを有効にしてください

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

 ·   3 min read

はじめに

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]を実行すると、パッケージがインストールされます。必要なパッケージをすべてインストールします。

1
2
3
4
5
(@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には、以下でインストールするとあります。

1
Pkg.add("TrajectoryOptimization")

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

1
2
3
4
5
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で保存したスクリプトを実行します。実行に成功した場合、以下のように表示されます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

サイト内検索