1. 프로젝트 개요

  • 기간: 2024.09 ~ 2024.12
  • 형태: 석사과정 로봇공학 팀프로젝트
  • 목표:
    • Dynamixel 기반 4족 보행 로봇 직접 제작
    • IK 기반 보행 모션 구현
    • YOLO 기반 목표 인식 및 추종
    • 목표 지점까지 이동하는 통합 로봇 시스템 구현

2. 시스템 구성 요소

2.1 Hardware

  • 3D 프린팅 기반 로봇 프레임
  • Dynamixel 모터
  • OpenCR 제어보드
  • Jetson 보드
  • Depth Camera
  • 배터리 및 전원 시스템

2.2 Software / Control

  • C++
  • Python
  • ROS
  • Inverse Kinematics
  • Dynamixel 제어
  • YOLO 기반 target detection
  • Jetson 고수준 제어
  • OpenCR 저수준 제어

3. 팀 역할 분담

팀원 1

  • 로봇 외형 3D 설계
  • 프레임 제작 및 조립

본인 역할

  • 로봇 조립
  • 다리 관절 IK 기반 보행 모션 생성
  • OpenCR 기반 Dynamixel 저수준 제어
  • 보행 시퀀스 구현 및 테스트

팀원 3, 4

  • YOLO 타겟 학습
  • Depth Camera 기반 목표 인식
  • Jetson 고수준 제어
  • 이동 알고리즘 구현

4. 내가 담당한 주요 작업

4.1 IK 기반 보행 모션 생성

  • 한쪽 다리를 2-link 구조로 단순화
  • 발끝 목표 위치를 기준으로 hip, knee 관절각 계산
  • 계산된 관절각을 시간 순서에 따라 시퀀스로 정리
  • 보행 중 다리의 swing phase와 stance phase를 고려하여 모션 구성
indexphasex[cm]z[cm]q1[deg]q2[deg]
1stance3.00014.000-14.41453.018
2stance2.33314.000-18.03054.985
3stance1.66714.000-21.42656.430
4stance1.00014.000-24.60457.380
5stance0.33314.000-27.56257.851
6stance-0.33314.000-30.29057.851
7stance-1.00014.000-32.77657.380
8stance-1.66714.000-35.00456.430
9stance-2.33314.000-36.95554.985
10stance-3.00014.000-38.60453.018
11swing-3.00014.000-38.60453.018
12swing-2.33312.974-44.72069.050
13swing-1.66712.072-48.25280.783
14swing-1.00011.402-49.34088.655
15swing-0.33311.046-48.04692.635
16swing0.33311.046-44.58992.635
17swing1.00011.402-39.31588.655
18swing1.66712.072-32.53180.783
19swing2.33312.974-24.32969.050
20swing3.00014.000-14.41453.018

4.2 OpenCR 기반 Dynamixel 저수준 제어

#include <DynamixelWorkbench.h>
 
  
 
/* -------------------------------------------------------------------------- */
 
/* Hardware / communication settings                                          */
 
/* -------------------------------------------------------------------------- */
 
  
 
#if defined(**OPENCM904**)
 
#define DEVICE_NAME "3"
 
#elif defined(**OPENCR**)
 
#define DEVICE_NAME ""
 
#endif
 
  
 
#define BAUDRATE   57600
 
  
 
#define VEL_STAND  50
 
#define VEL_GAIT   80
 
#define GAIT_DT    25
 
  
 
/* Leg joint IDs: upper = hip, lower = knee */
 
#define DXL_ID_1   1   // FL hip
 
#define DXL_ID_2   2   // FL knee
 
#define DXL_ID_3   3   // FR hip
 
#define DXL_ID_4   4   // FR knee
 
#define DXL_ID_5   5   // RR hip
 
#define DXL_ID_6   6   // RR knee
 
#define DXL_ID_7   7   // RL hip
 
#define DXL_ID_8   8   // RL knee
 
  
 
/* Shoulder joints are fixed during planar gait control. */
 
#define DXL_ID_9   9
 
#define DXL_ID_10 10
 
#define DXL_ID_11 11
 
#define DXL_ID_12 12
 
  
 
#define MX64_P_GAIN 850
 
#define MX64_I_GAIN 0
 
#define MX64_D_GAIN 0
 
  
 
#define MX28_P_GAIN 850
 
#define MX28_I_GAIN 0
 
#define MX28_D_GAIN 0
 
  
 
#define SHOULDER_FIXED_DEG 0.0
 
  
 
/* -------------------------------------------------------------------------- */
 
