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

[UnrealRobotics: SO-101] (9) 실물 로봇 + RViz 실시간 동기화

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

 

 

 


 

 

1단계: 로봇 연결

Windows PowerShell에서 아래 명령어로 현재 현재 USB 상태 확인

usbipd list

 

 

내 로봇의 STATE가 Attached 상태가 아니라면 예전에 만들었던 프로필 함수를 통해 등록하거나

Attach-Both

 

 

프로필 함수가 없다면 BUSID를 보고 수동으로 attach 한다.

usbipd attach --wsl --busid 1-7
usbipd attach --wsl --busid 3-2

 

 

예전에 만들었던 프로필 함수를 통해서 Attached 상태로 전환됐다.

 

 

이제 WSL2로 넘어가서 장치가 잘 잡혀 있는지 확인 및 권한 설정

ls -l /dev/ttyACM*

sudo chmod 666 /dev/ttyACM* #권한 설정

 

 


 

 

2단계: lerobot_worker.py 실물 연결 실행

source ~/miniforge3/etc/profile.d/conda.sh
conda activate lerobot
cd ~/UnrealRobotics/src/lerobot_ros2_bridge
python scripts/lerobot_worker.py

팔로워, 리더 정상 연결 확인, 30Hz로 관절 데이터 발행이 시작 확인.

 

 


 

 

3단계: ROS2 파이프라인 기동

터미널 3개를 추가로 열어서 실행해야 한다.

 

 

터미널 2 - ROS2 Bridge Node:

export PATH=$(echo $PATH | tr ':' '\n' | grep -v miniforge | tr '\n' ':' | sed 's/:$//')
source /opt/ros/humble/setup.bash
source ~/UnrealRobotics/install/setup.bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export ROS_LOCALHOST_ONLY=1
ros2 run lerobot_ros2_bridge bridge_node

 

 

터미널 3 - robot_state_publisher:

export PATH=$(echo $PATH | tr ':' '\n' | grep -v miniforge | tr '\n' ':' | sed 's/:$//')
source /opt/ros/humble/setup.bash
source ~/UnrealRobotics/install/setup.bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export ROS_LOCALHOST_ONLY=1
xacro ~/UnrealRobotics/src/so101_description/urdf/so101_arm.urdf.xacro variant:=follower > /tmp/so101_follower.urdf
python3 -c "
import yaml
with open('/tmp/so101_follower.urdf') as f: urdf = f.read()
params = {'robot_state_publisher': {'ros__parameters': {'robot_description': urdf}}}
with open('/tmp/rsp_params.yaml', 'w') as f: yaml.dump(params, f, default_flow_style=False)
"
ros2 run robot_state_publisher robot_state_publisher --ros-args --params-file /tmp/rsp_params.yaml

 

 

터미널 4 - RViz2:

export PATH=$(echo $PATH | tr ':' '\n' | grep -v miniforge | tr '\n' ':' | sed 's/:$//')
source /opt/ros/humble/setup.bash
source ~/UnrealRobotics/install/setup.bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export ROS_LOCALHOST_ONLY=1
rviz2

 

 

모든 터미널이 에러 없이 돌아간다면 Rviz가 실행된다.

RobotModel을 추가하고 FixedFrame 설정, /robot_description 설정하면 화면에 로봇이 등장한다. (이전 글 참고)

 

 

현재 상태로는 RViz 모델은 Follower 암을 따라가도록 되어 있어서 Follower 암을 손으로 움직이면 RViz 모델도 움직이는 것을 볼 수 있다. (모터 토크 때문에 살짝씩밖에 움직이지 않았다.)

 

 

하지만 우리는 Leader 암을 움직였을 때 Follower 암이 따라 움직이면서 RViz 모델도 움직이는 것을 원하기 때문에 추가 작업을 해야한다.

 

 


 

 

4단계: lerobot_worker.py 수정으로 텔레오퍼레이션 추가

WSL 프로젝트 경로에 업데이트된 파이썬 스크립트 덮어쓰기 (설정은 이전 글 참고)

UnrealRobotics\src\lerobot_ros2_bridge\scripts

lerobot_worker.py
0.01MB

 

변경 사항

  • --teleop 플래그 추가: 활성화하면 leader 값을 매 루프마다 follower에 send_action()으로 전달
  • 텔레옵 시작 전 Enter 키 대기: leader를 안전한 위치로 먼저 잡을 시간을 줌
  • 텔레옵 후 follower를 다시 읽어서 실제 반영된 위치를 ZMQ로 발행

 

터미널1에서 명령어 실행 (2, 3, 4모두 작동 중이어야 함)

cd ~/UnrealRobotics/src/lerobot_ros2_bridge
python scripts/lerobot_worker.py --teleop

 

 

결과적으로 리더암을 움직이면 팔로워암도 움직이고 화면의 RViz도 같이 움직이면 성공이다.

왼쪽이 팔로워암, 오른쪽이 리더암, 화면에 RViz 모델

 

 


 

 

작업 완료 내용

  • 실물 로봇 연결 검증 완료
    • Follower 관절 데이터 → ZMQ → ROS2 → RViz 실시간 반영 확인
    • Leader 관절 데이터도 /leader_joint_states로 정상 발행 확인
  • 텔레옵 모드 추가
    • --teleop 플래그로 leader → follower 실시간 텔레오퍼레이션 구현
    • Leader 움직이면 follower가 따라가고 + RViz 3D 모델도 동시 업데이트

 

 


 

 

 

728x90
반응형