Skip to main content

URDF converter for Euslisp

Project description

urdfeus

PyPI Python Versions Build Status

URDFファイルをEusLispコードに変換するPythonライブラリ

概要

urdfeusは、ロボット記述ファイル(URDF)をEusLispのロボットモデル定義に変換するツールです。ROS環境で使用されるURDFファイルを、EusLispプログラミング環境で利用できる形式に変換できます。

URDF to EusLisp conversion

インストール

pip install urdfeus

開発版をインストールする場合:

git clone https://github.com/iory/urdfeus.git
cd urdfeus
pip install -e .

使用方法

コマンドライン

# 基本的な変換
urdf2eus robot.urdf robot.l

# YAMLファイルと一緒に変換
urdf2eus robot.urdf robot.l --yaml-path robot.yaml

# カスタムロボット名を指定
urdf2eus robot.urdf robot.l --name my_robot

# メッシュ簡素化オプション付き
urdf2eus robot.urdf robot.l --voxel-size 0.01

Pythonスクリプト

from urdfeus.urdf2eus import urdf2eus

# URDFファイルをEusLispに変換
with open('robot.l', 'w') as f:
    urdf2eus('robot.urdf', fp=f)

# YAMLファイルと一緒に変換
with open('robot.l', 'w') as f:
    urdf2eus('robot.urdf', 'robot.yaml', fp=f)

# カスタムロボット名を指定
with open('robot.l', 'w') as f:
    urdf2eus('robot.urdf', robot_name='my_robot', fp=f)

生成されたEusLispファイルの使用

;; EusLisp環境での使用例
(load "robot.l")
(setq *robot* (robot))  ; URDFのロボット名または--nameで指定した名前
(send *robot* :angle-vector)

;; カスタム名を指定した場合
(load "robot.l")
(setq *robot* (my_robot))  ; --name my_robot で生成した場合
(send *robot* :angle-vector)

ロボット名の制約

--nameオプションで指定するロボット名は、EusLispの識別子として有効である必要があります:

  • 文字または_で始まる
  • 文字、数字、_-のみ使用可能
  • EusLispの予約語(if, defun, nilなど)は使用不可
  • 空文字列やスペースを含む名前は使用不可

有効な例: my_robot, robot-v1, MyRobot, _robot, robot123 無効な例: 123robot, robot name, robot.name, if, defun

YAMLファイル

ロボットの関節グループ、エンドエフェクタ、初期ポーズを設定できます。

PR2ロボットの設定例

実際のPR2設定ファイルを参考にした例:

# 関節グループの定義
torso:
  - torso_lift_joint : torso-waist-z

larm:
  - l_shoulder_pan_joint   : larm-collar-y
  - l_shoulder_lift_joint  : larm-shoulder-p
  - l_upper_arm_roll_joint : larm-shoulder-r
  - l_elbow_flex_joint     : larm-elbow-p
  - l_forearm_roll_joint   : larm-elbow-r
  - l_wrist_flex_joint     : larm-wrist-p
  - l_wrist_roll_joint     : larm-wrist-r

rarm:
  - r_shoulder_pan_joint   : rarm-collar-y
  - r_shoulder_lift_joint  : rarm-shoulder-p
  - r_upper_arm_roll_joint : rarm-shoulder-r
  - r_elbow_flex_joint     : rarm-elbow-p
  - r_forearm_roll_joint   : rarm-elbow-r
  - r_wrist_flex_joint     : rarm-wrist-p
  - r_wrist_roll_joint     : rarm-wrist-r

head:
  - head_pan_joint  : head-neck-y
  - head_tilt_joint : head-neck-p

# エンドエフェクタ座標系
larm-end-coords: 
  parent : l_gripper_tool_frame
  rotate : [0, 1, 0, 0]

rarm-end-coords:
  parent : r_gripper_tool_frame
  rotate : [0, 1, 0, 0]

head-end-coords:
  translate : [0.08, 0, 0.13]
  rotate    : [0, 1, 0, 90]

