본문 바로가기
Unreal Engine/언리얼-ROS-Physical 통합 프로젝트

[UnrealRobotics: SO-101] (1) 프로젝트 컨셉 및 방향성

by 테크앤아트 2026. 4. 7.
728x90
반응형

 

 

 


 

Nanobanana Pro 생성

 

프로젝트 컨셉

드디어 나의 오랜 꿈이었던 로봇 디지털 트윈을 이루기 위해서 Physical 로봇을 구매하고 가상 환경과 연동하기로 마음먹었다.

2024년 초 진행했던 '유니티-아두이노 로봇' 프로젝트의 결말이 3D 프린트 부품의 파손 후 복구 불가능으로 결국 좋지 않게 마무리 되었고, 이번에는 인코딩 및 피드백이 가능한 STS3215 모터를 이용하고, ROS를 적용하며, 언리얼 관련 포트폴리오를 쌓기 위한 컨셉을 잡게 되었다.

 

한 마디로 이번 프로젝트는 Physical - ROS - Unreal 단계를 거쳐 현실과 가상을 실시간으로 연결하는 것이다!

 

 

ROS 적용이 가능한 로봇 제품은 비쌌고, ROS 사용이 불가능한 로봇은 싸지만 URDF 작성, ROS2 구현, MoveIt 설정, RViz2 검증을 스스로 해야하기 때문에 시간이 더 걸릴 수 있다. 비교적 저렴한 로봇의 장점은 로봇 시스템의 저수준 구조부터 다룰 수 있다는 점에서 강력한 포트폴리오를 만들 수 있다는 것이다. 따라서, ROS를 바로 사용할 수 있는 비싼 로봇 대신 ROS를 내가 적용해볼 수 있는 SO-ARM-101 로봇을 선택하게 되었다. 단순히 노드만 연결하는 것은 '시스템 통합(SI)' 경험은 되지만, 내 프로젝트는 많은 시행착오를 거치며 로봇의 기초적인 구조까지 이해하고 있다는 것을 보여줄 수 있다.

공식 Hugging Face에 첨부된 로봇 사진

 

이 프로젝트의 핵심은 [실제 로봇팔] ↔ [ROS 2] ↔ [언리얼 엔진] 간의 실시간 저지연 통신양방향 제어이다.

 

728x90

 


 

 

프로젝트의 방향성

내가 직접 세팅할 경우 거치게 되는 과정은 아래와 같다. (Opus+Gemini의 요약)

1단계: 하드웨어 인터페이스 구축
서보모터(보통 STS3215 같은 시리얼 버스 서보)와 컨트롤러 보드 간 통신을 구현합니다. Python이나 C++로 각 STS3215 서보에 목표 각도를 보내고 현재 각도를 읽어오는 저수준 라이브러리를 만드는 단계입니다. Feetech 서보의 UART 프로토콜을 직접 다뤄야 합니다.

2단계: URDF 작성
로봇팔의 물리적 치수를 실측해서 XML로 기술합니다. 각 링크(팔 구간)의 길이, 질량, 관성 모멘트, 각 조인트의 회전축과 제한 범위를 정의해야 합니다. 이때 CAD 도면이 있으면 편하지만, 없으면 버니어 캘리퍼스로 직접 재야 합니다.

3단계: ros2_control Hardware Interface 구현
이게 가장 핵심적인 부분입니다. C++로 hardware_interface::SystemInterface를 상속받아 read()와 write() 함수를 구현합니다. read()에서 서보의 현재 각도를 읽어오고, write()에서 목표 각도를 서보에 전송합니다. 이걸 통해 ROS2 생태계의 모든 컨트롤러(joint_trajectory_controller 등)가 표준적인 방식으로 로봇을 제어할 수 있게 됩니다.

4단계: MoveIt2 설정
MoveIt Setup Assistant를 사용해서 URDF 기반으로 모션 플래닝 설정 파일을 생성합니다. 충돌 매트릭스, 플래닝 그룹, 기구학 솔버(KDL 또는 IKFast) 등을 설정합니다.

5단계: RViz2에서 검증
여기까지 하면 RViz2에서 가상의 로봇팔과 실제 로봇팔이 동기화되는 것을 확인할 수 있습니다. 이 단계가 성공하면 나머지 언리얼 연동은 ROS2 지원 로봇을 산 경우와 동일합니다.

6단계: Unreal 연동
언리얼에 플러그인을 설치해 ROS 토픽을 받아오고, 가상 로봇에 애니메이션을 적용하는 단방향 동기화를 완성합니다.

7단계: 양방향 통신
언리얼에서 핑을 쏘면 실제 로봇이 움직이도록 만들고 최종 영상과 Github README로 정리합니다.

 

 


 

 

 

728x90
반응형