저번시간에 ROS2 Humble(이하 ROS2)을 설치했다.
아직 설치 못한 사람이 있다면 아래 포스트를 확인해 보길 바란다.
자 그럼 이번에는 무엇을 배울까?
ROS2에는 인공지능/로봇 개발할 때 자주 사용되는 명령어들이 몇가지 있다.
오늘은 이 명령어들을 배워보자.
목표
예상 소요시간
약 15분
준비물
ROS2 Humble 설치방법 에서 터미널을 켤 때 ROS2 환경이 설정되어야 한다.
turtlesim 이란?
ROS2에는 topic, service, action 등등 로봇 개발에 필요한 주요 개념이 있다. 이를 배울 때 로봇이 당장 갖춰져있으면 좋겠지만 없을 때를 대비해서 친절한 누군가 개발해놓은 간단한 시뮬레이션이라고 생각하면 된다.
이전 포스트에서 말했듯이 ROS2로 로봇개발을 하다보면 추가로 설치해야 하는 패키지들이 종종 있다. 이번에는 turtlesim(아마 turtle robot simulation의 줄임말인듯!)을 설치해보자!
설치는 정말 간단하게 하단의 명령어들을 실행해주면 된다.
일단 업데이트 한번해주고~
sudo apt update
다음 명령어로 ROS2 humble에 맞는 turtlesim 설치 설치!
sudo apt install ros-humble-turtlesim
설치가 완료됐다면 ROS2 패키지가 잘 설치 됐는지 ros2 pkg executables라는 명령어를 통해 다음과 같이 확인한다. 이 명령어는 turtlesim 패키지에서 실행가능한 프로그램이 무엇인지 출력해준다.
ros2 pkg executables turtlesim
다음과 같은 목록이 터미널에 출력되면 설치 성공! Hurray~
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
이제 turtlesim 도 설치했겠다 본격적으로 몇가지 실습을 진행해보자!
먼저 turtlesim을 실행하려면 다음 명령어를 실행하면 된다.
이때 ros2 run은 다음과 같은 정보를 담아 명령어를 완성한다.
ros2 run <패키지 이름> <실행가능한 노드 이름>
그러면 다음 명령어는 turtlesim 이라는 패키지안에 turtlesim_node라는 노드를 실행하라는 의미를 갖는다.
근데 패키지가 뭐고 노드는 또 뭘까?
이는 추후에 또 설명하겠으나 패키지는 실행가능한 프로그램들의 묶음 정도로 이해하면 되고, 노드는 어떤 특정 역할을 수행하는 프로그램이라고 생각하면 되겠다. 지금 완전히 이해가 안되도 되니 걱정 No No!
명령어도 어느 정도 이해했겠다 일단 복붙 복붙!
ros2 run turtlesim turtlesim_node
명령어를 올바르게 실행했다면 다음과 같은 화면이 나올 것이다.
간혹 파란색 바탕화면에 다른 모양과 색을 띈 거북이가 나오는데, 걱정하지 않아도 된다. 매번 turtlesim_node를 실행할 때마다 약간의 랜덤성을 가지고 모양과 색이 결정된다.
동작하는데는 전혀 지장없다 ㅎㅎ
터미널에는 실행된 turtlesim_node로부터 turtle의 위치와 각도등을 알려주는 로그(메세지)가 출력 된 것을 확인 할 수 있을 것이다.
[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
이번엔 turtlesim안에 있는 turtle을 turtle_teleop_key(아마 turtle tele operation with keyboard의 줄임말이 아닌가 싶다!)라는 node를 실행해서 움직여보자.
일단 다음 명령어로 turtle_teleop_key 노드를 실행시킨다.
ros2 run turtlesim turtle_teleop_key
그럼 다음과 같은 메세지가 출력될 것이다.
Reading from keyboard
-------------------------------
Use arrow keys to move the turtle.
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation.
'Q' to quit.
간단히 설명하자면
이제 키보드를 가지고 turtle을 움직여보자.
이때 주의해야하는 점은 키보드 조작을 방금전 ros2 run turtlesim turtle_teleop_key를 실행 시킨 터미널을 클릭한 후 키보드를 눌러야 한다는 것이다.
TurtleSim이 적혀있는(파란바탕)화면을 클릭해놓은 채로 키보드를 움직여도 turtle은 움직이지 않는다 ㅠㅠ
아마 움직일 때 하얀색으로 turtle이 움직인 경로가 표시되는 것도 볼 수 있을 것이다.
(선택)
추가적으로 새로운 터미널을 열어 다음 명령어들을 각각 입력해보자
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
각각의 명령어의 역할을 다음과 같다.
지금 node는 뭐고, topic, service, action이 뭔지 모르겠다고? 걱정할 필요 없다. 모르는게 당연하다.
추후 차근차근 상세하게 살펴볼 예정이다.
무튼 상단의 명령어를 실행했을 때 turtlesim_node와 turtle_teleop_key executable이 실행한 노드(/teleop_turtle, /turtlesim)가 제공한 topic, service, action이 무엇인지 출력해줄 것이다.
여태까지 turtlesim을 설치하고 사용해 봤다면 이제는 rqt를 설치해보고 실행해 볼 것이다.
그 전에 기지개 한번 피도록 하자. 허이짜!
좋다 다시 본론으로 돌아와 rqt를 설치하기 위해서 다음 명령어를 실행한다.
습관적으로 업데이트 한번 해주고~
sudo apt update
아래 명령어에서 * 표시 있는데 이는 rqt에 관련된 프로그램을 같이 설치하라는 의미이다.
sudo apt install ~nros-humble-rqt*
rqt를 실행하기 위해 다음 명령어를 새로운 터미널에서 실행한다.
rqt
명령어를 실행하게 되면 rqt에 대한 설명이 나와있다. 간단히 말해 여러 분석도구들을 보여주는 화면이라는 말을 하고 있는 것 같다.
그럼 상단 Plugins 탭에 가서 Services > Service Caller 순으로 클릭하도록 하자.
그렇다면 어떤 창이 막 뜨는데 당황하지 말고 좌측 상단쯤에 있는 파란색 새로고침 화살표를 누르도록 하자.
그 후 call 옆에 있는 드랍다운을 누르면 현재 이용가능한 모든 service들을 볼 수 있다.
그 다음엔 드랍다운에 나와있는 '/spawn' (소환) 이라는 이름을 선택한다.
이 명령어는 또다른 turtle을 TurtleSim에 생성하는 것을 도와주는 servie이다.
자 이제 '/spawn' service를 사용해보자.
먼저 새로운 turtle에 대한 생성 위치, 각도 이름을 설정해줘야한다.
expression 하단의 아이탬들을 더블클릭해서 다음과 같이 설정하자.
이제 아까 전화기 모양처럼 생긴 call 버튼을 눌러 내가 원하는 '/spawn' service를 요청하도록 하자!
이제 터미널로 가보면 새로운 turtle2가 생성된 것을 TurtleSim 화면에서 확인 할 수 있다.
하단과 비슷하게 turtle이 두마리 있으면 성공!
이제 pen에 대한 정보를 설정하는 service인 set_pen service를 사용해보자
이전 처럼 드랍다운을 눌러 /turtle1/set_pen 이라는 항목을 선택해보자.
그 다음 원하는 대로 r, g, b, width값을 설정하면된다. 각각은 다음을 의미한다.
참고로 지금 turtle1에 대한 pen 정보를 설정하고 있다.
설정이 끝났다면 이전처럼 call을 눌러 set_pen service를 요청하도록 하자!
여태까진 turtle1 밖에 못 움직였다는걸 눈치빠른 독자라면 인지하고 있었을 것이다.
그럼 turtle2는 어떻게 방법이 없을까?
다행히도 ROS2 개발자들이 이런 상황을 고려해 Remapping이라는 기능을 구현해놓았다.
Remapping이란 간단히 말해 기존 topic에 발행되던 메세지를 다른 특정 topic에 발행 될 수 있도록 매핑한다는 뜻이다.
명령어로 살펴보자면,
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
위 명령어는 turtlesim 패키지에서 turtle_teleop_key라는 executable을 실행할 때 ros argument들을 설정해줄건데 그중 remap이라는 argument는 turtle1/cm_vel 이라는 topic에 발행되는 메세지들을 turtle2/cmd_vel에 발행되도록 remmaping하게 설정한다.
라는 의미이다.
이 명령어를 사용해서 새로운 터미널에 turtle_teleop_key를 실행하면 하단 그림
처럼 turtle2를 움직일 수 있다! 야호~
여태까지 turtlesim, rqt 등을 설치하고 사용해봤다.
여러 개념이 나왔지만 다 이해하지 못 했다고 해서 너무 걱정할 필요 없다.
여기까지 왔다면 일단 스스로를 칭찬해주자 토닥토닥
어짜피 반복 숙달의 문제이므로 주저하지 말고 다음 포스트로 넘어가도 좋다!
질문하고 싶은 것은 댓글로 남겨주기 바랍니당~!
문의메일: irobou0915@gmail.com
오픈톡 문의: https://open.kakao.com/o/sXMqcQAf
IRoboU 유튜브 채널: https://www.youtube.com/channel/UC2-d99PrBwJy15MjPa32zYg