차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
activity:public:2021:ros:2 [2021/09/23 19:00:11] – ↷ 문서 이름이 activity:public:2021:ros:210914에서 activity:public:2021:ros:2(으)로 바뀌었습니다 als2010 | activity:public:2021:ros:2 [2021/10/03 15:16:36] (현재) – [ROS STUDY #2: ROS 기본 개념, 명령어] yhy01625 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | ======ROS STUDY #2: ROS 기본 개념, 명령어====== | ||
+ | {{youtube> | ||
+ | =====1. ROS 용어===== | ||
+ | * **노드(Node)**: | ||
+ | * **패키지(Package)**: | ||
+ | * **메시지(Message)**: | ||
+ | |||
+ | =====2. 메시지 통신의 종류=== | ||
+ | {{https:// | ||
+ | |||
+ | 메시지의 종류에는 토픽, 서비스, 액션 세 가지가 있다. | ||
+ | ^종류 ^ 동기 ^ 방향 ^ 사용 ^ | ||
+ | | Topic | 비동기 | 단방향 | 연속으로 데이터를 송수신 | | ||
+ | | Service | 동기 | 양방향 | 요청 처리가 순간적(1회성); | ||
+ | | Action | 비동기 | 양방향 | 요청 처리 후 응답까지 오래 걸려서 서비스를 이용하기 어려운 경우, 중간 피드백값이 필요한 경우 | | ||
+ | |||
+ | ====2.1. 토픽(Topic)==== | ||
+ | {{https:// | ||
+ | |||
+ | 토픽은 실시간으로 전송되는 단방향성 메시지이다. 퍼블리셔나 서브스크라이버가 중지하지 않는 이상 메시지를 계속 보낸다.\\ | ||
+ | 이러한 특성 때문에 로봇의 상태나 센서 메시지 등을 보낼 때 토픽을 많이 사용한다. | ||
+ | |||
+ | ====2.2. 서비스(Service)==== | ||
+ | {{https:// | ||
+ | |||
+ | 서비스는 1회성의 메시지이다. 토픽에서는 동등한 지위의 두 개의 노드간에 통신이 이루어졌지만, | ||
+ | 서비스 클라이언트는 서비스를 요청하는 입장이고, | ||
+ | 요청과 응답을 수행하면, | ||
+ | 1회성이라는 특징때문에, | ||
+ | |||
+ | ====2.3. 액션(Action)==== | ||
+ | {{https:// | ||
+ | |||
+ | 액션은 서비스에서 중간 결과값을 보고하는 부분이 추가된 통신이다. 서비스를 기반으로 만들어진 통신이라 생각하기 쉽지만, 실제로는 토픽을 바탕으로 구동된다.\\ | ||
+ | 서비스와는 다르게 클라이언트에서 취소명령을 보내거나, | ||
+ | |||
+ | =====3. 메시지 통신의 과정===== | ||
+ | {{https:// | ||
+ | |||
+ | ====3.1. 마스터 구동==== | ||
+ | {{https:// | ||
+ | |||
+ | <sxh bash title: 실행법> | ||
+ | roscore | ||
+ | </ | ||
+ | |||
+ | 모든 ros 노드들에 대한 **정보 중계**를 담당.\\ | ||
+ | 각 노드들이 **서로의 존재를 인식하게 하는 역할**만 담당하고, | ||
+ | |||
+ | ====3.2. 서브스크라이버 노드 구동==== | ||
+ | {{https:// | ||
+ | |||
+ | <sxh bash title: 실행법> | ||
+ | rosrun 패키지이름 노드이름 | ||
+ | </ | ||
+ | Subscriber나 Client를 따로 임의로 실행시킬 때 사용한다. 서브스크라이버 노드는 구동과 함께 마스터에 자신의 노드 이름과 메시지 형태, URI 주소 등 각종 정보를 등록한다.\\ | ||
+ | |||
+ | ====3.3. 퍼블리셔 노드 구동==== | ||
+ | {{https:// | ||
+ | |||
+ | <sxh bash title: 실행법> | ||
+ | rosrun 패키지이름 노드이름 | ||
+ | </ | ||
+ | Publisher나 Server를 따로 임의로 실행시킬 때 사용한다. 퍼블리셔 노드도 위와 마찬가지로 구동과 함께 마스터에 각종 정보를 등록한다.\\ | ||
+ | |||
+ | ====3.4. 퍼블리셔 정보 알림==== | ||
+ | {{https:// | ||
+ | |||
+ | 마스터는 서브스크라이버 노드에게 새로운 퍼블리셔 정보를 알린다. | ||
+ | |||
+ | ====3.5. 퍼블리셔 노드에 접속 요청==== | ||
+ | {{https:// | ||
+ | |||
+ | 서브스크라이버 노드는 마스터로부터 받은 퍼블리셔 정보를 이용해 퍼블리셔 노드에게 직접 접속을 요청한다. | ||
+ | |||
+ | ====3.6. 서브스크라이버 노드에 접속 응답==== | ||
+ | {{https:// | ||
+ | |||
+ | 퍼블리셔 노드는 서브스크라이버 노드의 접속에 응답하여 자신의 URI 주소와 포트번호를 전송한다. | ||
+ | |||
+ | ====3.7. TCPROS 접속==== | ||
+ | {{https:// | ||
+ | |||
+ | TCPROS를 이용하여 서브스크라이버 노드와 퍼블리셔 노드가 직접 연결된다. | ||
+ | |||
+ | ====3.8. 메시지 전송==== | ||
+ | {{https:// | ||
+ | |||
+ | 토픽, 서비스, 액션으로 메시지를 송·수신한다. | ||
+ | |||
+ | =====4. ROS 명령어===== | ||
+ | 다음은 ROS에서 주로 사용되는 명령어이다.\\ | ||
+ | |||
+ | ====4.1. 패키지 파일 관리==== | ||
+ | ^ 명령어 ^ 중요도(사용빈도) ^ 의미 ^ 기능 ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ====4.2. 실행==== | ||
+ | ^ 명령어 ^ 중요도(사용빈도) ^ 의미 ^ 기능 ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ====4.3. 목록==== | ||
+ | ^ 명령어 ^ 중요도(사용빈도) ^ 기능 ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ====4.4. 빌드 도구(catkin)==== | ||
+ | ^ 명령어 ^ 중요도(사용빈도) ^ 기능 ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ====4.5. 패키지 관리==== | ||
+ | ^ 명령어 ^ 중요도(사용빈도) ^ 의미 ^ 기능 ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | 출처: {{https:// | ||
+ | 더 많은 명령어: [[https:// | ||
+ | |||
+ | =====5. 적용===== | ||
+ | ====5.1. turtlesim==== | ||
+ | turtlesim 패키지로 배운 내용을 적용해 보자.\\ | ||
+ | {{https:// | ||
+ | |||
+ | 이 예제는 터미널 창 3개를 띄우고 시작한다.\\ | ||
+ | \\ | ||
+ | 먼저, 마스터를 구동한다. | ||
+ | <sxh bash> | ||
+ | roscore | ||
+ | </ | ||
+ | |||
+ | 그 다음으로, | ||
+ | <sxh bash> | ||
+ | rosrun turtlesim turtlesim_node | ||
+ | </ | ||
+ | |||
+ | turtlesim 패키지에서 키보드 입력을 받는 turtle_teleop_key 퍼블리셔 노드를 구동한다. | ||
+ | <sxh bash> | ||
+ | rosrun turtlesim turtle_teleop_key | ||
+ | </ | ||
+ | |||
+ | 이제 토픽으로 메시지가 전송되어 키보드의 방향키 입력이 실시간으로 거북이의 움직임에 반영된다.\\ | ||
+ | 키보드의 방향키를 이용해 거북이를 움직여보자.\\ | ||
+ | ↑: 전진 ↓: 후진 ←: 좌로 회전 →: 우로 회전\\ | ||
+ | |||
+ | ====5.2. RQt==== | ||
+ | **계기판**.\\ | ||
+ | 각종 변수 값, 노드 간 통신상태 확인 및 Topic 수동 조회 등이 가능하다.\\ | ||
+ | \\ | ||
+ | 위의 turtlesim 예제를 실행한 상태로 노드 그래프를 생성해보자. | ||
+ | <sxh bash> | ||
+ | rqt_graph | ||
+ | </ | ||
+ | {{https:// |