teleop_keyboard

키를 한 번 눌렀을 뿐인데 로봇은 왜 계속 굴러갈까?

따라 하기

새 터미널에서 띄웁니다

Gazebo를 띄운 터미널은 그대로 두고, 새 터미널에서 ros2 run turtlebot3_teleop teleop_keyboard를 칩니다. teleop(원격 조종) 노드가 키 입력을 속도 명령으로 바꿔 줍니다.

2편의 ~/.bashrc 덕분에 새 터미널에서도 바로 됩니다.

키 배치

w·x는 직진, a·d는 회전

키를 누를 때마다 목표 속도가 조금씩 바뀝니다. 직진은 0.01 m/s, 회전은 0.1 rad/s씩입니다. burger는 직진 0.22 m/s, 회전 2.84 rad/s를 넘지 않게 막혀 있습니다.

x를 계속 누르면 속도가 0을 지나 뒤로 갑니다.

계속 간다

키를 떼도 속도는 남습니다

2강 5편의 turtlesim 키보드는 키를 누를 때만 잠깐 움직였습니다. TurtleBot3 teleop은 목표 속도를 기억했다가 계속 보냅니다. 멈추려면 s나 스페이스 키를 누릅니다.

보내는 것

쉬지 않고 /cmd_vel을 냅니다

teleop 노드는 키를 기다리는 0.1초가 지날 때마다, 키를 눌렀든 안 눌렀든 지금 속도를 /cmd_vel에 발행합니다. 이 메시지를 브리지가 받아 Gazebo 속 로봇에 전합니다(6편).

그래서 15강에서 Nav2가 로봇을 몰 때는 teleop을 꺼야 합니다.

엿듣기

echo에 header가 보입니다

w를 몇 번 누른 채 셋째 터미널에서 ros2 topic echo /cmd_vel을 쳐 보세요. 속도 값이 twist 안에 있고, 그 위에 시각을 적는 header가 붙어 있습니다. 3강에서 본 turtlesim의 Twist와 모양이 다릅니다.

출력 일부만 보였고 값은 예시입니다. 이 차이는 다음 편에서 다룹니다.

막힐 때

키가 안 먹으면 창 선택부터

키 입력은 teleop이 돌고 있는 터미널 창이 받아야 합니다. Gazebo 창을 눌러 둔 채로 키를 치면 아무 일도 없으니, teleop 터미널을 다시 눌러 줍니다.

끝낼 때는 s로 먼저 멈춘 뒤 Ctrl+C를 누릅니다. 마지막 속도가 남아 로봇이 계속 갈 수 있습니다.

다음 편

turtlesim처럼 Twist를 보내면 어떻게 될까요?

5편같은 cmd_vel인데 왜 안 움직일까? 14강 목록