Mô phỏng nhiều robot với Nav2 trong ROS2 Humble & Gazebo (Phần 1) – ROS2 Vietnamese Tutorial

Written by Eric Nguyen

16/04/2024

This tutorial is created by Robotics Ambassador Eric

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

  1. Cách cài đặt các packages cần thiết để mô phỏng nhiều robots ở ROS2 Humble
  2. Cách tạo launch file để mô phỏng nhiều robot trên gazebo
  3. Mô phỏng robots trên Rviz và gazebo

Phần 2: https://www.theconstruct.ai/lam-sao-de-mo-phong-nhieu-robot-su-dung-nav2-trong-khong-gian-gazebo-voi-ros2-humble-phan-2-vietnamese-ros2-tutorial/

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/

Tổng quan

Khi làm việc với dự án yêu cầu bạn phải kết hợp nhiều robots với nhau để thực hiện một nhiệm vụ nào đó, vấn đề đầu tiên đặt ra là làm sao để có thể mô phỏng được nhiều robot trên một môi trường cụ thể. Do đó, blog này sẽ giúp bạn biết cách thực hiện điều đó. Đây sẽ là phần 1 của blog này với mong muốn sẽ giúp cho các bạn biết cách tạo một launch file để tích hợp nhiều robots và mô phỏng chúng trên Gazebo cùng với Rviz. Tiếp theo đó sẽ là phần 2 sẽ hướng dẫn các bạn sử dụng Nav2 package cùng với nhiều robot trong môi trường Gazebo.

Khởi động rosject

Như mọi lần rosject sẽ là công cụ hoàn hảo cho việc thực hiện project này, 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.

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/2pGt7Ge

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, sau khi vào môi trường làm việc catkin là ros2_ws các bạn làm theo bằng cách thực hiện các câu lệnh sau đây:

cd ros2_ws/src

git clone https://github.com/Eric-nguyen1402/turtlebot3_multi_robot

source /opt/ros/humble/setup.bash

cd ..

sudo rosdep install --from-paths src --ignore-src -r -y

Sau bước này thì các bạn sẽ nhìn thấy thông báo cài đặt thành công như hình bên dưới.

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

Tiếp theo sử dụng câu lệnh sau để build môi trường catkin

colcon build --symlink-install

source ./install/setup.bash

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

Sau khi tải thành công các bạn sẽ nhìn thấy folder turtlebot3_multi_robot trong src. ở đây sẽ bao gồm các file cần thiết cho project này. Tiếp theo chúng ta sẽ đến mô phỏng và đi sâu vào làm sao để tạo được launch file.

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

Mô phỏng trên Gazebo cùng nhiều robots

Thông thường khi làm việc với turtlebot3 các bạn luôn phải chọn mô hình robot và truy xuất môi trường cũng như đường dẫn đến package. Tuy nhiên, trong blog này thay vì phải command mỗi lần chạy chương trình. Mình sẽ hướng dẫn các bạn cách khai báo trong launch file để chương trình tự động thực hiện cài đặt.

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

Sau đó để sử dụng môi trường gazebo và robot, bạn cần truy xuất môi trường gazebo và chạy ros launch package:

ros2 launch turtlebot3_multi_robot gazebo_multi_nav2_world.launch.py enable_drive:=True

Vì chúng ta sẽ mô phỏng không chỉ một mà nhiều robot cùng một lúc nên khi thực hiện câu lệnh chương trình cần một lúc để xử lý được yêu cầu nên các bạn kiên nhẫn nhé.

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

Mô phỏng trên RViz cùng nhiều robots

Khi thực hiện ros launch ở trên, 4 cửa sổ Rviz tương ứng với mỗi robot cũng sẽ xuất hiện đồng thời như hifnh dưới. Mỗi cửa sổ đại diện cho một robot.

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

Bên cạnh đó, nếu các bạn kiểm tra ros topic thì các bạn sẽ thấy đầy đủ đồng thời tất cả topic của robot được khai báo (tb1, tb2, tb3, tb4). Từ đây chúng ta có thể áp dụng vào nhiều project sử dụng nhiều robots cùng lúc.

