코딩 및 기타

[isaac sim] Motion Generation

정지홍 2026. 4. 7. 17:12

https://docs.isaacsim.omniverse.nvidia.com/5.1.0/manipulators/motion_generation_overview.html

 

Motion Generation — Isaac Sim Documentation

Motion Generation Lula is a high-performance motion generation library for robotic manipulation. RMPflow provides real-time, reactive local policies to guide a robot manipulator to a task space target while avoiding dynamic obstacles. A suite of Rapidly-ex

docs.isaacsim.omniverse.nvidia.com

task space target --> task space상에서 정의된 목표

local policy --> 현재 상태를 기반으로, 즉각적으로 반응하는 제어 규칙 or 제어전략이다.

global planning solution --> start position에서 goal position까지 가는 전체 경로 수준의 planning결과다.

c-space --> configuration space

task-space --> 로봇이 실제 작업을 수행하는 기준 공간이다.

time-optimal trajectory --> 제약된 조건하에, 가장 짧은 시간에 완료되는 trajectory이다. (제약조건은 velocity limit , accerleration limit , jerk limit등이다.) 

 

 

Motion Generation

  • Lula는 로봇 매니퓰레이션을 위한 고성능 motion generation 라이브러리이다.
  • RMPflow는 로봇 매니퓰레이터가 dynamic obstacle을 회피하면서 task space target으로 이동할 수 있도록 실시간 반응형 local policy를 제공한다.
  • RRT-Connect와 JT-RRT를 포함한 Rapidly-exploring Random Tree(RRT) 알고리즘들은 static environment에서 global planning solution을 제공한다.
  • 또한 Lula의 trajectory generation 도구는 c-space 이동과 task-space 이동의 연속으로 표현된 path에 대해 time-optimal trajectory를 제공한다.
  • 마지막으로 Lula는 상위 수준 motion generation 도구의 기반이 되는 고성능 forward kinematics 및 inverse kinematics solver에 대한 interface를 제공한다.

 

  • NVIDIA Isaac Sim은 또한 cuRobo와 연동됩니다.
  • cuRobo는 고성능 GPU-accelerated robotics motion generation 라이브러리로, batched collision-free inverse kinematics, collision-free motion planning, 그리고 mesh 또는 Nvblox map으로 표현된 obstacle이 있는 환경에서의 reactive control 같은 추가 기능을 NVIDIA Isaac Sim에 제공합니다.

 

예제

Interactive Examples

Interactive example을 찾으려면 Windows > Examples > Robotics Examples로 이동한 뒤, 아직 열려 있지 않다면 Robotics Examples 탭을 여세요.
브라우저에서 아래 예제 중 하나를 선택하고, 실행 방법은 브라우저 창 오른쪽의 Information 탭에서 확인하세요.

  • Follow Target Example: Manipulation > Follow Target
  • RoboFactory Example: Multi-Robot > RoboFactory
  • RoboParty Example: Multi-Robot > RoboParty

robofactory
roboparty

 

 

 


https://docs.isaacsim.omniverse.nvidia.com/5.1.0/manipulators/concepts/index.html

 

Motion Generation — Isaac Sim Documentation

Motion Generation The Motion Generation provides an API that you can use to control objects within Isaac Sim. The API is made up of abstract interfaces for adding motion control algorithms to Isaac Sim. The interfaces in the Motion Generation provide two b

docs.isaacsim.omniverse.nvidia.com

 

 

Motion Generation은 Isaac Sim 내부의 객체를 제어하는 데 사용할 수 있는 API를 제공한다.
이 API는 motion control algorithm을 Isaac Sim에 추가하기 위한 abstract interface들로 구성되어 있다.

Motion Generation의 interface는 두 가지 기본 유틸리티를 제공한다.

  • 새로운 robotics algorithm을 NVIDIA Isaac Sim에 더 쉽게 통합할 수 있도록 한다.
  • 유사한 robotics algorithm들을 비교할 수 있는 표준 구조를 제공한다.

예를 들어, 아직 Isaac Sim에 정의되지 않은 로봇이 있다면, 이 API들을 사용해 해당 로봇과 그 로봇의 동작 방식을 정의할 수 있다.

Motion Generation Extension에서는 다음 세 가지 interface를 제공한다.

  • Motion Policy Algorithm
  • Path Planner
  • Kinematics Solvers

 

Isaac Sim에서는 stage에 추가되는 USD 파일을 사용해 로봇을 정의한다.

