Làm sao để mô phỏng nhiều robot sử dụng Nav2 trong không gian Gazebo với ROS2 Humble (Phần 2) – Vietnamese ROS2 Tutorial

Làm sao để mô phỏng nhiều robot sử dụng Nav2 trong không gian Gazebo với ROS2 Humble (Phần 2) – Vietnamese ROS2 Tutorial

This tutorial is created by Robotics Ambassador Eric



Robotics Ambassador: theconstruct.ai/robotics-ambassador/
 
Những điều bạn sẽ được biết trong blog này:
  1. Cách khai báo tọa độ cho robot để di chuyển trong không gian Gazebo và RViz
  2. Cách tạo câu lệnh để điều khiển robot di chuyển với gói Nav2
  3. Cách sử dụng Nav2 trên RViz để tạo đường đi cho robot

Phần 1: https://www.theconstruct.ai/lam-sao-de-mo-phong-nhieu-robot-su-dung-nav2-trong-khong-gian-gazebo-voi-ros2-humble-phan-1-ros2-vietnamese-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/
    2. ROS2 Navigation: https://app.theconstruct.ai/courses/148

Tổng quan

Ở phần 1 của blog “Làm sao để mô phỏng nhiều robots trên Gazebo với Nav2” chúng ta đã tạo thành công gọi được robots trên môi trường Gazebo và Rviz. Tiếp theo, ở phần 2 chúng ta sẽ được làm quen với gói Navigation ROS2. Có thể mọi người đã quen với việc sử dụng Nav2 với một robot nhưng với nhiều robots thì sẽ sử dụng như thế nào. Vì vậy, blog này sẽ giới thiệu với các bạn 2 cách để điều khiển robot với câu lệnh và click chuột.

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é.

Khởi động và chạy mô phỏng Gazebo

Sau khi thực hiện theo hướng như phần 1, sau đây các bạn chỉ cần chạy launch file vào môi trường Gazebo và Rviz bằng câu lệnh sau. Bên cạnh đó, cửa sổ RViz có thể bật tắt bằng cách sử dụng chế độ enable_rviz:

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

Ở đây các bạn cần chú ý cho mình chức năng enable_drive:=True . Khi các bạn chọn True đồng nghĩa với việc các bạn sẽ điều khiển tất cả các robots cùng một lúc ví dụ như hình ở dưới. Các robot sẽ tự động di chuyển đến đích theo vị trí các bạn chọn sẵn. Cho nên khi các bạn muốn điều khiển một robot nào trong số các robot có trong môi trường. Các bạn cần phải lựa chọn enable_drive:=False

https://flic.kr/p/2pMW58B
https://flic.kr/p/2pMQtHy

Cách di chuyển robot với Nav2 Goal trên Rviz

Nếu các bạn đã quen thuộc với Rviz thì các bạn sẽ thấy rằng Rviz cũng cấp cho chúng ta rất nhiều công cụ bổ ích trong đó bao gồm cả Navigation. Lệnh khởi chạy (launch) cài đặt pose ban đầu bằng việc sử dụng topic /initialpose. Bên dưới thanh công cụ của Rviz các bạn sẽ thấy kí hiệu mũi tên màu xanh với tên gọi là Nav2 Goal.

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

Khi các bạn click vào nút này, các bạn có thể lựa chọn bất kỳ điểm nào trên môi trường RViz bao gồm cả hướng của điểm đến. Với lựa chọn này Nav2 package sẽ giúp bạn tạo ra đường đi phù hợp cho robot. Bạn cũng có thể thay thế Nav2 package bằng một thuật toán xây dựng đường đi cho robot như RRT*, A*,… phù hợp với project của bạn. Sau khi thành công chọn điểm, đường đi của robot sẽ xuất hiện như đường chỉ màu hồng ở hình bên dưới đây.

https://flic.kr/p/2pMQtHo
https://flic.kr/p/2pMW58G
 

