Workshop - ROS O sistema operacional para robôs

Propaganda
Workshop - R.O.S. O sistema operacional para robôs
Lucas, Thiago e Rafael
3 de fevereiro de 2017
Agenda
1
O que é ROS?
2
História
3
Como funciona?
Estrutura
Publisher e Subscriber
4
Mãos a obra
Sistema Operacional
Criando e navegando em um package
Criando publishers e subscribers
O que é ROS?
Robot Operating System
• Framework que auxilia na escrita de softwares para
robôs;
• Coleção de ferramentas, bibliotecas e convenções com o
objetivo de simplificar a criação de programas para
tarefas complexas e robustas em robôs independente da
plataforma.
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
1 / 32
História
03/2010
08/2010
03/2011
08/2011
04/2013
12/2012
09/2013
07/2014
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
2 / 32
História
05/2015
Lucas, Thiago e Rafael
05/2016
ROS Aula 01
3 de fevereiro de 2017
3 / 32
História
ROS - 5 years
https://www.youtube.com/watch?v=PGaXiLZD2KQ
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
4 / 32
História
ROS - 8 years
https://vimeo.com/146183095
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
5 / 32
Como funciona o ROS? - Estrutura
• Organizado através de stacks e packages;
• Um stack possui diversos packages;
• Um package possui um, ou vários, node. Nodes são processos em
execução no computador. Eles contem as ações e processamentos de
entrada e saída no robô;
• A comunicação entre os nodes é feita através de messages;
• As messages são transportadas no ROS através de topics;
• Os nodes podem emitir(publisher) ou receber(subscriber) messages;
• Todo o sistema é controlado por um node chamado de master.
Informações retiradas de http://wiki.ros.org/ROS/Tutorials.
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
6 / 32
Como funciona o ROS? - Publisher e Subscriber
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
7 / 32
Como funciona o ROS? - Publisher e Subscriber
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
8 / 32
Sistemas Operacionais
Outros OS (Experimental):
• OS X (Homebrew);
• Arch Linux;
• Android (NDK);
• Debian Wheezy;
• OpenEmbedded/Yocto.
versão 14.04 LTS -> ROS Indigo
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
9 / 32
Configurando a máquina virtual
• Para proceguir, vamos utilizar uma máquina virtual para conseguirmos
trabalhar com o ROS no Linux.
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
10 / 32
Configurando a máquina virtual
• Vamos abrir a máquina virtual!
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
11 / 32
Configurando a máquina virtual
• Com a VirtualBox aberta, vamos clicar em Machine->Add...,
selecionar o arquivo .vbox da pasta WS_CP_2017 e clicar em Open
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
12 / 32
Configurando a máquina virtual
• Agora já teremos o Linux rodando na máquina virtual, já podemos
proceguir!
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
13 / 32
Configurando a máquina virtual
• Feito isso, a máquina virtual está criada! Agora vamos clicar em Start
• Login: WS_CP_2017 Password: rosworkshop
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
14 / 32
Navegando pelo workspace
Conferindo a configuração.
$ echo $ROS_PACKAGE_PATH
A saída deve ser:
/home/youruser/catkin_ws/src:/opt/ros/kinetic/share:/opt/
ros/kinetic/stacks
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
15 / 32
Primeiro package
$ cd ~/catkin_ws/src
$ catkin_create_pkg ros_workshop std_msgs rospy roscpp
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
16 / 32
Compilando um package
$ cd ~/catkin_ws
$ catkin_make
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
17 / 32
Acessando seu package
$ roscd ros_workshop
$ ls
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
18 / 32
Criando um publisher em Python
$
$
$
$
cd ~/catkin_ws/src/ros_workshop
mkdir scripts
cd scripts
gedit talker.py
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
19 / 32
Criando um publisher em Python
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher(’chatter’, String, queue_size=10)
rospy.init_node(’talker’, anonymous=True)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
hello_str = "hello␣world␣%s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == ’__main__’:
try:
talker()
except rospy.ROSInterruptException:
pass
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
20 / 32
Executando talker.py
$ chmod +x talker.py
Em um terminal execute:
$ roscore
Em um segundo terminal execute:
$ rosrun ros_workshop talker.py
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
21 / 32
Vamos agora ver o tópico criado
• O comando rostopic list lista os tópicos que estão publicando
informação de um Nó.
Para podermos analisar o tópico que acabamos de criar, em outro terminal
rode o comando a seguir:
$ rostopic list
Para ver a informação puplicada pelo Nó:
$ rostopic echo /chatter
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
22 / 32
Criando um subscriber em Python
$ cd ~/catkin_ws/src/ros_workshop
$ cd scripts
$ gedit listener.py
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
23 / 32
Criando um subscriber em Python
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + "I␣heard␣%s", data.data)
def listener():
rospy.init_node(’listener’, anonymous=True)
rospy.Subscriber("chatter", String, callback)
rospy.spin()
if __name__ == ’__main__’:
listener()
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
24 / 32
Executando listener.py
$ chmod +x listener.py
Em um segundo terminal execute:
$ rosrun ros_workshop listener.py
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
25 / 32
Atividade
Vamos agora controlar um ”robô” em forma de tartaruga no simulador!
• Vamos Fechar todas as janelas de terminal abertas...
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
26 / 32
Criando um publisher para controlar a tartaruga!
$
$
$
$
cd ~/catkin_ws/src/ros_workshop
cd scripts
gedit turtle_circle.py
chmod +x listener.py
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
27 / 32
Criando um publisher para controlar a tartaruga!
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Twist
def turtle_circle():
pub = rospy.Publisher(’/turtle1/cmd_vel’, Twist, queue_size=10)
rospy.init_node(’turtle_circle’, anonymous=True)
rate = rospy.Rate(10) # 10hz
vel = Twist()
while not rospy.is_shutdown():
vel.linear.x = 0.5
vel.angular.z = 0.2
pub.publish(vel)
rate.sleep()
if __name__ == ’__main__’:
try:
turtle_circle()
except rospy.ROSInterruptException:
pass
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
28 / 32
Atividade
Em um terminal execute:
$ roscore
Em outro terminal execute:
$ rosrun turtlesim turtlesim_node
Em outro terminal execute:
$ rosrun ros_workshop turtle_circle.py
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
29 / 32
Atividade
Observe a tartaruga, ela deverá estar andando em circulo!
• Com a versatilidade do ROS o mesmo código feito para a tartaruga,
com algumas modificações, pode controlar um robô real, como os
demonstrados nos vídeos, mudando apenas o nome do tópico!
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
30 / 32
Atividade
Vamos agora observar como o ROS está lidando com os nós!
Com a tartaruga ainda andando em círculos, em um terminal rode:
$ rosrun rqt_graph rqt_graph
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
31 / 32
Referências
Todas as informações e exemplos retirados do site oficial do ROS.
http://wiki.ros.org/ROS/Tutorials
Lucas, Thiago e Rafael
ROS Aula 01
3 de fevereiro de 2017
32 / 32
Download