하지만 robotics algorithm은 일반적으로 로봇의 kinematic structurecustom parameter를 자체적인 방식으로 정의한다.

 

특정 로봇 description format에 간섭하지 않도록, Motion Generation Extension의 interface에는 USD 로봇과 특정 algorithm 사이의 변환을 지원하는 함수들이 포함되어 있다.
==> 구체적으로, algorithm은 자신이 어떤 joint에 관심이 있는지, 그리고 그 joint들이 어떤 순서로 나열되기를 기대하는지를 지정할 수 있다.

==> 이 extension에서 제공되는 helper class인 Articulation Motion Policy, Path Planner Visualizer, Articulation Kinematics Solver는 이러한 interface 함수를 사용해 USD robot articulationinterface implementation 사이에서 robot joint state를 올바르게 매핑한다.

 

Isaac Sim에서는 USD를 통해 표현된 시뮬레이션 로봇을 가리켜 Articulation이라고 부른다.
Motion Generation Extension에서 “Articulation”이라는 단어가 prefix로 사용될 때는, algorithm과 시뮬레이션 로봇 간의 연동을 처리하는 utility class임을 의미한다.

또한 Motion Generation extension에는 MotionPolicy나 PathPlanner를 활용하지 않는 몇 가지 특수 목적 controller도 포함되어 있다.

  • Motion Generation Extension API Documentation
  • Kinematics Solvers
  • Trajectory Generation
  • Path Planner Algorithm
  • Lula RRT
  • Motion Policy Algorithm
  • RMPflow
  • RMPflow Tuning Guide

 


https://docs.isaacsim.omniverse.nvidia.com/5.1.0/manipulators/concepts/kinematics_solver.html

 

Kinematics Solvers — Isaac Sim Documentation

Kinematics Solvers Like a Motion Policy Algorithm, a Kinematics Solvers is an interface class with a single provided implementation. A KinematicsSolver is able to compute forward and inverse kinematics. A single implementation is provided using the NVIDIA-

docs.isaacsim.omniverse.nvidia.com

 

Kinematics Solvers

Motion Policy Algorithm과 마찬가지로, Kinematics Solvers는 하나의 구현체가 제공되는 interface class이다.
KinematicsSolver는 forward kinematics와 inverse kinematics를 계산할 수 있다.

현재는 NVIDIA가 개발한 Lula 라이브러리를 사용하는 단일 구현이 제공된다.

자세한 내용은 Lula Kinematics Solver를 참고...

포함 항목:

  • Kinematics Solver
  • Articulation Kinematics Solver
  • Lula Kinematics Solver

 

 

Kinematics Solver

- KinematicsSolver interface는 로봇의 사용 가능한 모든 frame에서 forward kinematicsinverse kinematics를 계산하기 위한 함수를 정의한다.

- Motion Policy Algorithm과 마찬가지로, KinematicsSolver class의 인스턴스가 NVIDIA Isaac Sim과 동일한 USD robot representation을 사용할 필요는 없다.
- KinematicsSolver는 자체적인 내부 robot representation을 가질 수 있으며, 이 내부 representation과 robot Articulation 사이의 매핑을 수행하기 위한 필수 interface function도 함께 제공된다.

 

 

Joint Names

- KinematicsSolver class의 인스턴스는 KinematicsSolver.get_joint_names() 함수를 반드시 구현해야 하며, 이를 통해 solver가 관심을 가지는 joint와 그 joint들이 기대되는 순서를 지정해야 한다.
==> 예를 들어, 이동 가능한 base 위에 장착된 robot arm을 생각해볼 수 있다. KinematicsSolver는 robot base에 대한 정보 없이 robot arm에 대한 URDF만 사용할 수 있다. 이 경우 robot Articulation 안에 있는 많은 joint들은 KinematicsSolver에서 인식되지 않느나.

==> forward kinematics를 계산할 때 solver에 전달되는 joint position은 반드시 KinematicsSolver.get_joint_names()의 출력과 일치해야 한다.

==> 마찬가지로 inverse kinematics의 출력도 KinematicsSolver.get_joint_names()와 동일한 shape를 가진다.
robot Articulation과 KinematicsSolver 사이의 매핑 계층은 Articulation Kinematics Solver class에서 제공한다.

 

Frame Names

