Visualizzare messaggi e salvare la configurazione con RViZ – Italian ROS Tutorial

Visualizzare messaggi e salvare la configurazione con RViZ – Italian ROS Tutorial

This tutorial is created by Robotics Ambassador 012 Alessandro

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

In questo tutorial vedremo come poter impostare la visualizzazione grafica di messaggi pubblicati sui differenti topic da una simulazione tramite l’uso di RViz e come poter salvare una configurazione della visualizzazione per poterla riutilizzare in futuro.

Visualizzazione dei messaggi dei topic

Per iniziare sarà necessario che siano attivi dei nodi che pubblicano dei messaggi adeguati, che siano nodi che abbiamo scritto noi, o preesistenti all’interno di una simulazione o di un robot con ROS installato.
Per questo tutorial utilizzeremo la simulazione di un drone disponibile sul corso di TheConstruct “Programming Drones with ROS“.

La simulazione sarà avviata nel momento in cui apriremo il corso e il relativo Rosject sarà avviato quando accederemo all’unità 3.

Possiamo verificare l’attività dei publisher relativi ai dati dei sensori a bordo del drone:
rostopic list
Otterremo come output una serie di topic che pubblicano informazioni relative a sensori di varia natura (LiDAR, Depth Cameras ecc.) la cui visualizzazione potrebbe risultare interessante per lo scopo di un nostro progetto.

RViz

Per poter lavorare con RViz sarà necessario lanciarlo dal nostro terminale.
Procediamo quindi con il seguente comando:
rosrun rviz rviz

Una volta di fronte alla schermata di RViz possiamo quindi iniziare a impostare un reference frame (in questo caso “base_link”).
Andiamo in alto a sinistra, in “Global options”, e impostiamo il “Fixed Frame” con valore “base_link”.

Siamo quindi pronti per poter aggiungere e visualizzare tutti i topic a cui siamo interessati.

Un ottimo punto di partenza sarebbe quello di visualizzare il modello fisico del robot che viene pubblicato dalla simulazione. In basso a sinistra premiamo quindi su “Add” e scorriamo fino a trovare “RobotModel”. Clicchiamo su “RobotModel” e poi su “Ok”.
Il modello fisico del robot sarà quindi rappresentato al centro della nostra simulazione.

All’interno di questa simulazione abbiamo per esempio anche la pubblicazione di messaggi da parte di sensori legati al robot, come LaserScan, ottenuti attraverso uno scan da parte di un LiDAR dell’ambiente circostante. In basso a sinistra premiamo quindi su “Add” e ci spostiamo nella tab “By topic”, dove potremo vedere quali topic stanno pubblicando messaggi, il loro nome e il tipo di messaggio che possiamo andare a visualizzare.

Aggiungiamo per esempio lo scan relativo al LiDAR
/scan/LaserScan
le immagini raccolte dalla telecamera rgb frontale on-board
/camera/rgb/image_raw/Image
e il PointCloud ritornato dalla DepthCamera
/camera/depth/points/PointCloud2

Salvare la configurazione

Poter visualizzare tutti questi topic porta un grosso vantaggio nel momento in cui andremo a testare i nostri progetti o semplicemente a raccogliere informazioni su ciò che il robot effettivamente è in grado di percepire. Chiaramente, più topic dovranno essere tracciati più sarà lungo il processo di configurazione ogni volta che andremo ad aprire RViz.

Per evitare questa faticosa operazione è possibile salvare la configurazione di RViz in modo da poterla riutilizzare in una seconda apertura, recuperandola direttamente dal comando di avvio di RViz.
Questo permetterà non solo di non dover ripetere il processo di configurazione, ma anche di poter salvare configurazioni differenti in base a ciò di a cui siamo interessati e di potersi muovere in modo semplice tra di esse.

Procediamo dunque con creare uno spazio all’interno del quale salvare le nostre configurazioni.
Ci spostiamo sull’editor di codice e creiamo una nuova cartella “rviz” all’interno di catkin_ws/src/my_rtab_package.
Qui andremo a salvare la configurazione e a recuperarla quando andremo a lanciare RViz.