/* Precomputed IK gait table                                                  */
 
/* -------------------------------------------------------------------------- */
 
  
 
#define N_GAIT 20
 
  
 
/* Knee trajectory is shared by forward and backward gait. */
 
const float gait_L[N_GAIT] = {
 
-53.0, -55.0, -56.4, -57.4, -57.9,
 
-57.9, -57.4, -56.4, -55.0, -53.0,
 
-53.0, -69.0, -80.8, -88.7, -92.6,
 
-92.6, -88.7, -80.8, -69.0, -53.0
 
};
 
  
 
/* Hip trajectory for forward motion. */
 
const float gaitF_U[N_GAIT] = {
 
14.4,  18.0,  21.4,  24.6,  27.6,
 
30.3,  32.8,  35.0,  37.0,  38.6,
 
38.6,  44.7,  48.3,  49.3,  48.0,
 
44.6,  39.3,  32.5,  24.3,  14.4
 
};
 
  
 
/* Hip trajectory for backward motion. */
 
const float gaitB_U[N_GAIT] = {
 
38.6,  37.0,  35.0,  32.8,  30.3,
 
27.6,  24.6,  21.4,  18.0,  14.4,
 
14.4,  24.3,  32.5,  39.3,  44.6,
 
48.0,  49.3,  48.3,  44.7,  38.6
 
};
 
  
 
/* Neutral standing pose from the same IK convention. */
 
#define STAND_U  29.0
 
#define STAND_L -58.0
  • OpenCR에서 Dynamixel 모터 ID별 제어
  • IK로 계산된 관절각을 Dynamixel 목표 위치로 변환
  • 관절각 시퀀스를 순차적으로 실행하여 보행 동작 구현

4.3 보행 테스트 및 수정

  • 실제 로봇에서 보행 시퀀스 반복 테스트
  • 발끝 궤적과 실제 다리 움직임 비교
  • 관절각 범위, 보행 주기, 속도 조정
  • 전압 강하와 모터 부하 문제 확인

5. 문제 상황: V1 로봇 실패

발생한 문제

  • 초기 V1 검정 로봇은 전체 무게가 과도했음
  • Dynamixel 모터에 걸리는 부하가 커짐
  • 보행 중 순간적으로 전류 요구량 증가
  • 전압 강하 발생
  • 로봇이 보행 중 셧다운되는 문제 발생

원인 판단

  • 단순한 코드 오류가 아니라 기구부 무게와 모터 출력 한계가 주요 원인
  • 보행 모션을 수정하는 것만으로는 문제 해결이 어려웠음
  • 하드웨어 구조 자체를 수정해야 한다고 판단

6. 해결 과정: V2 로봇으로 변경

수정 방향

  • 로봇 외형 재설계
  • 3D 프린팅 infill 감소
  • 프레임 경량화 (기존: 5kg 변경: 2.7kg)
  • 모터 부하 감소
  • 보행 시퀀스 재검증

결과

  • V2 초록 로봇에서 보행 안정성 개선
  • 전압 강하 문제 완화
  • 실제 보행 동작 구현 성공
  • 목표 인식 및 이동 시나리오까지 통합 성공

7. 최종 통합

  • 팀원이 구현한 YOLO 기반 목표 인식 모듈과 보행 제어부를 통합
  • Jetson에서 목표 인식 및 이동 방향 판단
  • OpenCR에서 보행 명령 실행
  • 로봇이 목표를 인식한 뒤 방향을 전환하고 목적지까지 이동하도록 구성

8. 최종 결과

영상 링크

https://youtu.be/MM9K6MfgT6s
  • V2 로봇에서 4족 보행 구현 성공
  • 목표 인식 후 이동 시나리오 수행
  • 팀 경쟁에서 가장 빠르게 목표를 인식하고 도착
  • 최종 1위 달성

9. 이 프로젝트를 통해 배운 점

  • 로봇 구현에서는 알고리즘뿐 아니라 무게, 전원, 모터 부하 같은 하드웨어 조건이 매우 중요함
  • 시뮬레이션이나 수식상 가능한 보행이라도 실제 로봇에서는 전압 강하, 기구적 간섭, 모터 한계가 발생할 수 있음
  • 문제 원인을 소프트웨어와 하드웨어 양쪽에서 함께 분석해야 함
  • IK 기반 관절각 계산을 실제 Dynamixel 제어로 연결하면서 수학적 모델과 실제 로봇 사이의 차이를 경험함
  • 빠른 변경과 반복 테스트가 실물 로봇 프로젝트에서 중요하다는 것을 배움