Cách tạo command line để di chuyển robot với Nav2

Bên cạnh đó, mình sẽ giới thiệu cho bạn một lựa chọn khác đó là thiết lập điểm xuất phát và điểm đến bằng câu lệnh thay vì chọn rviz. Với điểm khởi đầu bạn có thể khởi tạo bằng câu lệnh:

ros2 topic pub -1 --qos-reliability reliable /tb2/initialpose geometry_msgs/PoseWithCovarianceStamped "{header: {frame_id: map}, pose: {pose: {position: {x: -1.5, y: 0.5, z: 0.0}, orientation: {x: 0.0, y: 0.0, z: 1.01, w: 1.0}}, }}"

Những điều bạn cần lưu ý khi khởi tạo câu lệnh cho vị trí bắt đầu. Đầu tiên các bạn cần chọn robot nào để di chuyển, ở đây mình chọn robot 2 tương ứng với topic /tb2/initialpose sau đó là khai báo tọa độ của điểm với đầy đủ các thông tin như câu lệnh mình để trên.

Sau khi nhập câu lệnh thành công bạn sẽ thấy thông báo như hình bên dưới.

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

Sau đó điểm đến sử dụng câu lệnh:

ros2 action send_goal /tb2/navigate_to_pose nav2_msgs/action/NavigateToPose "pose: {header: {frame_id: map}, pose: {position: {x: -3.0, y: 1.5, z: 0.0}, orientation:{x: 0.0, y: 0.0, z: 0, w: 1.0000000}}}"

Tương tự như câu lệnh khởi tạo điểm xuất phát, điểm đến các bạn cũng cần khai báo đầy đủ thông tin và với cú pháp action send_goal . Một điều nữa bạn cần lưu ý là khi bạn chọn điểm kết thúc cho robot bạn cần phải cẩn thận tránh những điểm trùng với chướng ngại vật hoặc tọa độ mà robot không thể di chuyển tới được. Điều này là một trong những bất tiện khi các bạn sử dụng câu lệnh đòi hỏi bạn phải nắm rõ vị trí của robot. Nếu nhập sai bạn sẽ thấy thông báo như hình bên dưới.

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

Còn đây là khi bạn nhập đúng câu lệnh, lúc này bạn sẽ thấy robot di chuyển không chỉ trong Gazebo mà còn ở Rviz.

https://flic.kr/p/2pMW58X
 
 
https://flic.kr/p/2pMWNPK
 

Đến đây là kết thúc phần 2 của blog này, với 2 phần tuy không dài nhưng các bạn cũng có thể biết được một số thông tin bổ ích với Navigation2. 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

Como utilizar uma Action do ROS para resolver um problema prático de navegação em Python – ROS Portuguese Tutorial

Como utilizar uma Action do ROS para resolver um problema prático de navegação em Python – ROS Portuguese Tutorial

This tutorial is created by Rosbotics Ambassador 014 Anderson

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


O que nós vamos aprender:

    1. Como acessar as mensagens associadas a uma ação
    2. Como criar um servidor de ações
    3. Como inicializar uma ação
    4. Como disponibilizar uma informação de odometria enquanto o robô se move

Lista de recursos usados neste post:

  1. Use este rosject: https://app.theconstructsim.com/l/5e7ce8b4/
  2. The Construct: https://app.theconstructsim.com/
  3. ROS Courses: ROS Basics in 5 Days (Python) https://app.theconstructsim.com/Course/55
  4. ROS Couses: ROS Navigation: https://app.theconstructsim.com/courses/57

Panorama
Em ROS, quando se fala em realizar uma tarefa enquanto uma outra está sendo realizada, estamos falando das “Actions”. Neste artigo, trataremos de um exemplo em ROS com o TurtleBot3 programado em Python. Basicamente, dada uma posição no espaço, teremos que iniciar uma ação que cuidará de calcular o quanto nosso robô está longe da posição inicial enquanto este se movimenta pelo ambiente.

