Tạo bản đồ cùng với ROS2 Nav2 sử dụng SLAM – ROS Vietnamese Tutorial

Written by Eric Nguyen

11/02/2024

This tutorial is created by Rosbotics Ambassador 016 Eric

Rosbotics Ambassador Program https://www.theconstruct.ai/rosbotics-ambassador/)


Những điều bạn sẽ được biết trong blog này:

  1. Cách cài đặt Turtlebot3, cartographer, gazebo package ở ROS2 Humble
  2. Chạy một ví dụ về gazebo cùng turtlebot3
  3. Cách tạo map từ Cartographer và nav2 package

Danh sách nguồn tài liệu bổ trợ trong post này

  1. Sử dụng rosject: https://app.theconstructsim.com/rosjects/750453
  2. The Construct: https://app.theconstructsim.com/
  3. Khóa học về ROS2 →
    1. Introduction to Gazebo Sim with ROS2: https://app.theconstructsim.com/courses/introduction-to-gazebo-ignition-with-ros2-170/
    2. ROS2 Navigation: https://app.theconstructsim.com/courses/148

Tổng quan

Khi làm việc với robots trong các môi trường khác nhau thì bản đồ (map) là một trong những thông tin hữu ích giúp đỡ cho robot có thể định vị tọa độ, cũng như xây dựng phương hướng di chuyển để né tránh chướng ngại vật. Cho nên, trong bài blog sẽ chia sẽ cách để các bạn tạo ra map bằng việc kết hợp các package có sẵn trong ROS2 như turtlebot3, navigation. Bên cạnh đó mình cũng giới thiệu Cartographer một công cụ rất hữu ích sử dụng thuật toán SLAM được ROS tích hợp. Đây là package sẽ hỗ trợ các bạn rất nhiều trong các dự án liên quan tới robot. Tuy nhiên, blog này không đào sâu vào thuật toán SLAM mà chỉ giới thiệu tới các bạn cách cài đặt và một ví dụ về catographer.

Khởi động rosject

The Construct đã tạo ra một công cụ rất hữu ích là rosject, nơi các bạn dễ dàng truy cập và khởi tạo các project cùng với ROS ở các phiên bản khác nhau:

https://app.theconstructsim.com/rosjects/750453

Như hình bên dưới là một rosject hoàn chỉnh, bạn chỉ việc nhấn vào nút RUN để khởi động rosject.

https://flic.kr/p/2pujgPJ

Sau khi nhấn vào nút RUN bạn sẽ thấy rosject được chạy trên màn hình. Ở đây, rosject cung cấp cho bạn cả terminal để có thể nhập các câu lệnh:

https://flic.kr/p/2puiHBB

Bây giờ cùng nhau đến bước tiếp theo trong ví dụ này nhé.

Cài đặt các package cần thiết

Đầu tiên các bạn cần cài đặt các package cần thiết để có thể thực hiện project này, ở đây chúng ta sử dụng turtlebot3 và ros2 navigation, cartographer, gazebo:

sudo apt install ros-humble-turtlebot3-gazebo

sudo apt install ros-humble-turtlebot3-cartographer

sudo apt install ros-humble-nav2-map-server

sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup

https://flic.kr/p/2pucvCw

Sau khi cài đặt thành công các package phía trên. Cuối cùng là cài đặt package liên quan đến turtlebot3. Các bạn có thể cài đặt thông qua câu lệnh dưới đây:

sudo apt install ros-humble-turtlebot3*

https://flic.kr/p/2puhbcb

Mô phỏng trên Gazebo cùng robot

Sau khi đã thành công kiểm tra hoặc cài đặt turtlebot3 trong ROS2, tiếp theo các bạn sẽ mô phỏng robot trên môi trường Gazebo.

Tiếp theo, sau khi đã cài đặt đầy đủ các package cần thiết. Bước tiếp theo bạn cần chọn model robot cho project của bạn. mình sử dụng waffle trong project này:

export TURTLEBOT3_MODEL=waffle

Sau đó để sử dụng môi trường gazebo và robot, bạn thực hiện câu lệnh:

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

https://flic.kr/p/2puhbcG

Cửa sổ Gazebo sẽ xuất hiện như trên cùng với robot waffle.

Khởi động Rviz cùng với cartographer

Như bạn thấy môi trường và robot đã có, tiếp theo bắt đầu với SLAM bằng việc sử dụng cartographer package. Ở cửa sổ thứ 2, các bạn thực hiện câu lệnh này, tuy nhiên khi mở cửa sổ mới đồng nghĩa với việc môi trường làm việc ko thể nhớ loại robot nào bạn đang dùng nên bạn cần export mỗi lần mở cửa sổ mới nhé:

export TURTLEBOT3_MODEL=waffle

ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True

Ở đây mình có thêm vào use_sim_time vì dùng thời gian thực của gazebo nếu như chúng ta làm việc với robot thực thì các bạn ko cần sử dụng use_sim_time. Ở đây sau khi thực hiện câu lệnh, RVIZ sẽ xuất hiện với môi trường grid map, ở đây là mô phỏng 2D từ gazebo qua, bạn có thể tùy chỉnh các lựa chọn ở mục bên trái của RVIZ để có được trải nghiệm tốt hơn về mô phỏng.

https://flic.kr/p/2pujgL7

Tạo và lưu bản đồ cùng nav2_map_server

Như các bạn đã biết, để có một bản đồ hoàn chỉnh hay còn gọi là môi trường đã biết trước, robot cần nhận biết hết các sự kiện trong môi trường. Cho nên trong project này, mình sẽ điều khiển robot di chuyển bằng cách sử dụng teleop_keyboard để robot có thể sử dụng cảm biến nhận diện môi trường xung quanh. Đầu tiên, các bạn cần đồng nhất mẫu robot mà bạn đang sử dụng trong môi trường gazebo cũng như Rviz. Tiếp theo là sử dụng turtlebot3_teleop package để di chuyển robot. Dưới đây là các câu lệnh để thực hiện:

export TURTLEBOT3_MODEL=waffle

ros2 run turtlebot3_teleop teleop_keyboard

https://flic.kr/p/2puhbcM

Ở đây, với mong muốn từng khu vực hay chướng ngại vật sẽ được thể hiện rõ trên map nên các bạn cố gắng di chuyển robot đến những khu vực đó.

https://flic.kr/p/2pujgPo

Như các bạn đã thấy, mình đã di chuyển robot để có thể quét hết toàn bộ bản đồ của môi trường. Bản đồ sẽ thể hiện rõ như hình trên. Các bạn mở cho mình một cửa sổ khác và lưu map lại nhé, bằng việc sử dụng câu lệnh sau:

ros2 run nav2_map_server map_saver_cli -f turtlebot_map

https://flic.kr/p/2puiHBg

Hy vọng qua blog này các bạn đã có thêm một số kiến thức cũng như công cụ hỗ trợ cho các dự án liên quan tới robotics sử dụng ROS. Bên cạnh đó, các bạn có thể theo dõi các blog khác cũng như các khóa học liên quan trên The Construct nhé.

 

Video Tutorial


Topics: nav2 | ros2 | slam
Masterclass 2023 batch2 blog banner

Check Out These Related Posts

0 Comments

Submit a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Pin It on Pinterest

Share This