source ~/ros2_ws/install/setup.bash

ros2 topic list

https://flic.kr/p/2pGmTyf
https://flic.kr/p/2pGtH7h
https://flic.kr/p/2pGt7Hw
https://flic.kr/p/2pGtH7C

Cách tạo launch file để mô phỏng nhiều robots cùng lúc

Sau đây, mình sẽ giải thích các phần trong launch file để các bạn tùy ý có thể thay đổi và thực hiện project cho riêng mình.

1. Khởi tạo Gazebo server và client ¶

Để có thể chạy mô phỏng trên Gazebo chúng ta cần khai báo và khởi tạo Gazebo server và client như sau

gzserver_cmd = IncludeLaunchDescription(

    `PythonLaunchDescriptionSource(`

        `os.path.join(get_package_share_directory("gazebo_ros"), "launch", "gzserver.launch.py")`

    `),`

    `launch_arguments={"world": world}.items(),`

`)`
 
`gzclient_cmd = IncludeLaunchDescription(`

    `PythonLaunchDescriptionSource(`

        `os.path.join(get_package_share_directory("gazebo_ros"), "launch", "gzclient.launch.py")`

    `),`

`)`

Triển khai robots dưới dạng lưới

Khi mô phỏng trên gazebo, chúng ta cần biết vị trí cần bố trí robot hay nói cách khác chúng ta cần khởi tạo tọa độ cho robot trên môi trường gazebo. Để làm việc đó, cách tiếp cận đơn giản là sử dụng hàng và cột để xác định vị trí theo dạng lưới. Với mỗi vị trí trên lưới, nó sẽ tạo ra một tên và không gian duy nhất cho từng robot. Sau đó, tạo và cấu hình nút robot_state_publisher và spawn_entity.py để xuất hiện robot trong gazebo.

for i in range(COLS):

`for j in range(ROWS):`

    `name = "turtlebot" + str(i) + "_" + str(j)`

    `...`

    `turtlebot_state_publisher = Node(`

        `...`

    `)`

    `spawn_turtlebot3_burger = Node(`

        `...`

    `)`

    `...`

Cách sắp xếp tuần tự với trình xử lý sự kiện (Event Handlers)

Chúng ta sửu dụng phương pháp tuần tự để robot xuất hiện, đảm bảo rằng mỗi robot được hoàn toàn trang bị trước khi đến với robot tiếp theo. Điều này được thực hiện thông qua hai chức năng RegisterEventHandler và OnProcessExit để chờ quá trình trước đó được hoàn thành.

if last_action is None:

`ld.add_action(turtlebot_state_publisher)`

`ld.add_action(spawn_turtlebot3_burger)`

else:

`spawn_turtlebot3_event = RegisterEventHandler(`

    `...`

`)`

`ld.add_action(spawn_turtlebot3_event)`

Bật chế độ chuyển động

Sau khi các robots được hoàn toàn khởi tạo, chúng ta có thể bắt đầu đùng các nút để điều khiển robot dựa trên enable_drive, cho phép điều khiển chuyển động của robots trong môi trường mô phỏng

drive_turtlebot3_burger = Node(

            `package="turtlebot3_gazebo",`

            `executable="turtlebot3_drive",`

            `namespace=namespace,`

            `output="screen",`

            `condition=IfCondition(enable_drive),`

        `)`

Đến đây là kết thúc phần 1 của blog này, các bạn có thể theo doxi phần 2 để kết hợp nhiều robots cùng với Nav2 package. 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: gazebo | nav2 | ROS | ros2 | RViz | turtlebot3
Masterclass 2023 batch2 blog banner

Check Out These Related Posts

129. ros2ai

129. ros2ai

I would like to dedicate this episode to all the ROS Developers who believe that ChatGPT or...

read more

0 Comments

Pin It on Pinterest

Share This