Torniamo quindi su RViz (ripetiamo la configurazione nel caso l’avessimo o si dovesse essere chiuso) e poi su “File” > “Save Config As” e scegliamo il percorso in cui salvare il nostro file di configurazione, in questo caso salviamo il file in  /home/user/catkin_ws/src/my_rtab_package/rviz/sensor_view.rviz.

Avviare RViz con configurazione salvata

Quello che ci manca a questo punto sarà solo un modo per avviare RViz indicando la configurazione che vogliamo che sia utilizzata. Utilizziamo dunque il comando:
rosrun rviz rviz -d `rospack find my_rtab_package`/rviz/sensor_view.rviz

IMPORTANTE: l’uso del backtick (`) è essenziale perché il comando funzioni, con il layout italiano è possibile ottenerlo con [AltGr + ‘]

In questo modo RViz viene avviato e configurato a seconda del file che indichiamo all’interno del comando, risparmiandoci la fatica di dover ripetere tutto il procedimento dei punti precedenti e garantendo una maggiore flessibilità nell’osservare diverse visualizzazioni dei nostri messaggi.

 

Video Tutorial

Central de Monitoramento de Robôs via Web com ROS Noetic e Foxglove – Portuguese ROS Tutorial

Central de Monitoramento de Robôs via Web com ROS Noetic e Foxglove – Portuguese ROS Tutorial

This tutorial is created by Robotics Ambassador Anderson

Robotics Ambassador: theconstruct.ai/robotics-ambassador/

O que nós vamos aprender:

  1. Instalação do pacote Foxglove para integração com a interface web de monitoramento de robôs.
  2. Configuração do ambiente ROS para garantir que todas as dependências estão corretamente instaladas e atualizadas.
  3. Criação de um pacote ROS, incluindo a estrutura de diretórios e os arquivos necessários para o projeto.
  4. Edição do arquivo de lançamento para configurar o bridge do Foxglove dentro do ambiente ROS.
  5. Compilação do pacote ROS, lançamento da simulação do robô e conexão à interface web fornecida pelo Foxglove para monitoramento e controle remoto de robôs.

Lista de recursos usados neste post:

  1. Use este rosject: https://app.theconstruct.ai/l/60faad35/
  2. The Construct: https://app.theconstructsim.com/
  3. ROS Courses: ROS Basics in 5 Days (C++) https://app.theconstructsim.com/courses/56

Panorama

Neste tutorial, vamos aprender a configurar uma central de monitoramento de robôs via web usando ROS Noetic e a ferramenta Foxglove. Vamos passar pelos passos de instalação do pacote Foxglove, configuração do ambiente ROS, criação de um pacote ROS, edição de arquivos de lançamento e compilação, além de lançar a simulação e conectar-se à interface web.

Abrindo o rosject

Clique no link abaixo para ter acesso ao rosject deste tutorial. Em seguida, clique no botão vermelho “RUN”.

https://app.theconstruct.ai/l/60faad35/

Instalação do Foxglove:

Primeiramente, vamos garantir que o ambiente ROS esteja atualizado. Então, podemos instalar o foxglove. Abra um terminal e execute os seguintes comandos:

sudo apt-get update
sudo apt-get install ros-$ROS_DISTRO-foxglove-bridge

 Criando o pacote:

Agora, vamos criar um pacote ROS para nosso projeto. Em um terminal, execute os seguintes comandos:

roscd; cd ..; cd src/bb8; catkin_create_pkg bridge
cd bridge; mkdir launch;
cd launch; touch bridge.launch

Neste passo, você deve abrir o editor de código que apresentará a seguinte estrutura de pastas:

Editando o arquivo de lançamento:

Agora, edite o arquivo bridge.launch dentro da pasta launch com o seguinte conteúdo:

<launch>
<!-- Including in another launch file -->
<include file="$(find foxglove_bridge)/launch/foxglove_bridge.launch">
<arg name="port" value="9090"/>
</include>
</launch>

 Compilando o pacote:

Edite os arquivos CMakeLists.txt e package.xml do pacote bridge recém criado. Você deve alterar o conteúdo do arquivo CmakeLists.txt para apresentar:
find_package(catkin REQUIRED
foxglove_bridge
)

Esta parte pode ser encontrada logo no começo do arquivo. Mais no final do arquivo, você deve alterar:

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES bringup
CATKIN_DEPENDS foxglove_bridge
#  DEPENDS system_lib
)

Edite também o arquivo package.xml adicionando:

<buildtool_depend>catkin</buildtool_depend>
<build_depend>foxglove_bridge</build_depend>
<exec_depend>foxglove_bridge</exec_depend>

Em seguida, compile o pacote e suas dependências. No terminal, execute:

cd ~/catkin_ws/; catkin_make --only-pkg-with-deps bridge; source devel/setup.bash

 Lançando a simulação:

Agora, vamos lançar a simulação do robô. No terminal 1 (primeira aba que estiver aberta, não necessariamente terá o número 1), execute:

roslaunch bb_8_gazebo main.launch

A tela do Gazebo será aberta com o nosso robô no ambiente de simulação.

 

Conectando-se à interface web:

No terminal 2 (segunda aba), ative o ambiente ROS e lance o pacote bridge:

source devel/setup.bash
roslaunch bridge bridge.launch

O terminal apresentará as seguintes informações:

No terminal 3 (terceira aba), obtenha o endereço do WebSocket digitando o comando:

rosbridge_address

Monitorando e controlando seu robô via web

Acesse o endereço https://foxglove.dev  em um navegador web.
Você vai criar uma conta seguindo um procedimento simples e rápido então lhe será apresentada uma tela com o dashboard:

Clique em “Open connection”. Cole o endereço do WebSocket e estará pronto para personalizar a visualização dos dados conforme desejado.

No botão 1 da figura abaixo, você pode criar um novo layout. No botão 2 (Add Panel), você pode adicionar novos painéis. Por exemplo, adicione “Image” e “Teleop”. Ao clicar sobre um painel as configurações deste serão apresentadas.

Se você clicar no painel Image, poderá selecionar o tópico relativo à câmera do robô no campo 3. A imagem apresentada neste painel é o que o robô “enxerga” naquele momento.

Se você clicar no painel Teleop, pode ajustar as configurações do tópico no campo 3. Neste caso, gostaríamos de comandar a velocidade do robô nas diferentes direções. Para isso, preencha o campo 3 com “/cmd_vel”. Ajuste as velocidades (linear e angular) desejas e pronto. Temos um controle remoto.

Por fim, quando comandamos o robô por meio da interface do Foxglove e voltamos à janela do Gazebo, vemos o robô se movimentar no ambiente. A perspectiva capturada pela câmera é continuamente apresentada no painel “Image”. De maneira geral, o Foxglove pode ser usado como uma central de monitoramento de diversos tópicos via web.

Esperamos que este tutorial seja útil e que você possa desfrutar da experiência de monitorar e controlar seus robôs de forma remota através da interface web do Foxglove.

Se você gostou deste tutorial, considere explorar mais recursos do ROS e experimentar novas possibilidades para expandir suas habilidades em robótica.

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!

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

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

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

Desbravando espaços com o BB8 e ROS em C++ via Actions personalizadas – ROS Portuguese Tutorial

Desbravando espaços com o BB8 e ROS em C++ via Actions personalizadas – ROS Portuguese Tutorial

This tutorial is created by Robotics Ambassador Anderson

Robotics Ambassador Program https://www.theconstruct.ai/robotics-ambassador/

 

O que nós vamos aprender:

  1. Configurar e criar um pacote em ROS para um robô BB-8.
  2. Criar e configurar mensagens de Action para controlar o movimento do robô.
  3. Escrever um servidor de ações em C++ para processar os comandos recebidos.
  4. Compilar e lançar a simulação do robô BB-8 no Gazebo.
  5. Enviar comandos para o robô BB-8 via terminal e receber feedback de sua posição no espaço tridimensional.

Lista de recursos usados neste post:

  1. Use este rosject: https://app.theconstruct.ai/l/60394ad6/
  2. The Construct: https://app.theconstructsim.com/
  3. ROS Courses: ROS Basics in 5 Days (C++) https://app.theconstructsim.com/courses/56

Panorama

Bem-vindo! Neste tutorial, iremos mergulhar nos recursos de Actions no ROS, com foco no ROS 1 Noetic e em um dos robôs mais encantadores disponíveis na plataforma: o BB-8 do universo de Star Wars. Vamos explorar como usar Actions para enviar comandos personalizados que permitem ao BB-8 executar ações específicas, como caminhar, girar e parar, em resposta a objetivos definidos. Ao longo do processo, você aprenderá a criar mensagens customizadas para interagir com o BB-8 de maneira controlada e divertida.

Abrindo o rosject

Para acompanhar este tutorial utilize o rosject acessando o link fornecido e clique no botão vermelho

https://app.theconstruct.ai/l/60394ad6/

Criando o pacote

Abra um terminal e cole os comandos abaixo para criar o pacote e os arquivos necessários para a simulação.

roscd; cd ..; cd src/bb8; catkin_create_pkg bb8_action_pkg roscpp actionlib actionlib_msgs geometry_msgs std_msgs
cd bb8_service_pkg; mkdir action;
cd action; touch CustomActionMsg.action; cd ..;
cd src; touch bb8_service_server.cpp; chmod +x *.cpp

Novos arquivos aparecerão na árvore de pastas em sua IDE.

Configurando as mensagens de Action
Mensagens de Action são compostas pelos elementos goal, result e feedback. No caso da nossa aplicação, trataremos cada um dos elementos como uma string diferente. Salve o arquivo CustomActionMsg.action incluindo o seguinte conteúdo:

string goal
---
string result
---
string feedback

Preparando para compilar

Para atualizar seu CMakeList.txt, é crucial copiar o seguinte conteúdo e colá-lo no arquivo, substituindo o que estiver presente.

cmake_minimum_required(VERSION 3.0.2)
project(bb8_action_pkg)
find_package(catkin REQUIRED COMPONENTS
actionlib
actionlib_msgs
geometry_msgs
roscpp
std_msgs
)
add_action_files(
FILES
CustomActionMsg.action
)
generate_messages(
DEPENDENCIES
geometry_msgs# std_msgs
actionlib_msgs
)
catkin_package(
CATKIN_DEPENDS actionlib actionlib_msgs roscpp
)
include_directories(
${catkin_INCLUDE_DIRS}
)
add_executable(bb8_action_server src/bb8_action_server.cpp)
add_dependencies(bb8_action_server ${bb8_action_server_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(bb8_action_server
${catkin_LIBRARIES}
)
add_dependencies(bb8_action_server bb8_action_pkg_generate_messages_cpp)

Escrevendo o servidor de ações

Agora, vamos para a etapa em que os comandos são enviados ao servidor do ações. No diretório ‘src’, abra o arquivo bb8_action_server.cpp e adicione o seguinte código.
#include "geometry_msgs/Twist.h"
#include "nav_msgs/Odometry.h"
#include <actionlib/server/simple_action_server.h>
#include <bb8_action_pkg/CustomActionMsgAction.h>
#include <ros/ros.h>
class MoveAction {
protected:
ros::NodeHandle nh_;
actionlib::SimpleActionServer<bb8_action_pkg::CustomActionMsgAction> as_;
std::string action_name_;
bb8_action_pkg::CustomActionMsgFeedback feedback_;
bb8_action_pkg::CustomActionMsgResult result_;
ros::Publisher pub;
ros::Subscriber sub;
geometry_msgs::Twist mov;
nav_msgs::Odometry odom;
ros::Rate *rate_;
public:
MoveAction(std::string name)
: as_(nh_, name, boost::bind(&MoveAction::Callback, this, _1), false),
action_name_(name) {
as_.start();
rate_ = new ros::Rate(1);
pub = nh_.advertise<geometry_msgs::Twist>("cmd_vel", 1000);
sub = nh_.subscribe("/odom", 1000, &MoveAction::odomCallback, this);
}
void Callback(const bb8_action_pkg::CustomActionMsgGoalConstPtr &goal) {
ROS_INFO("Goal received: %s", goal->goal.c_str());
while (ros::ok() && !as_.isPreemptRequested()) {
if (goal->goal == "walk") {
mov.linear.x = 0.5;
mov.angular.z = 0;
pub.publish(mov);
} else if (goal->goal == "turn") {
mov.linear.x = 0;
mov.angular.z = 1;
pub.publish(mov);
usleep(2000000);
} else if (goal->goal == "stop") {
mov.linear.x = 0;
mov.angular.z = 0;
pub.publish(mov);
}
feedback_.feedback =
"Received position: x=" + std::to_string(odom.pose.pose.position.x) +
", y=" + std::to_string(odom.pose.pose.position.y) +
", z=" + std::to_string(odom.pose.pose.position.z);
as_.publishFeedback(feedback_);
rate_->sleep();
}
if (as_.isPreemptRequested()) {
ROS_INFO("Goal preempted.");
as_.setPreempted();
} else {
ROS_INFO("Goal succeeded.");
result_.result = "Action completed.";
as_.setSucceeded(result_);
}
}
void preemptCallback() {
ROS_INFO("Goal preempted.");
as_.setPreempted();
}
void odomCallback(const nav_msgs::Odometry::ConstPtr &msg) { odom = *msg; }
};
int main(int argc, char **argv) {
ros::init(argc, argv, "node_action");
MoveAction server("action_custom_msg_as");
ros::spin();
return 0;
}

Compilando o pacote e lançando a simulação

Em um terminal, inicie o Gazebo usando o comando apropriado para visualizar o robô BB-8 pronto para operação. Isso abrirá a janela do Gazebo.

roslaunch bb_8_gazebo main.launch

No segundo terminal, execute o seguinte comando para compilar apenas o pacote que criamos. Isso economiza tempo, já que compilará apenas um pacote em vez de todos os existentes.

cd ~/catkin_ws/; catkin_make --only-pkg-with-deps bb8_action_pkg; source devel/setup.bash

Se tudo foi feito corretamente, o prompt não acusará nenhum erro:

Rodando o servidor de serviços

No terminal 3, execute o comando para iniciar o servidor de ações:

rosrun bb8_action_pkg bb8_action_server

Não se preocupe com este terminal, abra um novo para prosseguir com os passos deste tutorial.

Invocando o feedback da ação

Abra um quarto terminal para receber feedback do robô com informações sobre sua localização no espaço tridimensional. Essas atualizações são recebidas a cada dois segundos, permitindo que você saiba a posição do robô mesmo que ele não esteja visível.

rostopic echo action_custom_msg_as/feedback

Não se preocupe se nada aparecer inicialmente, pois o servidor ainda não está em execução, então não haverá feedback disponível ainda. Isso é normal.

Chamando a ação criada

No quinto terminal, execute o seguinte comando:

rostopic pub action_custom_msg_as/goal bb8_action_pkg/CustomActionMsgActionGoal

Após digitar o comando, não pressione ‘Enter’. Em vez disso, pressione ‘Tab’ duas vezes para autocompletar com os elementos necessários. Em seguida, você poderá selecionar o goal desejado, como ‘turn’, ‘walk’ ou ‘stop’.”

O robô deve se mover de acordo.

Visualizando o feedback

De volta ao terminal 4 temos:

As informações de odometria sempre indicarão onde seu robô está localizado, mesmo que a visualização seja obstruída por um Star Destroyer. Aliás, este método é excelente para explorar e localizar aquela entrada secreta em uma colossal nave inimiga.

Esperamos que este tutorial seja útil e que você se divirta trabalhando com o BB-8, um robô incrível tanto em termos gráficos quanto funcionais.

 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.

Pin It on Pinterest