┌──────────────────────────────────────────────────────────────────────┐
│ Robot PC │
│ │
│ [Franka Robot] ◄──► [R_Franka_KISTAR_Hand] ◄──► [SHM] │
│ │ │
│ [shm_ros2_bridge] │
│ │ │
└───────────────────────────────────────────────────┼──────────────────┘
│
ROS2 Topics
│
┌───────────────────────────────────────────────────┼──────────────────┐
│ Isaac PC │ │
│ │ │
│ [isaac_ros2_node] │
│ │ │
│ [Isaac Sim 등] │
└──────────────────────────────────────────────────────────────────────┘
- 🚀 Quick Start with Terminal!
enp1s0f0: Kistar_hand enp1s0f3: Isaac_pc realtech: Franka
Terminal 1. Turn on Robot Shared Memeory
sudo su
shm Terminal 2. Turn on ROS2 bridge node
nd (Optional) Useful commands: ros configuration alias
rs sudo su
cd /home/prime/KISTAR_Hand_RTOS-master/Franka_Dual_Arm_PtoP/R_Franka_KISTAR_Hand/build/test
./R_Franka_KISTAR_HandExpected Results:
✅ Shared Memory 연결 성공
🔗 Connecting to Franka...
✅ Connected to Franka at 172.16.0.1
🚀 SHM Target 모드 시작
source /opt/ros/humble/setup.bash
source /home/prime/KISTAR_Hand_RTOS-master/Franka_Dual_Arm_PtoP/R_Franka_KISTAR_Hand/install/setup.bash
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export ROS_DOMAIN_ID=9
export ROS_LOCALHOST_ONLY=0
ros2 topic echo /franka/arm_target/rightcd /home/prime/KISTAR_Hand_RTOS-master/Franka_Dual_Arm_PtoP/R_Franka_KISTAR_Hand
source /opt/ros/humble/setup.bash
source install/setup.bash
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export ROS_DOMAIN_ID=9
export ROS_LOCALHOST_ONLY=0
ros2 run kistar_hand_ros2 shm_ros2_bridgeExpected Results:
✅ Shared Memory 연결 성공
🚀 ROS2-SHM Bridge 노드 시작됨
cd /home/prime/KISTAR_Hand_RTOS-master/Franka_Dual_Arm_PtoP/R_Franka_KISTAR_Hand
source /opt/ros/humble/setup.bash
source install/setup.bash
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export ROS_DOMAIN_ID=9
export ROS_LOCALHOST_ONLY=0
python3 send_arm_target.py
ros2 run rqt_graph rqt_graphUsage:
🚀 Arm Target Sender 시작!
==================================================
1: 안전 포즈
2: 움직임 1
3: 움직임 2
q: 종료
==================================================
포즈 번호 입력 (1/2/3/q): 1
📤 포즈 #1 (안전 포즈) 전송 중...
✅ 전송 완료!
→ 로봇이 해당 포즈로 이동합니다! 🤖
ros2 topic echo /franka/arm_state/right # 상태 출력 확인# 상태 수신 테스트
ros2 topic echo /franka/arm_state/right
# 목표 전송 테스트 (Arm) 예시
ros2 topic pub --once /franka/arm_target/right \
kistar_hand_ros2/msg/FrankaArmTarget \
"{joint_targets: [0.5, -0.6, 0.7, -2.4, -0.02, 1.2, 0.2], arm_id: 0}"
# 목표 전송 테스트 (Hand - 닫기) 예시
ros2 topic pub --once /hand/target/right \
kistar_hand_ros2/msg/HandTarget \
"{joint_targets: [1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000], movement_duration: 1.0, hand_id: 0}"→ 로봇이 움직이면 연결 성공! 🎉
| 토픽 | 방향 | 메시지 타입 | 설명 |
|---|---|---|---|
/franka/arm_state/right |
Robot → Isaac | FrankaArmState | 로봇 현재 상태 (100Hz) |
/franka/arm_target/right |
Isaac → Robot | FrankaArmTarget | 로봇 목표 위치 |
float64[7] joint_positions # 현재 관절 위치 [rad]
float64[7] joint_torques # 현재 관절 토크 [Nm]
uint8 arm_id # 0=Right
float64[7] joint_targets # 목표 관절 위치 [rad]
uint8 arm_id # 0=Right
Robot PC에서 다음 파일들을 복사:
msg/
├── FrankaArmState.msg
├── FrankaArmTarget.msg
├── HandState.msg
└── HandTarget.msg
또는 install/ 폴더 전체를 복사해서 source
양쪽 PC에서 동일하게:
export ROS_DOMAIN_ID=0# Isaac PC에서
ros2 topic list
# 다음 토픽이 보여야 함:
# /franka/arm_state/right
# /franka/arm_target/right| Robot PC | Isaac PC |
|---|---|
| 로봇 제어 + shm_ros2_bridge 실행 | ROS2 노드 실행 |
/franka/arm_state/right publish |
subscribe |
/franka/arm_target/right subscribe |
publish |
양쪽이 같은 네트워크 + 같은 ROS_DOMAIN_ID면 자동 연결!
/home/prime/KISTAR_Hand_RTOS-master/Franka_Dual_Arm_PtoP/R_Franka_KISTAR_Hand/
| 파일 | 경로 | 설명 |
|---|---|---|
| 로봇 제어 | build/test/R_Franka_KISTAR_Hand |
실행 파일 |
| ROS2 브리지 | src/shm_ros2_bridge.cpp |
SHM ↔ ROS2 브리지 소스 |
| Target 전송 | send_arm_target.py |
목표 위치 전송 테스트 |
| SHM 모니터 | monitor_shm.py |
SHM 데이터 모니터링 |
| Isaac 브리지 예제 | isaac_ros2_bridge.py |
Isaac PC용 예제 코드 |
msg/
├── FrankaArmState.msg # 로봇 상태 메시지
├── FrankaArmTarget.msg # 로봇 목표 메시지
├── HandState.msg # 핸드 상태 메시지
└── HandTarget.msg # 핸드 목표 메시지
install/kistar_hand_ros2/
├── lib/kistar_hand_ros2/shm_ros2_bridge # 빌드된 실행 파일
└── share/kistar_hand_ros2/ # 메시지 정의
| 구간 | 주파수 | 설명 |
|---|---|---|
| Franka 제어 루프 | 1kHz | libfranka 기본 (1ms) |
| SHM target 확인 | 1kHz | R_Franka_KISTAR_Hand 루프 |
| SHM → ROS2 (state publish) | 100Hz | shm_ros2_bridge 타이머 (10ms) |
| 환경 | 권장 주파수 | 비고 |
|---|---|---|
| 같은 LAN (1Gbps) | 100-200Hz | Real-time OS 사용 시 |
| 일반 네트워크 | 50-100Hz | 안정성 우선 |
| WiFi | 30-50Hz | 지연 변동 큼 |
현재 코드는 Point-to-Point 이동 방식:
- Target이 0.01rad 이상 변할 때만 새로운 이동 시작
- 실시간 트래젝토리 추종이 아님
# State publish 주파수 확인
ros2 topic hz /franka/arm_state/right
# Target 수신 주파수 확인
ros2 topic hz /franka/arm_target/rightsrc/shm_ros2_bridge.cpp에서:
// 현재: 100Hz (10ms)
timer_ = this->create_wall_timer(10ms, ...);
// 200Hz로 변경
timer_ = this->create_wall_timer(5ms, ...);변경 후 재빌드:
colcon build- Robot PC IP:
(확인 필요) - ROS2 버전: Humble
- ROS_DOMAIN_ID: 9
- RMW_IMPLEMENTATION: rmw_fastrtps_cpp
- 상태 publish 주파수: 100Hz (변경 가능)
작성일: 2026-01-08
Contributor: Jaesung Lee, Chanyoung Ahn