지난번 간단한 robot arm 설계 경험 바탕으로 나만의 8dof exo 설계
![[ROS2 robot arm 만들기][8 DOF exoskeleton][2]- exoskeleton 설계 및 URDF export 하여 ROS2 (gazebo) 연동 1 image 30](https://i0.wp.com/openpj.co.kr/wp-content/uploads/2025/09/image-30.png?resize=750%2C356&ssl=1)
![[ROS2 robot arm 만들기][8 DOF exoskeleton][2]- exoskeleton 설계 및 URDF export 하여 ROS2 (gazebo) 연동 2 image 31](https://i0.wp.com/openpj.co.kr/wp-content/uploads/2025/09/image-31.png?resize=750%2C408&ssl=1)
이전 포스팅에서 설명한 ACDC4Robot add-in 을 통해 URDF 추출 하였고
URDF viewer 를 통해 잘 되었는지 확인 (ROS 환경, 우분투 환경 테스트 전)
![[ROS2 robot arm 만들기][8 DOF exoskeleton][2]- exoskeleton 설계 및 URDF export 하여 ROS2 (gazebo) 연동 3 image 32](https://i0.wp.com/openpj.co.kr/wp-content/uploads/2025/09/image-32.png?resize=750%2C532&ssl=1)
![[ROS2 robot arm 만들기][8 DOF exoskeleton][2]- exoskeleton 설계 및 URDF export 하여 ROS2 (gazebo) 연동 4 image 33](https://i0.wp.com/openpj.co.kr/wp-content/uploads/2025/09/image-33.png?resize=750%2C521&ssl=1)
각 관절 각도를 바꾸어 보면서 내가 의도한 대로 설계 되었는지 확인.
필요에 따라 각 관절의 min max 수정하여 다시 URDF 추출
3. Rviz2
ros2 launch robot_arm_viewer view_urdf.launch.py
![[ROS2 robot arm 만들기][8 DOF exoskeleton][2]- exoskeleton 설계 및 URDF export 하여 ROS2 (gazebo) 연동 5 image 34](https://i0.wp.com/openpj.co.kr/wp-content/uploads/2025/09/image-34.png?resize=750%2C548&ssl=1)
전체 시스템 개요 및 코드 분석 (+개선 방향)
위 영상과 같이 아직은 지연이 큰 상황. 전체적인 현재 코드 검토 진행
![[ROS2 robot arm 만들기][8 DOF exoskeleton][2]- exoskeleton 설계 및 URDF export 하여 ROS2 (gazebo) 연동 6 image 35](https://i0.wp.com/openpj.co.kr/wp-content/uploads/2025/09/image-35.png?resize=750%2C98&ssl=1)
communication architecture of the ROS2 upper limb exoskeleton robot control system using 3 IMUs. IMU sensor nodes publish orientation data to a IK node, which computes robot joint angles. These angles drive both a rviz2(for visualization) and a motor control node.
An upper_limb_ik python node subscribes to all three IMU topics, performs inverse kinematics calculation to estimate the arm’s joint angle, and publishes the results as two separate topics.
A joint_state_bridge Python node subscribes to cmd_degs and converts it into a standard sensor_msgs/JointState message on the /joint_states topic. Meanwhile, a C++ node(test_pos8) subscribes to robot_degs to drive the actual motors (9 Dynamixel servos) via serial commands.
IMU
# In ebimu_publisher.py
ser = serial.Serial(port=comport_num, baudrate=115200, timeout=0.05)
…
self.timer = self.create_timer(0.005, self.timer_cb) # 500 Hz timer
def timer_cb(self):
raw = ser.readline()
if not raw:
return
s = raw.decode('utf-8', errors='ignore').strip()
vals = re.findall(r'[-+]?\d+(?:\.\d+)?', s)
if len(vals) < 3:
return
roll_s = float(vals[0]); pitch_s = float(vals[1]); yaw_s = float(vals[2])
…
self.pub.publish(msg)
0 Comments