Cách khai báo tọa độ cho robot để di chuyển trong không gian Gazebo và RViz
Cách tạo câu lệnh để điều khiển robot di chuyển với gói Nav2
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/
Ở 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:
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:
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:
Ở đâ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
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.
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.
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:
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.
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.
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.
Đế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é.
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:
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:
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:
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.
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.
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
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.
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/