일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 자율주행
- XML
- 튜토리얼
- Subscriber
- navgation
- turtlesim
- 기초
- Publisher
- launch
- C++
- Ros
- 공부
- 판단
- Robotics program 교육
- 노트
- 가재보
- turtlebot3
- 데브코스
- 어렵네
- catkin빌드
- 입문
- Python
- TinySLAM
- Slam
- sudo
- CNN
- Gazebo
- udacity
- Localization
- 패키지만들기
- Today
- Total
Tnote
ROS, turtlesim을 활용한 데이터 이동 확인 본문
# Subscriber과 Publisher
- 1단계
방향키 입력 -> 거북이 이동
1. ros를 사용하기 위해 빈 터미널(명령창)에 roscore 입력 후 실행
2. 새로운 터미널 창에 rosrun turtlesim turtlesim_node 입력 후 실행 // 파란 바탕 거북이 화면 창 뜬다.
* [ros 명령어] rosrun 패키지명 노드명 (ex. rosrun a b : a 패키지의 b프로그램 실행)
3. 새로운 터미널 창에 rosrun turtlesim turtle_teleop_key 입력 후 실행
4. 새로운 터미널 창에 rqt_graph 입력 후 실행
* rqt_graph : 노드 사이의 데이터 이동을 시각화하여 쉽게 볼 수 있다.
- 그래프 설명
원 : node(노드 ; 일단 프로그램, 파일, 프로세스 등과 같은 것이라고 이해)
화살표 : 데이터 흐름 관계
화살표 위 글씨 : 데이터 이름(topic)
3번 터미널 창이 선택된 채로 방향 키를 입력하면 거북이가 이동하는데,
이것은 3번에서 실행한 프로그램이 방향키를 입력받으면
그 값이 '/turtle1/cmd_vel'라는 이름의 화살표를 타고 2번에서 실행했던 프로그램에
들어가 거북이가 최종적으로 움직이게 된다.
신기신기~
- 2단계
방향키 입력 -> 거북이 이동 -> 거북이 위치, 속도 데이터 가져오기.
5. 새 터미널에 rostopic echo /turtle1/pose 입력 후 실행
* [ros 명령어] : rostopic echo 토픽이름 : 해당 토픽값 확인
ros ~ : ros 프로그램 관련 명령어
rostopic ~ : ros의 토픽(이하 topic) 관련 명령어
rosmsg ~ : ros의 메시지(이하 msg) 관련 명령어
* topic, msg 관련 정보는 xxx 참고
6. rqt_graph 왼쪽 위 하늘색 화살표 클릭 (새로고침)
1단계와 동일하게 방향키 -> 거북이 이동한 이후
5번의 명령어로 인해 거북이의 정보(위치, 속도 등)가
'/turtle1/pose' 라는 화살표를 타고 rostopic을 실행한 창으로 들어온다.
여기서 우리는 중요한 Subscriber와 Publisher에 대해서 알 수 있다.
-Subscriber : 구독자, Publisher : 발행자
- Publisher
우리가 방향키를 입력해 거북이에게 움직일 데이터를 준 것(1단계)를 "데이터를 줬다"
(발행 ; 신문 발행)
- Subscriber
우리가 거북이의 위치나 속도 데이터를 받는다(2단계)를 "데이터를 받았다"
(구독 ; 유튜브 구독)
# 데이터 활용
데이터를 주고 받을 수 있기 때문에, 우리는 방향키를 입력하는 대신 코드를 이용해
더 다양한 입력을 줄 수 있는 것. (단순한 좌우 x -> 얼마까지 이동 or 반듯한 사각형, 원을 그려라 .... )
다음은 데이터 이름을 찾겠다.
=> 많은 화살표 중 어떤 이름의 화살표를 줄 것인가, 위 실습에서는
어떤 이름의 topic(화살표 이름)인지 알려주었지만 직접 찾아서 해야하기 때문
# 거북이가 주는 데이터 이름 찾기
(topic, msg, 데이터에 어떤 정보가 있는지 ...)
1. 모든 터미널 종료한 후 이 글 상단의 1단계 1~3번 실행
2. 새 터미널에 rostopic list 입력 후 실행
* [명령어] rostopic list : 현재 활성화 된 topic 목록 확인
3. 같은 터미널에 rostopic echo /turtle1/pose 입력 후 실행
rosrun turtlesim turtle_teleop_key 명령어 친 터미널을 선택하고(위 1단계 3번 터미널) 방향키를 움직이면
실시간으로 값이 변하는걸 알 수 있다.
=> 거북이의 데이터값을 받아 볼 수 있다.
4. 새 터미널에 rostopic info /turtle1/pose 입력 후 실행
* [명령어] rostopic info 토픽이름 : 해당 토픽 정보 확인
현재 노드(프로그램)간 관계를 살펴보면
"/teleop_turtle" 노드에 의해 방향키 입력한 것이 '/turtle1/cmd_vel' 라는 화살표를 따라 "/turtlesim" 프로그램으로 들어가 거북이가 움직이고 이 움직인 정보를 '/turtle1/pose' 라는 화살표를 따라 우리가 rostopic echo 실행한 노드로 이동.
결국 4번은 rostopic info는 해당 토픽의 정보를 볼 수 있는 명령어이고,
'/turtle1/pose' 라는 토픽은 "/turtlesim" 노드가 주고 "/rostopic" 노드가 받는다.
즉, Publishers(발행)에 "/turtlesim" 노드, Subscribers(구독)에 "/rostopic" 노드가 되는 것.
추가로, '/turtle1/cmd_vel' 토픽의 정보를 본다면 어떻게 되있는지 생각하고 확인해 보는 것도 좋다.
그리고, rostopic echo 를 끄고 '/turtle1/pose' 토픽 정보를 본다면?
+22.03.01 추가
rostopic info, rosmsg show .. 대신에 노드 자체의 정보를 검색해도 된다.(이게 더 편하더라)
터미널 1 : roscore
터미널 2 : rosrun turtlesim turtlesim_node
터미널 3 : rosnode info /turtlesim
=> Publications 와 Subscriptions 의 정보에 topic 상태나 메시지타입등을 한번에 확인가능!
감사합니다.
'ROS' 카테고리의 다른 글
ROS, hector_slam (0) | 2022.02.21 |
---|---|
ROS, launch 파일(.xml) (0) | 2022.02.20 |
ROS, turtlesim 활용해 python 기초 코딩 (0) | 2022.02.06 |
ROS, 패키지 만들기, catkin 빌드하기 (0) | 2022.02.05 |
ROS 설치 확인법 (0) | 2022.02.04 |