- KinematicsSolver class의 인스턴스는 KinematicsSolver.get_all_frame_names() 함수를 반드시 구현해야 하며, 이를 통해  forward kinematics 또는 inverse kinematics를 풀 때 이름으로 참조할 수 있는 로봇 kinematics chain 상의 frame 목록을 제공해야 한다.
- KinematicsSolver가 반환하는 frame name은 robot Articulation에 존재하는 frame과 반드시 일치할 필요는 없다. joint name과 마찬가지로, frame name은 각 solver의 config file structure에서 정의됩니다.

 

 

Robot Base Pose

- Motion Policy Algorithm과 마찬가지로, KinematicsSolver interface에는 호출자가 robot base의 위치를 지정할 수 있도록 set_robot_base_pose() 함수가 포함되어 있다.

- 이 함수가 호출되면 KinematicsSolver는 forward kinematics와 inverse kinematics를 계산할 때 적절한 transformation을 적용해야 한다.

- KinematicsSolver는 world coordinate에서 동작한다.
- forward kinematics의 해는 robot base pose에 따라 translation 및 rotation이 적용되어, world frame 기준의 end effector position으로 반환된다.

- inverse kinematics의 입력 역시 world coordinate로 제공되며, robot base frame 기준이 되도록 변환된다.
- solver 입력을 robot base frame 기준으로 사용하고 싶다면, robot base pose를 origin으로 설정하면 됩니다.

 

Collision Awareness

- KinematicsSolver class의 구현체는 외부 객체와의 collision awareness를 반드시 지원할 필요는 없지만, 선택적으로 지원할 수 있다.

- 특정 KinematicsSolver가 collision avoidance를 지원하는지 나타내기 위해 KinematicsSolver.supports_collision_avoidance() -> bool 함수를 구현해야 한다.

- KinematicsSolver가 collision avoidance를 지원하는 경우, MotionPolicy와 동일한 world function 집합을 구현할 수 있다(Inputs: World State).

- solver가 collision aware하다면 robot base pose를 정확히 지정하는 것이 특히 중요하다.

- 객체의 위치는 world frame 기준으로만 조회할 수 있기 때문에, obstacle의 위치를 robot 기준으로 계산하는 책임은 solver에 있다.

 

Articulation Kinematics Solver

- ArticulationKinematicsSolver class는 robot Articulation과 Kinematics Solvers 구현체 사이의 매핑을 처리하기 위해 존재한다.

 

Forward Kinematics

- ArticulationKinematicsSolver는 KinematicsSolver의 forward kinematics function을 감싸서, robot Articulation의 joint position을 조회하고 이를 KinematicsSolver.get_joint_names()에서 지정한 순서에 맞게 KinematicsSolver에 전달한다.
이를 통해 시뮬레이션된 로봇 end effector의 현재 위치를 쉽게 조회할 수 있습니다.

 

Inverse Kinematics

- ArticulationKinematicsSolver는 inverse kinematics 결과를 robot Articulation에 직접 적용할 수 있는 ArticulationAction 형태로 반환한다.

- 또한 이 메서드가 호출되는 시점의 현재 robot Articulation joint position은 IK 계산의 warm start로 자동 사용됩니다.

 

 

Lula Kinematics Solver

LulaKinematicsSolver는 Kinematics Solvers interface를 구현한다.

이 solver는 world 내 객체와의 collision avoidance는 지원하지 않는다.
KinematicsSolver interface에 포함된 함수 외에도, LulaKinematicsSolver는 내부 설정을 변경하기 위한 getter와 setter를 제공한다.

예를 들어 LulaKinematicsSolver.set_max_iterations()를 사용하면 IK 계산이 실패를 반환하기 전까지의 최대 iteration 수를 설정할 수 있다.

 

 

Lula Kinematics Solver Configuration

새로운 로봇에 대해 Lula Kinematics를 설정하려면 두 개의 파일이 필요합니다.

 

첫째, URDF (universal robot description file) 가 필요하다.

이 파일은 robot kinematics와 joint 및 link name을 지정하는 데 사용된다. 또한 각 joint에 대한 position limit도 필요하다.

URDF 안의 다른 속성들은 무시되므로 생략할 수 있다.

여기에는 mass, moment of inertia, visual mesh, collision mesh 등이 포함됩니다.

 

둘째, YAML 형식의 supplemental robot description file 이 필요하다.

이 파일은 로봇의 configuration space(c-space)를 정의하는 actuated joint 목록을 나열할 뿐 아니라, default c-space configuration을 지정하는 섹션도 포함한다. 또한 unactuated joint의 고정 위치를 지정하는 데에도 사용할 수 있다.