Skip to content

surpace0924/simple_trajectory_generator_gui

Repository files navigation

simple_trajectory_generator_gui

ロボットの経路生成を行うための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.txt

使用方法

起動

python trajectory_generator_gui.py

基本的な使い方

  1. 設定ファイルの読み込み

    • 「設定ファイルを読む」ボタンから既存の設定JSONファイルを読み込み
    • 前回使用した設定がある場合は起動時に自動的に読み込まれます
  2. 経由点の設定

    • 左側のマップをクリックしてテーブルに経由点を追加
    • テーブルを編集して X座標、Y座標、角度、速度 の条件を入力
    • 角度と速度は空欄にすると制約なしとして扱われます
    • 角度は度(deg)で入力します
    • 「追加」「削除」「上へ」「下へ」ボタンで経由点を編集
  3. 制約条件の設定

    • 最大並進躍度 [m/s³]
    • 最大並進加速度 [m/s²]
    • 最大並進速度 [m/s]
    • 制御周波数 [Hz] (CSV出力する点の時間間隔)
    • プレシジョン [m]
  4. 経路生成

    • 「経路生成」ボタンをクリック
    • 生成された経路がキャンバスに表示されます
    • ログに経路長、到達時間、最大速度が出力されます
  5. 結果の確認

    • 「速度確認」: 速度プロファイルをグラフ表示
    • 「加速度確認」: 加速度プロファイルをグラフ表示
    • 「角速度確認」: 角速度プロファイルをグラフ表示
    • 「曲率確認」: 曲率プロファイルをグラフ表示
    • 「角度確認」: 角度プロファイルをグラフ表示
    • 「結果表示」: ロボット形状を含むアニメーション表示
  6. データのエクスポート

    • 「経路出力」: 生成された経路を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 と互換性があります。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages