코딩 및 기타

[isaac sim] [node]Differential controller , Articulation Controller , issac read simulation time , isaac simulation gate

정지홍 2026. 2. 28. 15:49

Differential controller

  • differential drive(차동구동) 로봇용 컨트롤러 노드이다.
  • 입력으로 "원하는 선속도/각속도"를 받으면, 로봇의 "좌/우 바퀴 속도"로 바꿔서 내보내준다.
    • Desired Angular Velocity : 원하는 회전 속도.  
    • Desired Linear Velocity : 원하는 전진 속도
    • dt : 시간 간격(초). 보동은 on playback tick.Delta seconds를 연결함.
    • wheel Distance : 좌우 바퀴 사이의 거리
    • wheel Radius : 바퀴의 반지름
    • Max Linear Speed / Max Angular Speed: 속도 제한
    • Max Acceleration / Max Deceleration: 선속도 가감속 제한
    • Max Angular Acceleration: 각속도 가속 제한
    • Max Wheel Speed: 바퀴 회전 속도 제한(라디안/초 같은 단위) 
  • 출력
    • velocity command : 계산된 휠 속도 명령(좌/우) 같은 형태로 나간다. 보통 다음 단계의 "바퀴 조인트에 속도 적용:노드로 연결함 

 

 


 

Articulation Controller

  • articulation(관절로 구성된 로봇)을 대상으로, 지정한 joint들에 제어 명령(위치/속도/힘)을 넣어주는 역할이다.
  • Target Prim / Robot Path : 어떠한 로봇을 제어할지 
    • Targer Prim에는 보통 직접 타켓 prim을 넘긴다.
    • Robot Path에는 로봇 prim 경로를 넣는다
  • Joint Names / Joint Indices : 어떤 joint를 제어한지 선택
    • joint names에 left_wheel_joint , right_wheel_joint같은 이름을 넣은 방식이 흔함.
  • velocity command : 선택한 joints에 대한 목표속도
  • position command : 목표 위치
  • Effort command : 토크/힘
  • exec in : 실행 트리거 

 

 


issac read simulation time

  • 현재 시뮬레이션 시간을 읽어서 출력함.
    • reference time denominator(분모) / reference time numerator(분자) : 시간 기준을 분수형태로 잡는 옵ㅂ션 
    • reset on stop : 타임라인을 stop했을때, 시간을 0으로 리셋할지 여부
    • simulation time : 이는 출력이며, 현재 시뮬레이션의 누적 시간을 의미한다.

 


 

isaac simulation gate

  • exec(실행) 신호를 "시뮬레이션 스텝 기준으로 걸러서" 통과시키는 게이트/디바이더이다.
  • exec in으로 들어오는 "매 틱 실행을" step값에 맞춰서, N스텝마다 한번만 exec out으로 내보낸다.
  • 즉, on playback tick처럼 매 프레임/매 틱마다 도는 흐름을 "2스텝 마다","10스텝 마다"같은 식으로 주기를 낮출때 사용한다.
    • step : 몇 스텝마다 통과 시킬지 여부
      • step = 1이라면, 매 스텝 통과
      • step = 2라면, 2스텝마다 1번 통과
      • step = 10이라면, 10스텝마다 통과
    • exec out은 조건을 만족할때만 나가는 실행 트리거 

 

 


ros2 publish clock

  • isaac sim의 시뮬레이션 시간을 ros2의 clock토픽으로 publish해서, ros쪽 노드들이 "시뮬레이션 시간"을 기준으로 돌아가게 함.
    • ros2에서 use_sim_time:=true로 설정한 노드들은 /clock이 들어와야 시간이 진행된다... 따라서 isaac sim을 "시뮬레이터 시간의 마스터"로 사용하기 위해서 필수다.
  • exec in : 매 틱마다 publish하도록 트리거 연결
  • context : ros2 context 출력 연결
  • time stamp : 퍼블리시할 시간 값