본문으로 바로가기

최근 저는 ROS에 대해 정~~말 간단한 설치하기를 포스팅[바로가기]했는데요. 이번에는 ROS를 들어가기 전에 사용하는 기본적일 것 같은 (사실은 모릅니다. 뭐 ROS로 엄청 대단한 일을 해봤어야 말이죠ㅠㅠ 그래서 ROS의 튜토리얼 페이지에서 보고 감으로 이야기하는 겁니다.ㅠㅠ) 명령과 기능도 소개하고, 또 기본적인 개념에 대해 적을려고 합니다. 항상, 언제나, 참 변함없이, 결국 이번에도 그저 누구나 따라할 수 있는 투토리얼을 그저 말 그대로 따라만 한 것입니다.ㅠ.ㅠ. 오늘 글의 모든 기능은 단지 ROS wiki의 투토리얼 페이지[바로가기]에 가보기만 하면 됩니다.

뭐 요거 하나는 그래도 한 번 설치하고 뭐 하나를 해봤다고 익숙하네요....

roscore

라고 입력해서 ROS를 기동하죠^^ 이제

rosnode list

rosnode list명령으로 현재 실행되고 있는 node를 확인할 수 있습니다. node는 ROS에서 실행될 수 있는 최소 단위입니다.^^ 지금은 항상 실행되는 rosout만 보이네요.

rosnode info /rosout

아무튼 그에 대해 info 옵션으로 상세 내용도 볼 수 있습니다.

rosrun turtlesim turtlesim_node

이제 rosrun으로 노드를 실행할 건데요. turtlesim이라는 패키지의 turtlesim_node라는 노드를 실행하는 겁니다.

다시 rosnode list를 해보면 이제는 /turtlesim이 실행되어 있는 것을 확인할 수 있습니다.

그리고 turtlesim_node가 실행된 화면입니다. 아.. ROS는 실행되는 노드를 원하는 이름으로 재정의해서 실행할 수 있습니다.

rosrun turtlesim turtlesim_node __name:=my_turtle

위 명령을 사용하면 my_turtle이라는 이름으로 node를 실행할 수 있습니다. 위 그림은 그렇게하고 list를 또 확인했네요.

rosnode ping my_turtle

ROS 노드가 살아서 접속가능한지를 확인하는 것은 rosnode ping명령입니다.

아무튼 다시 turtlesim을 실행합니다.

rosrun turtlesim turtle_teleop_key

이번에는 turtle_teleop_key라는 노드를 실행합니다. 그러면 위 그림처럼 화살표키를 움직이라고 이야기를 합니다. 화살표 키를 눌러주면 위 그림 왼쪽처럼 거북이가 동작을 합니다.^^

그리고 다시 rosnode list로 확인해보면 teleop_turtle도 실행되고 있음을 확인할 수 있습니다.

rosrun rqt_graph rqt_graph

이제 rqt_graph를 실행하면 위 그림처럼 뜹니다. 현재 실행된 노드간의 통신 연결 상태를 보여주고 있네요.

당연한 이야기지만, 이 상태에서 list를 확인해보면 rqt_gui_py_node가 돌고 있네요^^

rostopic echo /turtle1/cmd_vel

아무튼 rostopic명령의 echo 옵션으로 콘술 화면에 명령이 뜨도록 됩니다.

이제 화살표를 움직여 거북이를 움직일 때 마다 cmd_vel이라는 메세지가 어떤 방식으로 전달되는지 보기 위해 실행한 명령으로 위 그림 우측 상단처럼 명령이 전달된다는 것을 알 수 있습니다. 다시 아까 실행했던 rqt_graph를 다시 봅니다.

혹시 위 그림처럼 안나오면 좌측 상단 Node Graph 밑에 새로고침 버튼을 눌러줍니다. 그러면 처음 상태에서 rostopic으로 뭔가 전달되는 게 보입니다. 뭔 의미인지 모릅니다. 오늘은 그저 아 이런 도구들을 이용할 거구나~~ 앞으로~~^^라는 뜻으로 그냥 보고 있습니다.^^.

rostopic list -v

이 명령으로 현재 실행되는 토픽들을 정리해서 볼 수 있습니다.

또한 rostopic type 옵션으로 종류를 확인할 수 있구요.

rosmsg show geometry_msgs/Twist

해당 메세지를 디테일하게 확인할 수도 있습니다.

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

이제 rostopic 명령의 한 예를 보죠.. 위 그림처럼 명령을 주면 거북이가 키보드로 주는 명령과 다르게 어떤 움직임을 가집니다.

각 옵션의 정리는 위에 Ros의 투토리얼로 넘기구요~^^ 맨 마지막 실제 지령만 보면 도착해야할 x, y, z방향의 초당 이동 속도가 주어집니다. 그러면 그냥 직선으로 쭈욱 가면 될 듯 하지만, 그 뒤에 각 축 중심으로 회전해야하는 각도에 대한 속도도 명령으로 주어진 것입니다. 결국 최종 목적지와 최종 자세가 명령으로 주어진거라 거북이는 위 그림처럼 원을 그립니다.^^

$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

위 명령을 주면 계속~~~ 돕니다. 이런 명령의 차이도 차차 알아가야겠죠^^

이 상태에서 rqt_graph를 확인했을때 상황입니다.

rostopic hz /turtle1/pose

얼마나 빨리 node에 퍼블리쉬가 되는지를 보여주는 명령입니다.

rosrun rqt_plot rqt_plot

이제 rqt_plot을 하면 토픽을 확인할 수 있습니다. 저 상태에서 토픽을 추가할 수도 있습니다.

위 그림처럼 말이죠.. 그리고 또 키보드로 거북이를 움직여보면면

그래프로 지령도 확인이 되네요~~^^ 아참.. 이번 글은 다시 말씀드리지만, 단순히 ROS의 투토리얼을 따라한 겁니다. 그리고 뭐 잘 알아서 쓰는 글이 아니라 학습하는 과정을 기록한다는 개념이 더 맞다는 것이죠 (한마디로 잘 모르면서 떠든다는 뜻입니다.^^)

신고