Post

20260914-20260922 주간학습정리

20260914-20260922 주간학습정리

이번 주 목표

지난주에 C++ 언어 공부를 마치고, 이번 주에는 Gazebo를 이용한 로봇팔 시뮬레이션을 진행했다.

최종 목표는 가상의 공간에서 로봇팔이 사람의 개입 없이 공을 집어 바구니에 넣도록 만드는 것이다.

이를 위해 다음과 같은 순서로 작업을 계획했다.

  1. 로봇팔, 바구니, 공을 시뮬레이션하기 위한 모델 구축
  2. 키보드로 로봇팔을 움직이는 기능 구현
  3. 로봇팔이 공을 집어 바구니에 넣는 Pick & Place 기능 구현

완료한 작업

이번 주에는 1단계와 2단계를 완료했다.

  • 로봇팔, 바구니, 공을 포함한 Gazebo 시뮬레이션 모델 구축
  • 키보드 입력을 이용한 로봇팔 제어

처음 선택한 로봇팔 모델에는 그리퍼가 부착되어 있지 않았다. 여러 방법을 검토한 뒤 RG2 그리퍼가 포함된 모델로 변경했고, 해당 모델을 이용해 로봇팔을 움직이는 데 성공했다.

Pick & Place 구현 계획

아직 Pick & Place 기능은 구현하지 않았으며, 이번 주 남은 기간에 고정 joint waypoint 기반으로 구현할 예정이다.

현재는 역기구학을 적용하지 않고, 미리 정의한 pose와 joint waypoint를 순서대로 실행하는 방식으로 먼저 동작을 완성하려고 한다. 처음부터 모든 로봇공학 기술을 적용하기보다, 동작 성공에 필요한 최소 시스템을 구현한 뒤 점진적으로 기능을 발전시키는 방향을 선택했다.

이후에는 다음 순서로 기능을 확장할 계획이다.

IK → Trajectory / Motion Planning → TF2 → Vision → Feedback

상태 머신 설계

자동 동작은 다음 순서의 상태 머신으로 구현한다.

1
2
3
4
5
6
7
8
9
10
11
12
HOME
  -> OPEN_GRIPPER_FOR_PICK
  -> APPROACH_BALL
  -> LOWER_TO_BALL
  -> CLOSE_GRIPPER
  -> LIFT_BALL
  -> MOVE_ABOVE_BASKET
  -> LOWER_INTO_BASKET
  -> RELEASE_BALL
  -> RETREAT
  -> RETURN_HOME
  -> DONE

상태별 의미

상태동작
HOME시작 시 로봇의 기준 관절 자세. 완료 후에도 이 자세로 돌아온다.
OPEN_GRIPPER_FOR_PICK공에 접근하기 전에 RG2 손가락을 완전히 연다.
APPROACH_BALL공과 충돌하지 않도록 공 위쪽의 접근 자세로 이동한다.
LOWER_TO_BALL그리퍼가 공을 감쌀 수 있는 높이까지 천천히 내려간다.
CLOSE_GRIPPER두 손가락을 닫아 공을 잡는다. 닫힌 뒤 안정화 대기 시간을 둔다.
LIFT_BALL공을 바닥에서 들어 올려 운반 높이까지 올린다.
MOVE_ABOVE_BASKET공을 충분히 높이 든 상태로 바구니 위쪽으로 이동한다.
LOWER_INTO_BASKET공을 바구니 내부의 놓기 위치까지 내린다.
RELEASE_BALL그리퍼를 열어 공을 바구니에 놓는다.
RETREAT바구니와 충돌하지 않도록 위쪽으로 후퇴한다.
RETURN_HOME사전에 정의한 홈 자세로 복귀한다.
DONE동작 완료를 로그로 알리고 다음 시작 입력을 대기한다.

현재는 정상 동작 흐름을 먼저 구현하고, 이후 다음과 같은 실패 처리도 추가할 예정이다.

  • waypoint 도착 여부 확인
  • 그리퍼 동작 완료 여부 확인
  • 공을 제대로 잡았는지 확인
  • 이동 실패나 충돌 발생 시 동작 중단 및 오류 상태 전환

학습한 내용

이번 주 남은 계획

이번 주 남은 기간에는 다음 작업을 진행한다.

  • 고정 joint waypoint 기반 Pick & Place 기능 구현
  • 공을 집고 놓는 각 단계의 waypoint 정의
  • 정상 동작 흐름을 상태 머신으로 연결
  • Gazebo에서 반복 실행하며 충돌과 위치 오차 확인
This post is licensed under CC BY 4.0 by the author.