로봇·AMR·VDA5050
AMR(자율주행 이동 로봇)과 관제 시스템을 잇는 소프트웨어를 다룹니다. AGV와 AMR의 차이, 경로 계획에서 미션 실행으로 이어지는 흐름, 그리고 관제 통신 표준인 VDA5050의 order·state·action 구조를 코드와 함께 정리했습니다.
ROS2는 우분투 24.04에서 Jazzy를 설치하는 과정, 통신 계층인 Fast DDS와 Cyclone DDS의 QoS·전송·디스커버리 실험, Gazebo 시뮬레이션 환경 구성을 다룹니다. 로봇 분야를 독학하려는 사람을 위한 자료 고르는 법과 로드맵도 있습니다.
처음 읽기 좋은 글
- 소프트웨어 엔지니어가 알아야 할 AMR 기초: AGV와의 차이, SLAM, 경로 계획, ROS2AMR이 정해진 길을 따라가는 AGV와 어떻게 다른지, SLAM·센서 퓨전·파티클 필터·전역/지역 경로 계획이 어떻게 이어지는지, ROS2의 노드와 토픽 구조가 코드베이스를 읽는 데 왜 필요한지 소프트웨어 엔지니어 관점에서 설명합니다.
- VDA5050으로 AGV·AMR 관제 통신하기: MQTT 토픽, order·state·instantActions, libVDA5050++ C++ 구현VDA5050이 AGV·AMR과 관제 시스템을 MQTT로 표준화하는 방법과 order/state/instantActions 메시지 구조, libVDA5050++ 기반 C++ 구현 예제를 정리합니다.
- 우분투 24.04 ROS 2 Jazzy 설치: apt 저장소 등록부터 talker/listener 테스트, rosdep·colcon, 자주 나는 오류우분투 24.04에 ROS 2 Jazzy를 apt로 설치합니다. 로케일, universe, ros2-apt-source 등록, desktop·ros-base 선택, setup.bash, rosdep·colcon 순서와 NO_PUBKEY·패키지 없음·노드 미검색 오류 해결법을 다룹니다.
전체 글 18편
각 글에 표시된 난이도를 기준으로 초급, 중급, 고급 순으로 나눴습니다. 처음이라면 위쪽부터 읽고, 이미 아는 단계는 건너뛰어도 됩니다.
초급 (4편)
- 소프트웨어 엔지니어가 알아야 할 AMR 기초: AGV와의 차이, SLAM, 경로 계획, ROS2AMR이 정해진 길을 따라가는 AGV와 어떻게 다른지, SLAM·센서 퓨전·파티클 필터·전역/지역 경로 계획이 어떻게 이어지는지, ROS2의 노드와 토픽 구조가 코드베이스를 읽는 데 왜 필요한지 소프트웨어 엔지니어 관점에서 설명합니다.
- 우분투 24.04 ROS 2 Jazzy 설치: apt 저장소 등록부터 talker/listener 테스트, rosdep·colcon, 자주 나는 오류우분투 24.04에 ROS 2 Jazzy를 apt로 설치합니다. 로케일, universe, ros2-apt-source 등록, desktop·ros-base 선택, setup.bash, rosdep·colcon 순서와 NO_PUBKEY·패키지 없음·노드 미검색 오류 해결법을 다룹니다.
- 자율주행 로봇 개발 독학 로드맵 | 하드웨어 없이 시작하는 현실적인 순서실물 로봇 없이 자율주행 로봇 개발을 독학하는 순서를 단계별로 제시합니다. Linux 기초와 ROS2 노드·토픽에서 시작해 시뮬레이터 선택, SLAM·Nav2 실습, 포트폴리오 프로젝트, 저가 실물 플랫폼 검증까지 이어집니다.
- ROS2 독학 자료 고르는 법: 공식 문서, 책, 온라인 강좌, 한국어 자료, 가상 개발 환경ROS2를 혼자 공부할 때 docs.ros.org를 배포판 버전 차이에 속지 않고 읽는 법, ROS2 전용 서적과 온라인 강좌에서 기대할 수 있는 것, 얇은 한국어 자료를 보완하는 전략, 컨테이너 개발 환경 활용법을 다룹니다.
중급 (9편)
- libVDA5050++ 어댑터 만들기: 핸들러·설정·order 처리 흐름과 실행 확인libVDA5050++ v2.11.3으로 VDA5050 차량 어댑터를 만드는 법을 설치, Config와 MQTT 설정, 내비게이션·액션·쿼리 핸들러 구현, order 검증과 horizon 갱신, pause·cancel 동작까지 컨테이너에서 실행한 메시지로 정리합니다.
- ROS2 시뮬레이션 환경 혼자 구축하기 | Docker + Gazebo 설정실물 로봇 없이 ROS2와 Gazebo 시뮬레이션 환경을 Docker로 혼자 구축하는 방법을 정리합니다. Linux/Mac/Windows(WSL2)별 GUI 포워딩 설정, docker-compose 구성, 자주 겪는 X11/그래픽 문제 해결까지 다룹니다.
- ROS2 통신의 실체: RMW 계층과 Fast DDS, QoS 정책, XML 프로파일, Discovery ServerROS2 통신의 실체인 RMW 추상화 계층과 Fast DDS를 파헤칩니다. QoS 정책, XML 프로파일, Discovery Server, 서브넷/Docker 트러블슈팅까지 실전 예제로 정리합니다.
- VDA5050 factsheet 해설: protocolLimits·agvActions·loadSpecification 읽는 법VDA5050 2.0.0 factsheet의 typeSpecification, physicalParameters, protocolLimits, protocolFeatures, agvGeometry, loadSpecification을 필드별로 설명하고, libVDA5050++ 어댑터가 실제로 내보낸 factsheet와 대조해 관제가 이 값을 어떻게 쓰는지 정리합니다.
- VDA5050 instantActions와 표준 액션 총정리: 상태·blockingType·실무 패턴VDA5050 2.0.0 문서의 instantActions 토픽과 표준 액션 표(startPause, cancelOrder, initPosition, startCharging, pick 등)를 키워드별로 풀어 설명하고, actionStatus 전이와 blockingType, 에러 보고, 운영에서 쓰는 패턴을 컨테이너 실행 결과와 함께 정리합니다.
- VDA5050 order 거절 오류 모음: 어떤 메시지가 어떤 오류를 만드는가VDA5050 order가 거절될 때 state의 errors에 무엇이 남는지, 일부러 잘못된 order를 보내 하나씩 재현했습니다. 헤더 불일치, 깨진 JSON, sequenceId 오류, 액션 오류, 위치 오류, update 오류의 errorType과 설명, 조용히 통과하거나 무시되는 경우, 빈 nodes로 프로세스가 종료되는 경우까지 정리합니다.
- VDA5050 order 수명주기: 노드·엣지 시퀀스, base와 horizon, order update 이어붙이기VDA5050 통신 모듈을 처음 맡았을 때 알아야 할 order 처리 규칙을 정리합니다. sequenceId 부여 규칙, base·horizon과 decision point, orderUpdateId로 경로를 이어붙이는 stitching, 주문 수락·거부 판단 순서, nodeStates·lastNodeId 보고, cancelOrder, state 발행 규칙과 3.0에서 바뀐 점까지 예제 메시지로 따라갑니다.
- VDA5050 state 메시지 필드 해설: nodeStates·actionStates·errors와 발행 시점VDA5050 2.0.0의 state 토픽을 필드별로 풀어 설명합니다. 발행 시점, orderId와 lastNodeId, nodeStates·edgeStates가 줄어드는 규칙, driving과 paused, loads, errors와 information의 차이를 표준 원문과 시뮬레이터에서 받은 실제 state로 정리합니다.
- VDA5050으로 AGV·AMR 관제 통신하기: MQTT 토픽, order·state·instantActions, libVDA5050++ C++ 구현VDA5050이 AGV·AMR과 관제 시스템을 MQTT로 표준화하는 방법과 order/state/instantActions 메시지 구조, libVDA5050++ 기반 C++ 구현 예제를 정리합니다.
고급 (5편)
- AGV·AMR 플릿 게이트웨이 개발 가이드 - 이기종 로봇과 관제 시스템을 잇는 미들웨어 아키텍처VDA5050을 쓰지 않는 로봇까지 섞인 AGV·AMR 플릿을 WMS/MES에 연결할 때, 어댑터형·브로커 중심·사이드카형 게이트웨이 중 무엇을 고르고 재연결·멱등성·페일세이프를 어떻게 설계할지 다룹니다.
- AMR 경로 계획에서 미션 실행까지: A*·DWA·Nav2와 VDA5050 오더의 물리 동작 검증코스트맵 위에서 A*가 전역 경로를 찾고 DWA·TEB가 매 제어 주기마다 속도를 고르는 과정, Nav2가 이를 하나의 스택으로 묶는 방식, 그리고 VDA5050 오더가 리프트·컨베이어·그리퍼 동작으로 실행되고 검증되는 과정을 다룹니다.
- VDA5050 커스텀 데이터 전송 가이드 - actionParameters·informations로 표준 확장하기VDA5050 표준 필드 밖에서 제조사 고유 데이터를 주고받는 법. actionParameters, state.informations, factsheet 확장 필드, 커스텀 MQTT 토픽, 스키마 호환성까지 실전 정리.
- VDA5050 Action 상태 머신 분석 - pick 액션 처리와 blockingType 구현VDA5050 order의 node action이 실제로 어떻게 실행되는지, actionStatus 전이·blockingType·load 갱신·에러 처리까지 pick 액션을 중심으로 C++ 구현 패턴을 정리합니다.
- VDA5050 order 메시지 필드 해설: node·edge·nodePosition·액션 실무 가이드VDA5050 2.0.0 order 메시지의 node, edge, nodePosition, trajectory 필드를 표준 문서 기준으로 하나씩 설명하고, base와 horizon, order update, 허용 오차, 층(mapId) 규칙을 order 작성 체크리스트로 정리합니다. 시뮬레이터에서 규칙을 어겼을 때의 실제 반응도 함께 기록했습니다.