Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

엔드이펙터 진동 시각화 - Unity 6000.3.2f1

  • 로봇 동역학 모델이 계산한 엔드이펙터 위치를 UDP로 받아 두 가지 방식으로 동시에 보여주는 Unity 환경
  • 화면 위쪽 절반은 파지한 물체를 대신하는 큐브가 움직이는 3D 뷰, 아래쪽 절반은 X, Y, Z 좌표를 나타내는 그래프
  • 왼쪽 그래프에는 X, Y, Z를 겹쳐 그리고, 오른쪽 그래프에는 축별로 나타냄.
  • 로봇 본체는 나타내지 않고 엔드이펙터의 움직임만 표시함.

 

1. 실행 방법

  1. Assets/Scenes/VibrationScene.unity를 열고 Play
  2. Game 뷰 그래프 헤더에 waiting for data on UDP 5005가 표시됨
  3. 진동 신호 sender 파일 실행
  python3 Tools/vibration_sender.py --rate 1000

현재 임의의 감쇄 진동이 포함된 궤적 움직임을 송신하도록 설정

sender에서는 절대 위치(목표 궤적 + 진동)를 보내고, Unity 쪽에서 목표 궤적을 필터링하여 진동만 남김.

 

2. 화면 읽는 법

  • 그래프의 X, Y, Z: 모델 기준 좌표계 축

  • 큐브는 과장, 그래프는 실제값: 진동은 수 밀리미터라 그대로 그리면 큐브의 움직임이 잘 보이지 않으므로 Displacement Gain(기본 100배)으로 오른쪽 큐브의 움직임을 부풀림. 그래프에서는 실제 값 표기.

  • 좌/우 큐브 움직임

    위치 내용
    왼쪽 목표 궤적까지 포함한 전체 움직임. 실제 크기
    오른쪽 목표 궤적을 필터링하고 진동만. 100배로 부풀림
  • 조작

    입력 동작
    우클릭 드래그 회전
    휠 드래그 이동
    스크롤 확대/축소
    R 기준선 재설정 및 그래프 초기화

 

3. 모델 연결

: sender를 가져다 쓰고, 계산 한 스텝마다 send 호출.

from Tools.vibration_sender import VibrationSender

with VibrationSender("127.0.0.1", 5005) as tx:
    for t, (x, y, z) in my_model.run():   # 시간: 초, 위치: 미터
        tx.send(t, x, y, z)
  • 보내는 값은 엔드이펙터의 위치, 속도나 가속도 아님.
  • 시간은 모델 안의 시간을 그대로 넣으면 됨.
  • 좌표계도 모델이 쓰는 것 그대로 사용하며, Unity 쪽에서 Source Frame 설정에 맞춰 변경해줌.

데이터 전송 형식

: 두 가지 설정 존재, Unity 쪽 FormatAuto로 두면 알아서 구분.

  • 숫자 그대로 전송 (기본)

    • 샘플 하나가 t, x, y, z 숫자 네 개, 32바이트.
    • 실제 스트림에서는 이 형식을 사용
  • 글자로 전송 (JSON)

    • 한 줄에 하나씩, 사람이 읽을 수 있는 형태.

      {"t": 0.001, "x": 0.4501, "y": 0.1000, "z": 0.6199}
      
    • 속도 느림. 값이 제대로 나가고 있는지 눈으로 확인할 때만 사용.

 

4. 설정

  • Unity scene 내 오브젝트: Vibration Rig
  • scene 변경사항 적용: Tools ▸ Vibration ▸ Build Visualization Scene -> 코드 변경 후 해당 메뉴를 실행하면 변경사항이 Unity에 적용되며, 인스펙터에서 손으로 바꾼 값은 사라짐.

UdpVibrationReceiver

: 모델로부터 데이터 수신

필드 설명
Port 송신기와 같아야 함. 기본 5005.
Bind Address 비워두면 어느 경로로 오든 다 받음.
Format Auto면 알아서 구분, Binary / Json으로 고정할 수도 있음.
Max Queued Samples 아직 화면에 반영하지 못하고 쌓아두는 데이터의 최대 개수. 넘치면 오래된 것부터 버림.

VibrationVisualizer

: 엔드이펙터 움직임에서 진동만 추출

필드 설명
Source Frame 내 모델이 쓰는 좌표계. 기본은 ZUpRightHanded (ROS 방식: X 앞, Y 왼쪽, Z 위). YUpRightHanded, UnityLeftHanded로 변경 가능.
Baseline 무엇을 "진동 없음"으로 볼지 — 아래 참고.
Baseline Cutoff Hz 목표 궤적과 진동을 가르는 경계 — 아래 참고.
Displacement Gain 큐브 움직임을 몇 배로 부풀릴지. 기본 100배.
Max Visual Offset 값이 튀어도 큐브가 화면 밖으로 날아가지 않게 막는 한계값.
  • 기준선 설정: 큐브는 "기준 자세에서 얼마나 벗어났는가"를 보여주는데, 이 기준을 무엇으로 삼을지 정하는 설정.

    • None — 원점 기준. 모델이 엔드이펙터의 절대 위치가 아닌 "얼마나 벗어났는지"만 보내는 경우 사용.
    • FirstSample — 맨 처음 받은 값 기준. 로봇이 제자리에 서 있을 경우 사용.
    • LowPass — 기준이 목표 궤적을 따라다님. 로봇이 움직이는 중이면 이 설정을 사용.
  • 경계값(Baseline Cutoff Hz) 정하기: 목표 궤적은 느리고 크며, 진동은 빠르고 작음. Baseline Cutoff Hz를 설정(기본 3 Hz)하여 목표 궤적은 필터링하고 진동만 남김.

VibrationPlot

: 그래프

필드 설명
Viewport Rect 그래프 패널의 위치와 크기. 화면 왼쪽 위를 기준으로 한 비율. 기본은 아래쪽 절반.
Small Multiples 축별 그래프를 함께 그릴지. 끄면 겹친 그래프가 전체 폭을 씀.
Overlay Width Fraction 겹친 그래프가 차지하는 가로 비율.
Time Window 화면에 보이는 시간 범위(초).
Capacity 보관하는 값의 개수. 위 시간 범위를 채울 만큼은 되어야 함.
Unit Scale / Unit Label 1000 / mm이면 들어온 미터 값을 밀리미터로 바꿔 보여줌.
Auto Scale 큰 값이 들어오면 세로축을 늘리고, 잦아들면 천천히 되돌림.
Fixed Span / Min Span Auto Scale을 껐을 때의 세로축 크기와, 켰을 때 더는 줄어들지 않는 하한.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages