실제 로봇과 ros2_control, 더 배울 것

시뮬레이션에서 돈 코드, 진짜 로봇에서도 돌까?

돌아보기

거북이 한 마리에서 스스로 가는 로봇까지

1강 1편에서 약속한 목표는 "지도 그리고 스스로 가는 로봇"이었습니다. 거북이 한 마리와 토픽(3강)에서 시작해 내 노드(6강), 서비스·액션(7·9강), 런치(10강), TF(12강), Gazebo(14강)를 거쳐, 방금 로봇이 지도 위를 스스로 갔습니다.

시뮬레이션의 바퀴

지금은 Gazebo의 DiffDrive가 굴립니다

TurtleBot3 시뮬레이션에서는 Nav2가 낸 /cmd_vel이 ros_gz_bridge를 거쳐 Gazebo의 DiffDrive 시스템으로 갑니다. DiffDrive가 바퀴를 직접 굴리고 오도메트리를 돌려줍니다(14강 6·8편).

간단하지만 Gazebo 안에서만 쓰는 방법입니다. 실제 로봇에는 DiffDrive가 없습니다.

ros2_control

제어기는 그대로, 하드웨어만 바꿔 끼웁니다

ros2_control은 바퀴를 모는 제어기와 하드웨어를 갈라 둔 틀입니다. diff_drive_controller가 /cmd_vel을 바퀴 속도로 바꾸고, 그 아래 하드웨어 인터페이스만 실제 모터 드라이버나 Gazebo용 gz_ros2_control로 바꿔 끼웁니다.

그래서 ros2_control을 쓰는 로봇은 같은 제어기가 양쪽에서 돕니다. 실제 TurtleBot3는 ros2_control 대신 turtlebot3_node(OpenCR 보드)가 이 자리를 맡습니다.

옮겨 가기

바뀌는 것은 맨 아래층뿐입니다

Nav2, slam_toolbox, 내가 짠 노드는 토픽과 TF만 봅니다. 그래서 실제 로봇으로 옮겨도 위층은 그대로 두고, 맨 아래 Gazebo 자리에 실제 센서와 모터 드라이버가 들어옵니다.

실제 로봇에서는 use_sim_time을 켜지 않습니다. 로봇과 PC의 ROS_DOMAIN_ID가 같은지도 봅니다(2강 8편).

다음 로봇

다음 로봇은 TurtleBot4

TurtleBot4는 iRobot Create 3 바탕에 라이다와 OAK-D 카메라를 올린 교육용 로봇입니다. ROS 2와 Nav2 예제를 갖추고 있어, 이 과정에서 익힌 흐름을 그대로 이어 갈 수 있습니다.

TurtleBot4 시뮬레이터는 무거워서 이 과정에서는 다루지 않았습니다.

더 배울 것

같은 바탕 위에 더 쌓을 것

파이썬에서 목표를 차례로 보내는 nav2_simple_commander, 로봇 팔을 다루는 MoveIt 2, C++ 노드(rclcpp, 6강 9편), 실제 로봇의 ros2_control로 넓혀 갈 수 있습니다. 모두 이 과정에서 배운 노드, 토픽, 액션, TF 위에 서 있습니다.

과정 끝

지도 그리고 스스로 가는 로봇, 해냈습니다

과정 끝ROS 2 입문 목록으로 15강 목록