ロボットの経路生成を行うためのPython GUIアプリケーションです。経由点の設定、制約条件の指定、経路の生成・可視化を行います。
Screencast.from.2025-11-28.22-22-00.webm
- Catmull-Rom曲線補間: 複数の経由点を滑らかな3次曲線で補間
- 躍度最小軌道生成: 5次多項式による滑らかな軌道生成
- 速度プロファイル生成: 制約条件を満たす速度プロファイルの自動生成
- 経由点制約: 位置・角度・速度の制約条件設定に対応
- 最大線形躍度 (Max Linear Jerk)
- 最大線形加速度 (Max Linear Acceleration)
- 最大線形速度 (Max Linear Speed)
- 制御周波数とプレシジョンの設定
- 経路の2Dプロット表示
- 速度、加速度、角度、角速度プロファイルグラフ表示
- ロボット形状を含む軌跡表示
- 経路データのCSVエクスポート
- 設定ファイルのJSON形式での保存・読み込み
- マップデータの読み込みと表示
- 前回使用した設定の自動復元
- PySide6: Qt6ベースのGUIフレームワーク
- NumPy: 数値計算・行列演算
- Matplotlib: グラフ描画・可視化
- Catmull-Rom補間アルゴリズム
- 5次多項式による躍度最小軌道生成
- 制約条件を考慮した速度プロファイル生成
- Python 3.9以上
- PySide6
- NumPy
- Matplotlib
pip install -r requirements.txtpython trajectory_generator_gui.py-
設定ファイルの読み込み
- 「設定ファイルを読む」ボタンから既存の設定JSONファイルを読み込み
- 前回使用した設定がある場合は起動時に自動的に読み込まれます
-
経由点の設定
- 左側のマップをクリックしてテーブルに経由点を追加
- テーブルを編集して X座標、Y座標、角度、速度 の条件を入力
- 角度と速度は空欄にすると制約なしとして扱われます
- 角度は度(deg)で入力します
- 「追加」「削除」「上へ」「下へ」ボタンで経由点を編集
-
制約条件の設定
- 最大並進躍度 [m/s³]
- 最大並進加速度 [m/s²]
- 最大並進速度 [m/s]
- 制御周波数 [Hz] (CSV出力する点の時間間隔)
- プレシジョン [m]
-
経路生成
- 「経路生成」ボタンをクリック
- 生成された経路がキャンバスに表示されます
- ログに経路長、到達時間、最大速度が出力されます
-
結果の確認
- 「速度確認」: 速度プロファイルをグラフ表示
- 「加速度確認」: 加速度プロファイルをグラフ表示
- 「角速度確認」: 角速度プロファイルをグラフ表示
- 「曲率確認」: 曲率プロファイルをグラフ表示
- 「角度確認」: 角度プロファイルをグラフ表示
- 「結果表示」: ロボット形状を含むアニメーション表示
-
データのエクスポート
- 「経路出力」: 生成された経路をCSV形式で保存
- 「設定ファイルを書き出す」: 現在の設定をJSON形式で保存
設定ファイルはJSON形式で作成します。GUIから「設定ファイルを書き出す」で保存するか、手動で作成できます。
{
"max_linear_jerk": "5.0",
"max_linear_acceleration": "2.0",
"max_linear_speed": "2.0",
"hz": "100",
"precision": "0.01",
"disp_period": "0.5",
"table": [
["0.0", "0.0", "0.0", "0.0"],
["1.0", "1.0", "45.0", "0.5"],
["2.0", "0.5", "90.0", ""]
]
}各パラメータの説明:
max_linear_jerk: 最大線形躍度 [m/s³]max_linear_acceleration: 最大線形加速度 [m/s²]max_linear_speed: 最大線形速度 [m/s]hz: 制御周波数 [Hz]precision: プレシジョン [m]disp_period: アニメーション表示周期 [s]table: 経由点リスト。各行は[X座標, Y座標, 角度(deg), 速度]。角度・速度を空文字列""にすると制約なし
アニメーション表示でロボットの形状を表示するには、robot_shape フィールドを追加します。
{
"robot_shape": {
"name": "差動駆動ロボット",
"vertices": [
[-0.15, -0.1],
[-0.15, 0.1],
[0.15, 0.1],
[0.15, -0.1]
]
}
}パラメータ:
name: ロボットの名前(GUIに表示されます)vertices: ロボットの頂点座標リスト。ロボット中心を原点とした相対座標 [m] で指定
障害物や壁を含むマップを表示するには、map フィールドを追加します。
{
"map": {
"name": "テストマップ",
"elements": [
{
"type": "rectangle",
"position": [1.0, 1.0],
"width": 0.5,
"height": 0.5,
"filled": true,
"color": "#888888",
"alpha": 1.0
},
{
"type": "circle",
"center": [2.0, 2.0],
"radius": 0.3,
"filled": true,
"color": "#888888",
"alpha": 1.0
},
{
"type": "line",
"points": [[0.0, 0.0], [3.0, 0.0], [3.0, 3.0]],
"width": 0.05,
"style": "solid",
"color": "#000000"
}
]
}
}マップ要素の種類:
-
矩形 (rectangle)
position: 左下角の座標[x, y][m]width: 幅 [m]height: 高さ [m]filled: 塗りつぶすか (true/false)color: 描画色 (HTMLカラーコード)alpha: 透明度 [0.0-1.0]
-
円 (circle)
center: 中心座標[x, y][m]radius: 半径 [m]filled: 塗りつぶすか (true/false)color: 描画色 (HTMLカラーコード)alpha: 透明度 [0.0-1.0]
-
多角形 (polygon)
vertices: 頂点座標のリスト[[x1, y1], [x2, y2], ...][m]filled: 塗りつぶすか (true/false)color: 描画色 (HTMLカラーコード)alpha: 透明度 [0.0-1.0]
-
線 (line)
points: 点座標のリスト[[x1, y1], [x2, y2], ...][m]width: 線幅 [m]style: 線スタイル ("solid", "dashed", "dotted")color: 描画色 (HTMLカラーコード)
-
テキスト (text)
position: テキスト位置[x, y][m]text: 表示テキストfont_size: フォントサイズrotation: 回転角度 [degree]color: 描画色 (HTMLカラーコード)
すべての要素を含む完全な設定ファイルの例は、examples/setting.json を参照してください。
このプロジェクトは Apache License 2.0 の下でライセンスされています。詳細は LICENSE ファイルを参照してください。
このプロジェクトは以下のオープンソースライブラリを使用しています:
- NumPy - BSD License
- Matplotlib - PSF License (BSD互換)
- PySide6 - LGPL License
すべての依存ライブラリは Apache License 2.0 と互換性があります。