[ROS] ROS의 기초

강형우·2022년 11월 19일
0

ROS

목록 보기
3/5

1. 전체 구성

  • 노드1에서 노드2로 토픽이 날아가는 구조이다.
  • turtle_teleop_key라는 프로그램과 turtlesim_node프로그램에서 각각의 노드 하나씩을 실행한다.
  • 노드1은 Publisher node이며 topic을 보낸다.
  • 노드2는 Subscriber node이며 topic을 받아서 그 내용을 꺼내서 작업을 하는 Subscriber 구독자 노드이다.
  • 둘 사이의 주고 받는 topic의 이름은 /turtle1/cmd_vel 이다.`

  • 노드1과 노드2가 통신을 위해 마스터Core의 도움을 받아 처음 connection을 연결하고 연결이 끝나면 topic을 주고받는다.
  • 노드2(turtlesim_node)가 실행되면 노드2가 자신의 정보를 마스터core에 알려준다.
    Subscriber의 노드정보(turtlesim_node)
    Subscriber라는 것(topic을 받는다)
    /turtlesim
    /turtle1/cmd_vel
    /geometry_msgs/Twist
  • 노드1(turtle_teleop_key)이 실행되면 자신의 정보를 마스터core에 알려준다.
    Publisher의 노드의 정보(turtle_teleop_key)
    Publisher라는 것(topic을 보낸다)
    Publisher의 이름은 /teleop_turtle
    Publisher가 보내는 topic의 이름은 /turtle1/cmd_vel
    그 안에 들어있는 메세지는 /geometry_msgs/Twist
  • /geometry_msgs/Twist가 담긴 /turtle1/cmd_vel이라는 topic은 노드2가 받는다 하였다. (마스터core가 알려줌)
  • 계속해서 주기적으로 한 방향으로 데이터를 보낸다
  • 데이터를 보내는동안 마스터core는 특별히 관여하지 않는다.

2. 터미널을 여러 개 열어서 실습하기

  • 터미널 4개를 열어서
  • terminal#1에는 roscore를 실행한다.
  • terminal#2에는 turtlesim_node를 실행한다.
  • terminal#3에는 teleop_turtle_key를 실행한다.
  • terminal#4에는 $ rosenode list를 입력하여 현재 동작중인 node를 볼 수 있다.
  • 처음 rosnode list 실행시 terminal#1에서 roscore만 실행중이므로 /rosout노드만 작동되고 있는것을 볼 수 있다.
  • 이 후에 terminal #2를 열어서 $ rosrun turtlesim turtlesim_node 입력하고 terminal#4에서 $ rosnode list입력시 현재 동작중인 노드 /rosout /turtlesim을 볼 수 있다.
  • roscore와 turtlesim_node가 실행중인 상태에서, terminal#3을 열어
    $ rosrun turtlesim turtle_teleop_key 입력하고
  • terminal#3안에서 키보드 방향키를 누르면
    키보드 입력값을 토픽ㅈ에 담아서 보내는 일을 한다.
    turtle이 그에 따라 움직임을 확인한다.
  • terminal#4를 열어 $ rosnode list를 입력하면

    /rosout /teleop_turtle /turtlesim 라는 노드가 작동중임을 볼 수 있다.
  • 노드 /teleop_turtle는 토픽의 발행한다.(사용자의 키보드 입력에 따라)
  • 노드 /turtlesim은 위 토픽을 구독하여 키보드 입력값을 알아내고 이에 따라 turtle을 이동시킴
  • 새로운 terminal을 열어 $ rostopic list를 실행하면 현재 어떤 토픽이 날아다니는지 볼 수 있다.
  • rostopic echo 명령어 사용시 토픽에 담긴 메세지의 내용을 볼 수 있다.
    -e.g) $ rostopic echo /turtle/cmd_vel
  • $rqt_graph 명령어 입력시 노드와 토픽 관계를 시각화 할 수 있다.

3. 토픽을 좀 더 자세히

토픽을 찾아보자

$ rostopic list -v

  • 5개의 토픽이 날아가고 있다.
    /turtle1/cmd_vel 이라는 이름의 토픽, 그리고 그 토픽안에는 [geometry_msgs/Twist]라는 데이터가 담겨있다. 그리고 그 토픽을 쏘는 Publisher는 1명이다.
    /turtle1/cmd_vel 이라는 토픽은 [geometry_msgs/Twist]라는 데이터가 담겨있는데 이것을 구독하는것은 1명이다.

메세지의 타입과 구성

  • 이 토픽에 발행되는 메세지의 타입을 알고 싶을때
    $ rostopic type /turtle1/cmd_vel
  • 이 타입의 메세지는 어떻게 구성되어 있는지 알고 싶을때
    $ rosmsg show geometry_msgs/Twitst

더 많은 ROS topic의 메세지가 궁금할땐

https://wiki.ros.org 에서 확인하자

0개의 댓글