You are on page 1of 14

Publicao de Mensagens

Walter Fetter Lages


fetter@ece.ufrgs.br

Universidade Federal do Rio Grande do Sul


Escola de Engenharia
Departamento de Sistemas Eltricos de Automao e Energia
ENG10026 Robtica A

Copyright (c) Walter Fetter Lages p.1


Introduo

Nodo: processo do S.O. hospedeiro


Tpico: mecanismo de comunicao entre nodos do
tipo publisher/subscriber
Mensagem: dados publicados nos tpicos
Grfico de computao: Representa a comunicao
entre os nodos atravs de tpicos

Copyright (c) Walter Fetter Lages p.2


Tpicos

Nodos podem publicar mensagens em tpicos


Cada tpico pode ter vrios publicadores e
assinantes

Cada nodo pode publicar ou assinar vrios


tpicos
Publicadores e assinantes no sabem da
existncia um dos outros
A ordem de execuo no garantida
Comunicao assncrona
Copyright (c) Walter Fetter Lages p.3
Turtlesim
Utilizando-se o rqt_graph ou
rostopiclist pode-se verificar que o
movimento da tartaruga controlado atravs do
tpico /turtle1/cmd_vel

Deve-se criar um nodo que publique neste tpico


O tipo do tpico pode ser verificado com o
comando
rostopicinfo/turtle1_cmd_vel
Os detalhes do tipo podem ser verificados em
/opt/ros/indigo/share Copyright (c) Walter Fetter Lages p.4
Criao do Pacote

Criar o pacote:
cd ~/catkin_ws/src
catkin_create_pkg turtle_command geometry_msgs roscpp

O arquivo package.xml deve ser editado para


configurar os detalhes de documentao e incluir
dependncias
Editar o arquivo CMakeLists.txt para
ajustar as tags add_executable e
target_link_libraries:
add_executable(turtle_command src/turtle_command.cpp)
target_link_libraries(turtle_command ${catkin_LIBRARIES})
Copyright (c) Walter Fetter Lages p.5
Cdigo Fonte do Nodo

Editar o arquivo com o cdigo fonte no diretrio


src
Compilar com os comandos:
cd ~/catkin_ws
catkin_make

O executvel estar em devel/lib/turtle_


command/turtle_command

Copyright (c) Walter Fetter Lages p.6


Cdigo Fonte do Nodo
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

class TurtleCmd
{
public:
TurtleCmd(ros::NodeHandle node);
~TurtleCmd(void);
void setCommand(void);

private:
ros::NodeHandle node_;
ros::Publisher cmdPublisher;
}; Copyright (c) Walter Fetter Lages p.7
Cdigo Fonte do Nodo
TurtleCmd::TurtleCmd(ros::NodeHandle node)
{
node_=node;
cmdPublisher=node_.advertise<geometry_msgs::Twist>("/turtle/
cmd",1000);
}

TurtleCmd::~TurtleCmd(void)
{
cmdPublisher.shutdown();
}

Copyright (c) Walter Fetter Lages p.8


Cdigo Fonte do Nodo
void TurtleCmd::setCommand(void)
{
geometry_msgs::Twist cmd;

cmd.linear.x=1.0;
cmd.linear.y=1.0;
cmd.linear.z=0.0;

cmd.angular.x=0.0;
cmd.angular.y=0.0;
cmd.angular.z=1.0;

cmdPublisher.publish(cmd);
} Copyright (c) Walter Fetter Lages p.9
Cdigo Fonte do Nodo
int main(int argc,char argv[])
{
ros::init(argc,argv,"turtle_command");
ros::NodeHandle node;
TurtleCmd turtleCmd(node);
ros::Rate loop(10);
while(ros::ok())
{
turtleCmd.setCommand();
ros::spinOnce();
loop.sleep();
}
return 0;
} Copyright (c) Walter Fetter Lages p.10
Execuo do Nodo

Chamar diretamente o executvel:


devel/lib/turtle_command/turtle_command

Usar o comando rosrun:


rosrun turtle_command turtle_command

Usar um arquivo de launch:


roslaunch turtle_command turtle_command.launch

Copyright (c) Walter Fetter Lages p.11


Lauch File

<launch>
<node name="turtle" pkg="turtlesim" type="turtlesim_node" output
="screen"/>

<node name="turtle_cmd" pkg="turtle_command" type="


turtle_command" output="screen">
<remap from="/turtle/cmd" to="/turtle1_/cmd_vel"/>
</node>
</launch>

Copyright (c) Walter Fetter Lages p.12


Publisher/Subscriber

Copyright (c) Walter Fetter Lages p.13


Pacote turtle_command

catkin_ws/
src/
turtle_command/
CMakeLists.txt
package.xml
launch/
turtle_command.launch
src/
turtle_command.cpp

Copyright (c) Walter Fetter Lages p.14

You might also like