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
변경 사항
- --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도 같이 움직이면 성공이다.

작업 완료 내용
- 실물 로봇 연결 검증 완료
- Follower 관절 데이터 → ZMQ → ROS2 → RViz 실시간 반영 확인
- Leader 관절 데이터도 /leader_joint_states로 정상 발행 확인
- 텔레옵 모드 추가
- --teleop 플래그로 leader → follower 실시간 텔레오퍼레이션 구현
- Leader 움직이면 follower가 따라가고 + RViz 3D 모델도 동시 업데이트
'Unreal Engine > 언리얼-ROS-Physical 통합 프로젝트' 카테고리의 다른 글
| [UnrealRobotics: SO-101] (11) Unreal에 3D 로봇 파트 올리기, 연동 확인 (0) | 2026.05.07 |
|---|---|
| [UnrealRobotics: SO-101] (10) Joint Command 역방향 경로 검증 (ROS → 로봇) (0) | 2026.04.27 |
| [UnrealRobotics: SO-101] (8) 로봇 상태 퍼블리셔(robot_status_publisher) 셋업, Rviz 연결 (0) | 2026.04.21 |
| [UnrealRobotics: SO-101] (7) URDF, Rviz GUI 시각화 (0) | 2026.04.17 |
| [UnrealRobotics: SO-101] (6) SO-ARM-101 조립 (0) | 2026.04.15 |