부트캠프에 참여하면서 파이썬과 컴퓨터비전을 배웠고 지금은 ROS2에 대해 배우고 있으며 ROS2를 마치면 데브옵스를 간단하게 배우고 바로 실무 프로젝트에 들어간다.
이번 포스팅에서는 실무 프로젝트에서 다루게 될 자율 주행과 산업용 로봇에 대해 예습하고자 한다.
자율주행은 단순히 로봇이 정해진 목적지까지 이동하는 것을 넘어, 복잡하고 동적인 환경 속에서 실시간으로 상황을 인지하고 최적의 판단을 내리는 종합적인 소프트웨어 아키텍처이다. 실제로 자율주행 시스템을 개발할때 주요 과제들은 다음과 같다.
로봇의 눈 역할을 담당하는 기초적이고 핵심적인 단계이다.
AI Vision 객체 인식: 2차원 카메라 데이터에 OpenCV와 딥러닝 기반의 객체 탐지 모델을 적용하여 주행 경로 상의 사람, 장애물, 특정 표식 등을 실시간으로 식별한다.
Point Cloud 3D 공간 분석: 2D 이미지의 한계를 극복하기 위해 라이다(LiDAR)나 뎁스 카메라를 활용한다. 수많은 점들의 집합인 3D Point Cloud 데이터를 분석하여, 장애물과의 정확한 거리, 부피, 그리고 전반적인 공간의 형태를 입체적으로 파악한다.
💡 3D Point Cloud Processing and Learning for Autonomous Driving 논문
인지한 데이터를 바탕으로 로봇의 뇌와 발이 유기적으로 움직이는 과정이다.
SLAM 지도 생성: 미지의 공간에 로봇을 투입하여 실시간으로 주변 환경을 스캔하고 정밀한 환경 지도를 작성함과 동시에 로봇의 현재 위치를 추정한다.
경로 계획 및 Navigation 튜닝: 작성된 지도 위에서 목적지까지 이동하기 위한 전역 경로(Global Path)를 생성하고, 주행 중 갑자기 나타나는 동적 장애물을 부드럽게 회피하는 지역 경로(Local Path)를 생성한다. 실제 주행 환경에 맞춰 로봇이 안정적으로 주행할 수 있도록 ROS2 NAV2 스택의 다양한 파라미터를 세밀하게 튜닝하는 고난도 작업이 요구된다.
Navigation Stack(NAV2) : 로봇이 주어진 지도 상에서 스스로 위치를 추정하고, 경로를 계획하고, 목표까지 이동하도록 하는 ROS2 패키지
NAV2는 AMCL, Planner ,Controller, Costmap, BT Navigator 등 여러 노드를 가지는데 특히 Controller과 Costmap, AMCL의 파라미터를 튜닝하는 것이 자율주행의 성능을 크게 좌우한다.
단일 로봇의 한계를 넘어, 여러 대의 로봇(Multi-Robot System)이 유기적으로 상호작용하는 고도화된 단계이다.
ROS2의 강력한 통신 미들웨어(DDS)를 활용해 각 로봇의 현재 위치, 배터리 상태, 센서 데이터 등을 실시간으로 공유한다.
이러한 상태 공유를 바탕으로 좁은 통로에서 서로 동선이 겹치지 않게 교차 주행을 하거나, 단일 로봇으로는 처리하기 힘든 복잡한 협력 미션을 자동으로 분담하고 수행하도록 알고리즘을 설계한다.
시스템 관리자가 로봇들의 상태를 한눈에 파악하고 통제할 수 있는 '중앙 통제실' 역할을 한다.
다수의 로봇이 보내는 방대한 데이터를 수집하여 웹 기반 대시보드나 전용 GUI 환경에 시각화한다.
로봇의 주행 상태, 에러 로그, 카메라 스트리밍 화면 등을 실시간으로 모니터링하며, 비상 상황(예: 경로 이탈, 장애물 고립 등) 발생 시 관리자가 즉각적으로 개입하여 로봇을 원격으로 안전하게 제어할 수 있는 직관적인 인터페이스를 구축해야 한다.
산업용 로봇(다관절 로봇 암, AGV 등)은 스마트 팩토리나 물류 현장에서 사람을 대신해 위험하거나 반복적인 작업을 수행합니다. 공정의 효율을 극대화하고 작업자의 안전을 보장하기 위해, 실무 프로젝트에서는 다음과 같은 과제들을 해결해야 한다.
URDF 로봇 모델링 및 TF(Transform) 좌표계 동기화
산업 현장에서는 밀리미터 단위의 오차도 불량으로 이어진다.
로봇 모델링: URDF(Unified Robot Description Format)를 이용해 로봇의 각 관절(Joint)과 뼈대(Link)의 물리적 속성(길이, 무게 중심 등)을 3D 소프트웨어 상에 완벽하게 구현해야 한다.
TF 좌표계 제어: 로봇 팔이 움직일 때마다 복잡하게 얽힌 수많은 관절의 좌표계를 실시간으로 계산하여, 로봇의 끝단(End-effector)이 목표한 위치와 각도로 정확히 이동하도록 제어하는 수학적 기구학 연산이 필수적이다.
Gazebo 기반 물리 엔진 시뮬레이션 및 충돌 회피 검증
실제 산업용 장비는 수천만 원을 호가하며, 오작동 시 대형 사고로 이어질 수 있다.
실제 하드웨어에 코드를 적용하기 전, 중력, 마찰력, 관성 등 실제 물리 법칙이 적용된 Gazebo 시뮬레이션 환경에서 수백 번의 가상 테스트를 거쳐야 한다.
이 가상 공간에서 로봇이 주변 구조물이나 다른 로봇과 부딪히지 않도록 충돌 회피 알고리즘을 철저하게 검증하여 위험 요소를 사전에 차단한다.
Action 프로그래밍을 활용한 장시간 작업 및 피드백 루프 구축
"A 라인에서 부품을 집어 B 라인의 상자에 조립하라"와 같은 명령은 실행에 긴 시간이 소요된다.
단순한 일회성 통신이 아니라, 로봇이 현재 작업을 몇 퍼센트 진행했는지 관리자에게 지속해서 피드백을 주어야 한다.
돌발 상황 발생 시 진행 중인 공정을 즉각적이고 안전하게 취소(Cancel)할 수 있도록 ROS2의 Action 비동기 통신 아키텍처를 정교하게 설계해야 한다.
Lifecycle 및 Component를 통한 무중단 운영과 Fail-Safe
공장 라인이 멈추는 것은 곧 막대한 금전적 손실을 의미하므로, 24시간 멈추지 않는 시스템 안정성이 요구된다.
Lifecycle 노드 관리: 시스템 노드의 상태(설정, 대기, 활성화, 오류 등)를 엄격하게 제어하여, 예상치 못한 에러가 발생해도 전체 시스템이 다운되지 않고 안전한 상태(Fail-Safe)로 전환되도록 설계한다.
Component 기반 자원 최적화: 다수의 로봇 제어 프로세스를 효율적으로 메모리에 적재하여 연산 자원 소모를 줄이고 통신 속도를 극대화한다.