# 事前定義ポーズ
angle-vector:
  reset-manip-pose : [300.0, 75.0, 50.0, 110.0, -110.0, -20.0, -10.0, -10.0, -75.0, 50.0, -110.0, -110.0, 20.0, -10.0, -10.0, 0.0, 50.0]
  reset-pose : [50.0, 60.0, 74.0, 70.0, -120.0, 20.0, -30.0, 180.0, -60.0, 74.0, -70.0, -120.0, -20.0, -30.0, 180.0, 0.0, 0.0]

グループ定義の効果

YAMLファイルでグループを定義すると、EusLispで以下のようなメソッドが使用できるようになります:

;; PR2ロボットの例
(setq *robot* (pr2))

;; 右腕の現在の関節角度を取得
(send *robot* :rarm :angle-vector)
;; => #f(-60.0 74.0 -70.0 -120.0 -20.0 -30.0 180.0)

;; 右腕の関節リストを取得
(send *robot* :rarm :joint-list)
;; => (#<rotational-joint r_shoulder_pan_joint> 
;;     #<rotational-joint r_shoulder_lift_joint> ...)

;; 関節名を取得
(send-all (send *robot* :rarm :joint-list) :name)
;; => ("r_shoulder_pan_joint" "r_shoulder_lift_joint" 
;;     "r_upper_arm_roll_joint" "r_elbow_flex_joint" ...)

;; 右腕の関節角度を設定
(send *robot* :rarm :angle-vector #f(0 0 0 -90 0 0 0))

;; 事前定義ポーズの使用
(send *robot* :reset-pose)

設定項目の詳細

関節グループ

  • グループ名: ロボットの部位名(rarm, larm, head など)
  • 関節名 : EusLisp関節名: URDFの関節名とEusLispでの関節名のマッピング

エンドエフェクタ座標系

  • parent: 座標系を取り付ける親リンク名
  • translate: [x, y, z] 平行移動(メートル単位)
  • rotate: [x, y, z, angle] 回転軸ベクトルと角度(度単位)

事前定義ポーズ

  • angle-vector: ポーズ名と対応する関節角度リスト
  • 関節角度は度単位で指定
  • 関節の順序はYAMLファイル内の関節グループの定義順序に従う

依存関係

  • Python 3.6+
  • scikit-robot
  • trimesh
  • numpy

ライセンス

MIT License

貢献

プルリクエストやイシューの報告を歓迎します。

関連プロジェクト

  • scikit-robot - Pythonロボットモデリングライブラリ
  • EusLisp - Lispベースのロボットプログラミング言語

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

urdfeus-1.1.10.tar.gz (29.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

urdfeus-1.1.10-py3-none-any.whl (29.2 kB view details)

Uploaded Python 3

File details

Details for the file urdfeus-1.1.10.tar.gz.

File metadata

  • Download URL: urdfeus-1.1.10.tar.gz
  • Upload date:
  • Size: 29.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for urdfeus-1.1.10.tar.gz
Algorithm Hash digest
SHA256 70868ffb052850f11551e54ff82afb490be0ba80dbf139b1d043c31bcae123f0
MD5 0ee5eb27713e238c2bb77f7d3ee3999d
BLAKE2b-256 08999e0fd60fb4676773a9d71720e23b02e3982e6f1529b09d847aa8130bcf86

See more details on using hashes here.

File details

Details for the file urdfeus-1.1.10-py3-none-any.whl.

File metadata

  • Download URL: urdfeus-1.1.10-py3-none-any.whl
  • Upload date:
  • Size: 29.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for urdfeus-1.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 5e7a1e40190c21f4b6c33a03e5ae8700ea89d1e6d09e1d31f3906d15dc56560e
MD5 0e61714a0b8af58189aaac602a64bc9c
BLAKE2b-256 481e68fc65b22b0763829adbd928e50b77dc3f8114f4f6600b68ac74b17321e7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page