Escolher ambiente para execução
source /opt/ros/galactic/setup.bash
# ou
source devel/setup.bash
Configurar source padrão
echo "source /opt/ros/galactic/setup.bash" >> ~/.bashrc
Setar uma variavel de ambiente
export ROS_DOMAIN_ID=<your_domain_id>
echo "export ROS_DOMAIN_ID=<your_domain_id>" >> ~/.bashrc
Instalar pacote turtlesim
sudo apt update
sudo apt install ros-galactic-turtlesim
Verificar executaveis do pacote turtlesim
ros2 pkg executables turtlesim
Rodar executavel ROS2
ros2 run turtlesim turtlesim_node
Rodar teleop turtlesim
ros2 run turtlesim turtle_teleop_key
Verificar nodes e seus topics, services e actions
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
Instalar rqt
sudo apt update
sudo apt install ~nros-galactic-rqt*
Remapear nodes(Pesquisar mais sobre remaping)
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
Repositorio Turtlesim (/ros_tutorials/tree/galactic-devel/turtlesim)
git clone https://github.com/ros/ros_tutorials.git
"Cada node no ROS deve ser responsável por um único propósito de módulo (por exemplo, um node para controlar os motores das rodas, um node para controlar um telêmetro a laser, etc). Cada node pode enviar e receber dados para outros nodes por meio de topics, services, actions, ou parameters."
Executando um node ROS2
ros2 run <package_name> <executable_name>
Remap "O remapeamento permite reatribuir propriedades de nó padrão, como nome de nó, nomes de tópicos, nomes de serviço etc. "
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
Vizualizar informações de um node.
ros2 node info /my_turtle
rqt_graph
Listando topicos
ros2 topic list
Listando dopicos com seus respectivos tipos
ros2 topic list -t
Visualisar dados de uma
ros2 topic echo <topic_name>
Para ter mais detalhes de um topic
ros2 topic info /turtle1/cmd_vel
Saida
Type: geometry_msgs/msg/Twist
Publisher count: 1
Subscription count: 1
Topic pub
ros2 topic pub <topic_name> <msg_type> '<args>'
Exemplo de um topi pub (Enviar comando apenas uma vez "--once")
ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
O mesmo comando pode ser modificado de "--once" para "--rate 1" para que a mensagem seja publicado no topico com uma frequencia de 1hz até que o comando seja interrompido.
Para monitorar a frequencia em que um topico esta sendo publicado na rede.
ros2 topic hz /turtle1/pose
Services são outro método de comunicação para nodes no ROS graph. Os serviços são baseados em um modelo call-and-response, versus o modelo de topics’ publisher-subscriber. Enquanto os topics permitem que os nós assinem fluxos de dados e obtenham atualizações contínuas, os serviços só fornecem dados quando são especificamente chamados por um cliente.
Verificando o tipo de um determinado service
ros2 service type <service_name>
ros2 service type /clear
Lisando os services ativos com detalhes
ros2 service list -t
Procurar por um service de um tipo especifico
ros2 service find <type_name>
Ex
ros2 interface show std_srvs/srv/Empty
ros2 interface show turtlesim/srv/Spawn
Sintax Service call
ros2 service call <service_name> <service_type> <arguments>
ex
ros2 service call /clear std_srvs/srv/Empty
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
Understanding ROS 2 parameters
Um parameter é um valor de configuração de um node. Você pode pensar em parameter como configurações de node. Um node pode armazenar parâmetros como inteiros, floats, booleanos, strings e listas. No ROS 2, cada nó mantém seus próprios parâmetros. Para obter mais informações sobre os parâmetros, consulte o documento conceitual.
Listar parametros dos nodes ativos
ros2 param list
Sintax do param get
ros2 param get <node_name> <parameter_name>
Ex
ros2 param get /turtlesim background_g
Sintax param set
ros2 param set <node_name> <parameter_name> <value>
Ex
ros2 param set /turtlesim background_r 150
O comando param dump salva parametros de um node em arquivos.yaml
ros2 param dump sintax
ros2 param dump <node_name>
ex
ros2 param dump /turtlesim
Asaida do comando será um arquivo com os dados abaixo
/turtlesim:
ros__parameters:
background_b: 255
background_g: 86
background_r: 150
qos_overrides:
/parameter_events:
publisher:
depth: 1000
durability: volatile
history: keep_last
reliability: reliable
use_sim_time: false
Assim como é possivel salvar os parametros, tambem podemos carregar dados de um arquivo .yaml
Sintax param load
ros2 param load <node_name> <parameter_file>
Ex
ros2 param load /turtlesim ./turtlesim.yaml
Tambem é possivel carregar arquivos no momento de rodar um node.
Sintax
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
Ex
ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml
"As ações são um dos tipos de comunicação no ROS 2 e destinam-se a tarefas de longa duração. Eles consistem em três partes: um objetivo, feedback e um resultado.
As ações são construídas em tópicos e serviços. Sua funcionalidade é semelhante aos serviços, exceto que as ações podem ser canceladas. Eles também fornecem feedback constante, ao contrário de serviços que retornam uma única resposta.
As ações usam um modelo cliente-servidor, semelhante ao modelo editor-assinante (descrito no tutorial de tópicos). Um nó “cliente de ação” envia uma meta para um nó “servidor de ação” que reconhece a meta e retorna um fluxo de feedback e um resultado. "
O node info apresenta tos os subscribers, publishers, services, actions servers e clients
ros2 node info /turtlesim
Retorno:
/turtlesim
Subscribers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/turtle1/cmd_vel: geometry_msgs/msg/Twist
Publishers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/color_sensor: turtlesim/msg/Color
/turtle1/pose: turtlesim/msg/Pose
Service Servers:
/clear: std_srvs/srv/Empty
/kill: turtlesim/srv/Kill
/reset: std_srvs/srv/Empty
/spawn: turtlesim/srv/Spawn
/turtle1/set_pen: turtlesim/srv/SetPen
/turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
/turtle1/teleport_relative: turtlesim/srv/TeleportRelative
/turtlesim/describe_parameters: rcl_interfaces/srv/DescribeParameters
/turtlesim/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/turtlesim/get_parameters: rcl_interfaces/srv/GetParameters
/turtlesim/list_parameters: rcl_interfaces/srv/ListParameters
/turtlesim/set_parameters: rcl_interfaces/srv/SetParameters
/turtlesim/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
Service Clients:
Action Servers:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
Action Clients:
Para listar actions ativos
ros2 action list
Para listar actions ativos com seus tipos
ros2 actions list -t
retorno:
/turtle1/rotate_absolute
Verificando inforções do action
ros2 action info /turtle1/rotate_absolute
Retorno
Action: /turtle1/rotate_absolute
Action clients: 1
/teleop_turtle
Action servers: 1
/turtlesim
"Isso nos diz o que aprendemos anteriormente ao executar as informações do nó ros2 em cada nó: O nó /teleop_turtle tem um cliente de ação e o nó /turtlesim tem um servidor de ação para a ação /turtle1/rotate_absolute."
Para verificar a extrutura de um action
ros2 interface show turtlesim/action/RotateAbsolute
retorna
The desired heading in radians
float32 theta
---
The angular displacement in radians to the starting position
float32 delta
---
The remaining rotation in radians
float32 remaining
Sintaxros2 action send_goal
ros2 action send_goal <action_name> <action_type> <values>
precisam estar no formato YAML.
Ex
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"
retorna:
Waiting for an action server to become available...
Sending goal:
theta: 1.57
Goal accepted with ID: f8db8f44410849eaa93d3feb747dd444
Result:
delta: -1.568000316619873
Goal finished with status: SUCCEEDED
ex2, adicionando feedback ao terminal
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: -1.57}" --feedback
retorna
Sending goal:
theta: -1.57
Goal accepted with ID: e6092c831f994afda92f0086f220da27
Feedback:
remaining: -3.1268222332000732
Feedback:
remaining: -3.1108222007751465
…
Result:
delta: 3.1200008392333984
Goal finished with status: SUCCEEDED]
"rqt_console é uma ferramenta GUI usada para introspectar mensagens de log no ROS 2. Normalmente, as mensagens de log aparecem em seu terminal. Com o rqt_console, você pode coletar essas mensagens ao longo do tempo, visualizá-las de perto e de forma mais organizada, filtrá-las, salvá-las e até recarregar os arquivos salvos para introspecção em um momento diferente."
Abrir rqt_console
ros2 run rqt_console rqt_console
Tipos de mensagens de log disponiveis
Fatal
Error
Warn
Info
Debug
"Mensagens fatais indicam que o sistema será encerrado para tentar se proteger de prejuízos.
As mensagens de erro indicam problemas significativos que não necessariamente danificam o sistema, mas o impedem de funcionar corretamente.
As mensagens de aviso indicam atividade inesperada ou resultados não ideais que podem representar um problema mais profundo, mas não prejudicam totalmente a funcionalidade.
As mensagens de informação indicam atualizações de eventos e status que servem como uma verificação visual de que o sistema está funcionando conforme o esperado.
As mensagens de depuração detalham todo o processo passo a passo da execução do sistema. "
Altere o nivel de mensagem
ros2 run turtlesim turtlesim_node --ros-args --log-level WARN
"Os arquivos de inicialização permitem que você inicie e configure vários executáveis contendo nós ROS 2 simultaneamente."
Rodar launch de exemplo
ros2 launch turtlesim multisim.launch.py
multisim.launch.py
# turtlesim/launch/multisim.launch.py
from launch import LaunchDescription
import launch_ros.actions
def generate_launch_description():
return LaunchDescription([
launch_ros.actions.Node(
namespace= "turtlesim1", package='turtlesim', executable='turtlesim_node', output='screen'),
launch_ros.actions.Node(
namespace= "turtlesim2", package='turtlesim', executable='turtlesim_node', output='screen'),
])
Esse tutorial é introdutorio, na seção Intermediate o tema sera abordado com mais detalhes.
Recording and playing back data
"ros2 bag é uma ferramenta de linha de comando para gravar dados publicados em tópicos em seu sistema. Ele acumula os dados passados em qualquer número de tópicos e os salva em um banco de dados. Você pode então reproduzir os dados para reproduzir os resultados de seus testes e experimentos. Gravar tópicos também é uma ótima maneira de compartilhar seu trabalho e permitir que outras pessoas o recriem."
Instalar ros2 bag
sudo apt-get install ros-galactic-ros2bag \
ros-galactic-rosbag2-storage-default-plugins
Sintax ros2 bag
ros2 bag record <topic_name>
Ex (salvar dados no arquivo record)
ros2 bag record /turtle1/cmd_vel
Salvando mais de um topic no arquivo subset
ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
Verificar informações do bag
ros2 bag info <bag_file_name>
Reproduzindo dados de um bag
ros2 bag play <bag_file_name>
Ex
ros2 bag play subset