ROS2란?
Robot Operating System
의 약자로, 응용 프로그램 개발을 위한 운영체제와 유사한 플랫폼이다.- 원래 로보틱스를 연구할 목적으로 설계되었으나, 산업 및 상업용 로보틱스 분야에서 사용하고 있다.
- 다른 운영체제나 이기종 디바이스간의 통신에서 데이터를 주고 받을 수 있는 장점이 있다.
- ROS 버전에서
ROS2
버전이 개발되었으며, ROS2가 새로운 로보틱스 분야의 표준이 되고 있다.- ROS에서 마지막으로 배포된 Noetic는 2025년에 지원이 완료된다.
- ROS와 ROS2의 차이점은 많이 있지만, 대표적으로 ROS2부터는 리눅스 이외의 윈도우와 맥에서 지원이 되고, Python3을 지원하고 있다는 점이다.
메타 운영체제
중의 하나로, 전통적인 운영체제라고는 할 수 없다.- 메타 운영체제는 응용 프로그램을 개발하기 위해 스케줄링 및 로드, 감시, 에러 처리 등을 실행하는 시스템이다.
동작 원리
- ROS2는 기본적으로 노드 기반으로 메세지를 교환하여 통신을 한다. 즉 보통 최소한의 실행 단위로 프로그램을 나누어 작업하게 된다.
- 주요 개념
- 노드(Node)
- 최소 단위의 실행 가능한 프로세스
- 토픽(Topic)
- 비동기식 단방향 메시지 송수신 방식
- Publisher와 Subscriber 간의 통신
- 센서 데이터, 로봇 상태, 로봇 좌표, 로봇 속도 명령 등 사용
- 서비스(Service)
- 동기식 양방향 메시지 송수신 방식
- Service Client와 Service Server 간의 통신
- 특정 요청을 하는 클라이언트단과 요청받은 일을 수행한 후에 결과값을 전달하는 서버 단과의 통신
- LED 제어, 모터 토크 On/Off, IK/FK 계산, 이동 경로 계산 등 사용
- 액션(Action)
- 비동기식, 동기식 양방향 메시지 송수신 방식
- Action Client ↔ Action Server 간의 통신
- Goal Service : 액션 목표(Goal)를 지정
- Feedback Topic : 중간 결괏값인 액션 피드백(Feedback) 전송
- Result Serivce : 최종 결괏값을 담은 액션 결과(Result)를 전송
- 목적지로 이동, 물건 파지, 복합 태스크 등
- 파라미터(Parameters) : 전역적 변수
- 노드(Node)
설치 방법
- ROS2부터는 윈도우, 맥 등의 OS를 지원하고 있으나, 아직은 우분투에 설치하는 것을 권장한다.
- Raspberry PI OS, Ubuntu Mate 등에서 ROS2 설치에 실패했다.
- 윈도우는 WSL2를 통해 우분투를 설치하여, 그 위에 ROS2를 쉽게 설치할 수 있다.
- ROS2 공식 홈페이지에서 안내하는 방법으로 설치할 수 있다.
- OMOROBOT에서도 ROS2를 설치하는 방법을 정리해놓았다.
locale
에서 LC_ALL 설정이 즉시 적용되지 않는 경우가 발생한다.update-locale
로 LC_ALL 및 LANG을 설정한 이후에, 재부팅 후 locale을 확인한다.
.bashrc
에export LC_ALL=en_US.UTF-8
을 추가한 후, locale을 확인한다.
- ROS2를 정상적으로 설치한 후에서, 환경변수에 필요한 명령어를 추가하는 것이 좋다.
- ros 배포판의 setup.bash나 별도로 설치한 패키지의 install/setup.bash 파일을 등록해 놓는다.
- 환경변수에 등록을 하지 않으면, ros 관련 명령어를 실행할 때마다
source /opt/ros/foxy/setup.bash
등의 명령어를 매번 입력해야 하는 번거로움이 생긴다.
기본 명령어
- 설치 이후 최초에 한번 rosdep을 초기화하여야 한다.
sudo rosdep init rosdep update
- 패키지 설치는 다음의 명령어와 유사하게 작업하면 된다.
mkdir -p ~/ros2_ws/src cd ~/ros2_ws/src git clone https://github.com/ros/ros_tutorials.git -b foxy-devel cd .. rosdep install -i --from-path src colcon build colcon build --symlink-install # 심볼릭 파일 형태로 저장 . ~/ros2_ws/install/local_setup.bash
- run 명령어는 다음과 같이 실행하면 된다.
- 특정 패키지의 특정 노드(단일 프로그램) 실행
# ros2 run {package_name} {node_name} ros2 run demo_nodes_cpp talker ros2 run demo_nodes_py listener ros2 run turtlesim turtlesim_node ros2 run turtlesim turtle_teleop_key
- launch명령어는 다음과 같이 실행하면 된다.
- 특정 패키지의 특정 런치 파일(사용자 지정 프로그램) 실행
- 사용자가 실행하고자 하는 프로그램의 각종 설정을 기술하고 기술된 설정에 맞추어 프로그램을 실행하도록 도와준다
ros2 launch turtlesim multisim.launch.py
- 노드, 토픽, 서비스, 액션 등은 다음의 명령어로 확인할 수 있다.
ros2 node list ros2 topic list ros2 service list ros2 action list
기본 패키지
rqt
- ROS + Qt의 합성어로 그래픽 인터페이스 개발을 위한 Qt 기반 프레임워크 제공
- 토픽, 서비스, 액션 등을 시각적으로 확인할 수 있는 플러그인이다.
- rqt_graph : 노드와 그들 사이의 연결 정보 표시
- rqt_plot : 속도, 전압 등 시간이 지남에 따라 변화하는 데이터를 플로팅
RVIZ2
- ROS에서 제공하는 3차원 시각화 도구로, 각종 개체를 올려서 시각화해볼 수 있다.
- 레이저, 카메라 등의 센서 데이터를 시각화하여 표현할 수 있다.
- 로봇 외형과 계획된 동작을 표현할 수 있다.
Gazebo