본문 바로가기

로봇

4족 보행 로봇, Unitree 구매 후 개발하기

참조 : https://support.unitree.com/main

 

Unitree 로봇의 상품화 역량이 매우 뛰어난 것 같습니다.

단순히 HW만 잘 만드는 것이 아니라, 구매한 고객들이 응용 SW 를 쉽게 개발할 수 있는 SDK와 개발 문서를 잘 제공하고 있습니다.

https://support.unitree.com/main

 

宇树科技 文档中心

 

support.unitree.com

 

Unitree 4족 보행로봇을 구매 시 개발 방향성에 대해 설명합니다.

1단계: 개발 환경 구축 및 기본 제어 

이 단계의 목표는 Go2 로봇의 포장을 풀고, 개발용 PC와 연결하여 ROS2를 통해 로봇을 움직여보는 것입니다.

  • 준비물:
    • 로봇: Unitree Go2 Pro (전방 카메라 및 3D LiDAR 기본 장착 모델)
    • PC: Ubuntu 22.04가 설치된 노트북 또는 데스크탑
    • 네트워크: 로봇과 PC를 연결할 유무선 공유기
  • 구체적인 실행 절차:
    1. ROS2 설치: PC에 ROS2 Humble 버전을 설치합니다. 아래 명령어를 터미널에 입력합니다.
    2. Bash
       
      sudo apt update && sudo apt install ros-humble-desktop
      
    3. Unitree ROS2 드라이버 설치: Unitree가 제공하는 공식 ROS2 패키지를 다운로드하고 빌드합니다.
    4. Bash
       
      # 1. 작업용 폴더(워크스페이스) 생성
      mkdir -p ~/unitree_ws/src
      cd ~/unitree_ws/src
      
      # 2. 공식 GitHub 저장소에서 소스 코드 복제
      git clone https://github.com/unitreerobotics/unitree_ros2_to_real.git
      
      # 3. 워크스페이스 루트로 이동하여 빌드
      cd ~/unitree_ws
      colcon build --symlink-install
      
      # 4. 터미널에 ROS2 환경 설정 적용
      source install/setup.bash
      
    5. 네트워크 설정: Go2 로봇과 개발용 PC를 동일한 네트워크(공유기)에 연결합니다. Go2의 IP 주소를 확인합니다 (보통 192.168.123.x 대역).
    6. 로봇 구동 및 테스트: 터미널에서 아래 명령어를 실행하여 로봇과의 연결을 시작합니다.
    7. Bash
       
      # 위에서 생성한 워크스페이스의 setup.bash를 먼저 실행해야 합니다.
      ros2 launch unitree_bringup go2.launch.py
      
    8. 결과 확인: 새 터미널을 열고 아래 명령어를 입력했을 때, 로봇의 각종 센서 데이터(IMU, 관절 상태 등)가 실시간으로 출력되면 성공입니다.
    9. Bash
       
      ros2 topic list  # /imu/data, /joint_states 등의 토픽이 보이는지 확인
      ros2 topic echo /imu/data  # IMU 센서 데이터가 수신되는지 확인
      
    • 이 단계의 결과물: ROS2를 통해 로봇의 기본 상태를 모니터링하고 제어할 수 있는 개발 환경 완성.

2단계: 센서 데이터 시각화 및 분석

이 단계의 목표는 Go2에 내장된 3D LiDAR와 카메라의 데이터를 PC에서 실시간으로 확인하고 분석하는 것입니다. 이는 자율 주행의 기초가 됩니다.

  • 구체적인 실행 절차:
    1. RViz2 실행: ROS2의 3D 시각화 도구인 RViz2를 실행합니다.
    2. Bash
       
      rviz2
      
    3. 데이터 시각화:
      • RViz2 좌측 하단의 'Add' 버튼을 클릭합니다.
      • 'By topic' 탭에서 /laser_scan 또는 /pointcloud 토픽을 선택하여 3D LiDAR 데이터를 추가합니다. 로봇 주변 환경이 3D 점으로 표시되는 것을 볼 수 있습니다.
      • 마찬가지로 /camera/color/image_raw 토픽을 선택하여 전방 카메라 영상을 추가합니다. 로봇이 보는 시야를 PC에서 실시간으로 확인할 수 있습니다.
    4. 외부 센서 추가 (선택 사항): 만약 야간 정찰을 위해 열화상 카메라(예: FLIR Boson)를 추가한다면,
      • 물리적 연결: Go2 로봇 몸체 상단의 확장 포트(J5)에서 12V 전원을 인가하고, 이더넷 포트를 통해 카메라와 연결합니다.
      • 소프트웨어 설정: 열화상 카메라 제조사가 제공하는 ROS 드라이버를 설치하고, 실행하여 /thermal/image_raw 와 같은 새로운 토픽으로 데이터를 수신합니다.
  • 이 단계의 결과물: 정찰 임무에 필요한 핵심 센서(LiDAR, 카메라) 데이터를 ROS2 환경에서 실시간으로 시각화하고 사용할 수 있는 상태.