Abrindo o rosject
Para seguir este tutorial, será útil e conveniente usar um rosject (que a grosso modo é um projeto ROS configurado para rodar um exemplo).
Acesse o link:
https://app.theconstructsim.com/l/5e7ce8b4/
Clique no botão vermelho “RUN”:

Descobrindo as mensagens associadas:
Abra um terminal clicando no ícone indicado na figura:

Na janela do primeiro terminal, insira o comando:

roscd actionlib

Você notará que o caminho para a pasta será:

user:/home/simulations/public_sim_ws/src/all/actionlib/actionlib

Isso significa que você está acessando a pasta de um pacote chamado actionlib. Neste pacote, tipos padrão de mensagens usadas para realizar ações podem ser encontradas e isso nos será útil.

Navegue para a pasta action com o comando:

cd action

Aqui, você encontra um arquivo chamado Test.action. Para visualizá-lo diretamente no terminal, rode:

cat Test.action

O seguinte conteúdo é apresentado:

int32 goal
---
int32 result
---
int32 feedback

Muitas informações importantes são extraídas deste arquivo. Por exemplo, vemos a estrutura padrão de um arquivo de ação que contém objetivo, resultado e feedback separados pelos hífens. Não necessariamente teremos variáveis associadas a esses tipos em todos os arquivos. No nosso exemplo, estamos especialmente interessados no feedback (que não precisa ter esse nome sempre).

Criando um servidor de ações
Clique no ícone para abrir a IDE e navegue nas pastas do workspace para encontrar o arquivo action_server.py.

Neste arquivo, vemos como a informação da ação é utilizada. Por exemplo, precisamos importar as possíveis mensagens, por isso temos:

from actionlib.msg import TestFeedback, TestResult, TestAction

Repare na implementação de variáveis necessárias para o código:

_feedback = TestFeedback()
_result   = TestResult()

Gaste alguns minutos lendo o código para entender como a distância para a localização inicial é calculada.
No terminal 1, rode o comando:

roslaunch realrobotlab main.launch

Você será apresentado à uma janela do Gazebo como esta:

Aproxime-se (zoom in) para visualizar o nosso robô no centro da tela:

Inicializando e verificando a ação
No terminal 2, rode o servidor de ações que acabamos de ver:

rosrun basic_project action_server.py

No terminal 3, inicialize a ação publicando na variável goal:

rostopic pub /record_odom/goal actionlib/TestActionGoal "header:
seq: 0
stamp:
secs: 0
nsecs: 0
frame_id: ''
goal_id:
stamp:
secs: 0
nsecs: 0
id: ''
goal:
goal: 0"

Existem outras formas de se inicializar uma ação por exemplo usando um script dedicado (action client) ou mesmo usando a interface gráfica axclient via comando:

rosrun actionlib_tools axclient.py /record_odom

obs.: Você pode usar o comando anterior no terminal 3 se preferir ao invés do comando de publição no tópico.

Clique no ícone de ferramentas gráficas para visualizar o axclient:

Independentemente da forma como você inicialize o servidor de ações, em um novo terminal (4) você pode verificar a variável feedback sendo atualizada com o valor da distância calculada entre a posição atual e a inicial do robô.

rostopic echo /record_odom/feedback

Para fazer o exemplo mais ilustrativo, você pode mover o robô usando as teclas do seu teclado, isto é, teleoperando o robô. Para teleoperar o robô, abra um novo terminal (5) e rode:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

Então, verá como a distância varia no seu terminal dedicado a ecoar tal resultado. Não se perca em meio a tantos terminais abertos simultaneamente. Algo como isto será apresentado na sua tela:

---
header:
seq: 581
stamp:
secs: 1597
nsecs:  72000000
frame_id: ''
status:
goal_id:
stamp:
secs: 1016
nsecs:  62000000
id: "/axclient_5154_1705261443951-1-1016.062"
status: 1
text: "This goal has been accepted by the simple action server"
feedback:
feedback: 58
---

