로봇 운영 체제 ROS2를 선택해야 하는 이유
로봇 개발 생태계에서 ROS2(Robot Operating System 2)는 이제 선택이 아닌 표준으로 자리 잡았습니다. 이전 세대인 ROS1이 연구실 수준의 프로토타입에 집중했다면, ROS2는 DDS(Data Distribution Service) 기반의 실시간성 보장과 강력한 보안 기능을 탑재하여 산업용 로봇이나 자율주행 모빌리티 상용화에 최적화되었습니다. 특히 다중 로봇 시스템이나 분산 환경에서의 통신 신뢰성이 대폭 강화되어, 복잡한 로봇 하드웨어와 소프트웨어를 효율적으로 연결하는 핵심 미들웨어 역할을 수행합니다.
ROS2는 로봇 애플리케이션 개발을 위한 미들웨어로, 우분투 22.04 환경에서 Humble Hawksbill 버전을 설치하여 시작하는 것이 가장 권장됩니다. 설치 후에는 'turtlesim' 패키지를 통해 노드와 토픽의 통신 원리를 직접 확인하며 기초를 익힐 수 있습니다.
우분투 환경에서의 ROS2 Humble 설치 기준
ROS2 설치를 시작하기 전에 운영체제 환경을 확인해야 합니다. 가장 권장되는 버전은 우분투 22.04 LTS(Jammy Jellyfish) 기반의 Humble Hawksbill입니다.
설치 과정에서 로케일 설정이 필수인데, 터미널에 'locale' 명령어를 입력하여 UTF-8이 지원되는지 확인한 후 'sudo locale-gen en_US en_US.UTF-8' 명령으로 언어 설정을 고정하는 것이 좋습니다. 이후 apt 저장소에 ROS2 키를 추가하고 소스 리스트에 해당 경로를 등록하는 절차를 거칩니다.
이때 설치 옵션은 크게 'Desktop'과 'ROS-Base'로 나뉩니다. 학습 목적이라면 GUI 도구와 시뮬레이터가 포함된 Desktop 버전을 선택해야 나중에 rviz2나 rqt와 같은 시각화 툴을 별도로 설치하는 번거로움을 덜 수 있습니다.
노드와 토픽을 활용한 첫 번째 데이터 통신
설치가 완료되면 가장 먼저 'turtlesim' 패키지를 실행하여 시스템의 정상 작동 여부를 점검합니다. 터미널 하나를 열어 'ros2 run turtlesim turtlesim_node'를 입력하면 거북이가 그려진 창이 나타납니다.
다른 터미널에서 'ros2 run turtlesim turtle_teleop_key'를 실행하면 키보드 입력을 통해 로봇을 제어할 수 있습니다. 여기서 중요한 개념은 노드 간의 통신 방식인 토픽(Topic)입니다.
'ros2 topic list'를 입력하면 현재 발행 중인 토픽을 볼 수 있고, 'ros2 topic echo /turtle1/cmd_vel'을 통해 키보드 입력값이 어떤 좌표 데이터로 전달되는지 실시간으로 파악할 수 있습니다. 이러한 구조는 센서 데이터를 처리하거나 제어 명령을 하달하는 실제 로봇 개발 로직과 정확히 일치합니다.
실무 개발을 위한 패키지 관리와 워크스페이스 세팅
단순 실행을 넘어 자신만의 코드를 작성하려면 콜콘(colcon) 빌드 시스템을 익혀야 합니다. 로봇 프로젝트는 보통 'src' 폴더 하위에 패키지를 생성하고 관리합니다.
'colcon build' 명령어를 수행하면 소스 코드가 C++ 또는 파이썬 컴파일 과정을 거쳐 설치 디렉토리로 이동합니다. 개발자는 매번 'source install/setup.bash'를 입력하여 환경 변수를 로드해야 하는데, 이는 터미널마다 빌드된 패키지의 경로를 인식시키기 위한 필수 작업입니다.
초보 개발자가 자주 범하는 실수는 이 환경 변수를 로드하지 않고 코드를 수정하는 것인데, 수정 사항이 즉시 반영되지 않는다면 반드시 경로 설정 여부를 먼저 체크해야 합니다.
하드웨어 연동 시 주의해야 할 네트워크 설정
실제 로봇에 탑재된 센서와 ROS2를 연결할 때는 DDS 미들웨어 설정이 변수가 될 수 있습니다. 기본적으로 멀티캐스트 방식을 사용하기 때문에 동일한 네트워크 대역에 있는 기기끼리는 자동으로 통신하지만, 방화벽이 활성화되어 있다면 데이터 유실이 발생합니다.
실무에서는 'export ROS_DOMAIN_ID=X'와 같이 도메인 ID를 지정하여 네트워크 내에서 특정 로봇 그룹만을 격리하여 통신하는 전략을 취합니다. 개발 단계에서는 도메인 ID를 0으로 고정하여 시작하되, 다수 로봇을 운용하는 환경으로 확장될 때 이 수치를 변경하여 노드 간의 충돌을 방지하는 설계를 적용하는 것이 좋습니다.