3단계: SLAM을 이용한 자율 주행 및 지도 생성 

가장 핵심적인 단계로, 로봇이 스스로 주변 환경을 인식하여 지도를 만들고(SLAM), 그 지도를 기반으로 목표 지점까지 자율적으로 이동하는 기능을 구현합니다.

  • 구체적인 실행 절차:
    1. SLAM 패키지 설치: ROS2에서 널리 사용되는 slam_toolbox 패키지를 설치합니다.
    2. Bash
       
      sudo apt-get install ros-humble-slam-toolbox
      
    3. SLAM 실행 및 지도 작성:
      • slam_toolbox를 실행하는 launch 파일을 작성합니다. 이 파일에는 LiDAR 토픽 이름(pointcloud 또는 laser_scan)을 slam_toolbox가 요구하는 입력 형식에 맞게 **리맵핑(remapping)**하는 설정이 포함되어야 합니다.
      • 로봇을 조종기(기본 제공 컨트롤러)로 천천히 움직여 정찰할 공간을 돌아다닙니다. RViz2 화면에 실시간으로 지도가 그려지는 것을 확인할 수 있습니다.
    4. 지도 저장: 지도 작성이 완료되면, 아래 명령어로 지도를 파일(my_map.yaml, my_map.pgm)로 저장합니다.
    5. Bash
       
      ros2 run nav2_map_server map_saver_cli -f ~/maps/my_map
      
    6. 자율 주행(Navigation) 패키지 설치 및 설정:
      • ROS2의 내비게이션 스택인 Nav2를 설치합니다.
      • Nav2를 실행하는 launch 파일을 작성합니다. 이 파일에는 위에서 저장한 지도를 불러오고, 로봇의 크기, 최대 속도 등 정찰 임무에 맞는 파라미터를 설정하는 내용이 포함됩니다.
    7. 자율 주행 테스트:
      • RViz2를 실행하고 저장된 지도를 불러옵니다.
      • RViz2 상단의 'Nav2 Goal' 버튼을 클릭하고 지도상의 목표 지점을 클릭합니다.
      • Go2 로봇이 장애물을 피해 스스로 목표 지점까지 이동하는지 확인합니다.
  • 이 단계의 결과물: 특정 공간의 2D 지도가 완성되고, 로봇이 해당 지도 내에서 원하는 지점으로 자율적으로 이동할 수 있는 능력 확보.

4단계: 정찰 애플리케이션 개발 

앞선 단계에서 구현한 자율 주행 플랫폼 위에 실제 정찰 임무를 수행하는 애플리케이션을 개발합니다.

  • 구체적인 실행 절차:
    1. 정찰 경로 설정: 지도 위에 순찰할 여러 경유지(Waypoint) 좌표를 미리 지정합니다.
    2. 경로 순찰 노드 작성 (Python):
      • nav2_simple_commander API를 사용하여 지정된 경유지를 순서대로 로봇에게 목표 지점으로 보내는 Python 스크립트를 작성합니다.
      • 로봇이 각 경유지에 도착하면 잠시 대기하며 주변을 촬영하도록 프로그래밍합니다.
    3. 이상 상황 감지 및 보고 노드 작성 (Python):
      • /camera/color/image_raw 토픽을 구독(subscribe)하는 새로운 Python 스크립트를 작성합니다.
      • OpenCV, YOLOv8과 같은 AI 모델을 활용하여 실시간 영상에서 특정 객체(예: 사람, 차량)를 탐지합니다.
      • 객체가 탐지되면, 해당 이미지와 탐지 시간, 로봇의 현재 위치(좌표)를 로그 파일로 저장하거나 원격 관제소로 전송하는 기능을 구현합니다.
  • 최종 결과물: "지정된 경로를 자율적으로 순찰하며, 이동 중 특이 객체를 발견하면 사진과 위치를 기록하여 보고하는" 완전한 형태의 정찰 로봇 애플리케이션.
반응형