Agora sim, você pode ficar tranquilo sabendo que a ação que você criou estará sempre atenta a quanto seu robô se distanciou da posição inicial. Uma ressalva importante é que neste cálculo simples de distância, os eventuais obstáculos são negligenciados.

Nós esperamos que este post seja útil para você!

Vídeo no YouTube

Este foi o post de hoje. Lembre-se que nós temos uma versão deste post em vídeo no YouTube.

Se você gostou do conteúdo, por favor, considere se inscrever no nosso canal do YouTube. Estamos publicando novos conteúdos quase todos os dias.

 

Continue avançando no seu aprendizado de ROS.

Video Tutorial

[ROS Q&A] 137 – How to Tune Navigational Parameters Using a Graphical Tool?

In this video we are going to see how to tune and tweak the parameters required for navigation, using a graphical tool. This tool will enable us to modify parameters on-the-run, allowing us to quickly and painlessly test various parameter settings.

// RELATED LINKS
▸ Original questions: https://goo.gl/ndLhVS and https://goo.gl/GgjQ9s
▸ Parameter tuning guide: https://goo.gl/dVSUzJ
ROS Development Studio (ROSDS)
Robot Ignite Academy

Step1. Create a project in Robot Ignite Academy(RIA)

We have the best online ROS course available in RIA. It helps you learn ROS in the easiest way without setting up ROS environment locally. The only thing you need is a browser! Create an account here and start to browse the trial course for free now! We’ll use the ROS Navigation in 5 days course as an example today. Please go to Unit 0: Guide for ROS Navigation in 5 Days.

Step2. Check the parameter

We use turtlebot 2 as an example. You can use the following command to navigate to the parameter file.

roscd turtlebot_navigation_gazebo
cd param
cat dwa_local_planner_params.yaml

Let’s launch the navigation stack with the following command

#in shell #1
roslaunch turtlebot_navigation_gazebo move_base_demo.launch
#in shell #2
roslaunch turtlebot_rviz_launchers view_navigation.launch

If you checked the parameters, you’ll see there are lots of different parameters. How can we tune them? Let’s use a built-in graphical tool called rqt_reconfigure with the following command.

rosrun rqt_reconfigure rqt_reconfigure

Step3. Tune the parameter

For example, the question is about the inflation_radius. You can find it under move_base->global_costmap->inflation_layer.

The best part of this graphical tool is that the change will apply to the simulation immediately, so you can run and tune your navigation stack at the same time. You can also save the parameter to a .yaml file if you click the button on the top left corner.

 

Want to learn more?

If you want to learn more about the navigation stack and what is the meaning of each parameter, please check our ROS navigation in 5 days course.

 

Edit by: Tony Huang


Feedback

Did you like this video? Do you have questions about what is explained? Whatever the case, please leave a comment on the comments section below, so we can interact and learn from each other.

If you want to learn about other ROS topics, please let us know on the comments area and we will do a video about it.

[ROS Q&A] 116 – Launching Husarion ROSbot navigation demo in Gazebo simulation

 

In this video we will learn how to install the ROSBot Gazebo simulation in just 5 minutes and how to launch the mapping and navigation demos that it includes.

[irp posts=”8512″ name=”RDP 008: Building Accessible ROSbots With Jack Pien”]

RELATED LINKS
▸ Husarion web page: https://husarion.com/
▸ Husarion ROSbot simulation git: https://github.com/husarion/ROSbot_description

▸ Robot Ignite Academy: https://www.robotigniteacademy.com/
▸ ROS Navigation in 5 days online course: https://goo.gl/bbNXRH
▸ ROS Development Studio: https://www.theconstruct.ai/rds-ros-development-studio/


learn_how_to_install_the_ROS_robot_Gazebo_simulation_ros_navigation_course_banner

Pin It on Pinterest