Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

73
Equation Chapter 1 Section 1 Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Transcript of Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Page 1: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Equation Chapter 1 Section 1

Autor: Jesús Tamarit Domínguez

Tutor: Federico Cuesta Rojo

Page 2: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 3: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 4: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 5: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 6: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 7: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 8: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 9: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Resumen

Abstract

Page 10: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Índice

Resumen 8

Índice 9

Índice de Figuras 10

1 Introducción 1

1.1 El Robot Andruino 2

1.2 Objetivos y Estructura de la memoria 3

2 Ros 5

2.1. Instalación de ROS 5

2.2 Estructura del espacio de trabajo en ROS 6

2.3 Estructura interna de ROS 9

2.4 Descripción SDF 10

2.4.1 Link 10

2.4.2 Joint 13

2.4.3 Plugins 15

2.4.4 Inercias 16

2.5 Otros comandos de ROS 18

2.5.1 Rostopic 18

2.5.2 Rosnode 18

2.5.3 rqt-graph 19

2.5.4 TF 20

2.5.5 RViz 21

3 Descripción y modelado del robot 23

3.1 OpenScad 23

3.2 Comandos Principales de OpenScad 24

3.3 Modelado de las piezas del robot Andruino 26

3.3.1 Base 27

3.3.2 Rueda Derecha 29

3.3.3 Rueda Izquierda 29

3.3.4 Rueda de Castor 30

3.3.5 Andruino y Sensores 30

3.3.6 Teléfono 31

3.3.7 Colisiones 32

4 Implementación del robot Andruino en ROS 35

4.1 Plugins utilizados en el robot 35

4.1.1 Plugin de la cámara 35

4.1.2 Plugin de los sensores de ultrasonidos 36

4.1.3 Plugin del sensor IMU 37

4.1.4 Plugin del movimiento 38

4.2 Estructura de los paquetes de código 40

Page 11: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

4.2.1 Paquetes creados para el proyecto 40

4.2.2 Paquetes disponibles previamente 40

4.2.3 Metapaquetes disponibles previamente 41

4.3 Modelo en SDF 42

4.4 Control del Movimiento del robot 43

4.4.1 Seguimiento de Línea 45

4.4.2 Evitación de Obstáculos 47

5 Simulación del robot Andruino en Gazebo 49

5.1 El Simulador Gazebo 49

5.2 Simulación del robot Andruino 52

5.3 Simulación de varios robots a la vez 54

6 Desarrollos futuros y Conclusiones 57

Referencias 59

Glosario 60

Page 12: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 13: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 14: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 15: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 16: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Page 17: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 18: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu

$(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-

latest.list'

Page 19: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

& sudo apt-key adv --keyserver hkp://ha.pool.sks-

keyservers.net:80 --recv-key

421C365BD9FF1F717815A3895523BAEEB01FA116

$ sudo apt-get update

$ sudo apt-get install ros-melodic-desktop-full

$ source /opt/ros/melodic/setup.bash

$ mkdir -p ~/catkin_ws/src

$ cd ~/catkin_ws/

$ catkin_make

$ source devel/setup.bash

Page 20: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ catkin_create_pkg nombre_paquete dependencias

Page 21: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Page 22: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Page 23: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

& sudo apt-get install build-essential libtinyxml-dev libboost-

all-dev cmake mercurial pkg-config

& sudo apt-get install libsdformat2-dev

<link name='base'>

<pose>0 0 0.5 0 0 0</pose>

<visual name='visual_base'>

<geometry>

Page 24: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

<mesh>

<uri>model://andruino_description/meshes/base.stl</uri>

<scale>0.01 0.01 0.01</scale>

</mesh>

</geometry>

<material>

<ambient>0.8 0 0 1.0</ambient>

<diffuse>0.8 0 0 1.0</diffuse>

</material>

</visual>

<collision name='collision_base'>

<geometry>

<mesh>

<uri>model://andruino_description/meshes/collision_base.stl

</uri>

<scale>0.01 0.01 0.01</scale>

</mesh>

</geometry>

</collision>

<surface>

<friction>

<ode>

<mu>0</mu>

<mu2>0</mu2>

<slip1>1.0</slip1>

<slip2>1.0</slip2>

</ode>

Page 25: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

</friction>

</surface>

<inertial>

<mass>0.3</mass>

<inertia>

<ixx>2.423</ixx>

<ixy>0</ixy>

<ixz>0.255</ixz>

<iyy>3.557</iyy>

<iyz>0</iyz>

<izz>3.410</izz>

</inertia>

</inertial>

<sensor type="ray" name="hc_sr04_1">

<pose>0.4575 0.40 0.78 0 0.175 0.7854</pose>

<visualize>true</visualize>

<update_rate>30</update_rate>

<ray>

<scan>

<horizontal>

<samples>32</samples>

<resolution>1</resolution>

<min_angle>-0.3926991</min_angle>

<max_angle>0.3926991</max_angle>

</horizontal>

Page 26: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

</scan>

<range>

<min>0.02</min>

<max>3</max>

<resolution>0.02</resolution>

</range>

<noise>

<mean>0.0</mean>

<stddev>0.02</stddev>

</noise>

</ray>

<plugin name="hc_sr04_1_plugin"

filename="libgazebo_ros_range.so">

<gaussianNoise>0.005</gaussianNoise>

<always_on>true</always_on>

<updateRate>30</updateRate>

<topicName>hc_sr04_1</topicName>

<frameName>hc_sr04_1</frameName>

<frameId>hc_sr04_1</frameId>

<fov>32</fov>

<radiation>ultrasound</radiation>

</plugin>

</sensor>

<joint type="revolute" name="rueda_izquierda_joint">

<pose>-0.56 -0.54 0.15 0 0 0</pose>

Page 27: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

<axis>

<xyz>0 1 0</xyz>

<dynamics>

<damping>0.1</damping>

<friction>0.1</friction>

</dynamics>

</axis>

<parent>base</parent>

<child>rueda_izquierda</child>

<?xml version="1.0"?>

<model>

<name>Andruino</name>

<version>1.0</version>

<sdf version='1.4'>andruino.sdf</sdf>

<author>

<name>Jesus Tamarit Dominguez</name>

<email>[email protected]</email>

</author>

<description>

Page 28: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Robot Andruino usado para el TFG

</description>

</model>

<plugin name="camera_controller"

filename="libgazebo_ros_openni_kinect.so">

<pose>0.01 0 0 0 0 0</pose>

<alwaysOn>true</alwaysOn>

<updateRate>30.0</updateRate>

<cameraName>camera</cameraName>

<frameName>camera_link</frameName>

<imageTopicName>image</imageTopicName>

<depthImageTopicName>depth/image</depthImageTopicName>

Page 29: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

<pointCloudTopicName>depth/points</pointCloudTopicName>

<cameraInfoTopicName>camera_info</cameraInfoTopicName>

<depthImageCameraInfoTopicName>depth/camera_info</depthImageCame

raInfoTopicName>

<pointCloudCutoff>0.4</pointCloudCutoff>

<hackBaseline>0.07</hackBaseline>

<distortionK1>0.0</distortionK1>

<distortionK2>0.0</distortionK2>

<distortionK3>0.0</distortionK3>

<distortionT1>0.0</distortionT1>

<distortionT2>0.0</distortionT2>

<CxPrime>0.0</CxPrime>

<Cx>0.0</Cx>

<Cy>0.0</Cy>

<focalLength>0.0</focalLength>

Page 30: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ meshlab

Page 31: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

& rostopic list

$ rosnode info rosout

Page 32: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ rosrun rqt-graph rqt-graph

Page 33: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ rosrun rqt_image_view rqt_image_view /camera/image

$ rosrun rqt-tf-tree rqt-tf-tree

Page 34: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$rosrun rviz rviz

$ roslaunch gazebo2rviz gazebo2rviz.launch

Page 35: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 36: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 37: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Nombre_variable = cantidad;

&fn = 100;

Page 38: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Page 39: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Page 40: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 41: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 42: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 43: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 44: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 45: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 46: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 47: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 48: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

35

Page 49: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

<plugin name="camera_controller"

filename="libgazebo_ros_openni_kinect.so">

<pose>0.01 0 0 0 0 0</pose>

<alwaysOn>true</alwaysOn>

<updateRate>30.0</updateRate>

<cameraName>camera</cameraName>

<frameName>camera_link</frameName>

<imageTopicName>image</imageTopicName>

<depthImageTopicName>depth/image</depthImageTopicName>

<pointCloudTopicName>depth/points</pointCloudTopicName>

<cameraInfoTopicName>camera_info</cameraInfoTopicName>

<depthImageCameraInfoTopicName>depth/camera_info

</depthImageCameraInfoTopicName>

<pointCloudCutoff>0.4</pointCloudCutoff>

<hackBaseline>0.07</hackBaseline>

<distortionK1>0.0</distortionK1>

<distortionK2>0.0</distortionK2>

<distortionK3>0.0</distortionK3>

<distortionT1>0.0</distortionT1>

<distortionT2>0.0</distortionT2>

<CxPrime>0.0</CxPrime>

<Cx>0.0</Cx>

<Cy>0.0</Cy>

<focalLength>0.0</focalLength>

</plugin>

Page 50: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

<plugin name="hc_sr04_2_plugin"

filename="libgazebo_ros_range.so">

<gaussianNoise>0.005</gaussianNoise>

<always_on>true</always_on>

<updateRate>30</updateRate>

<topicName>hc_sr04_2</topicName>

<frameName>hc_sr04_2</frameName>

<frameId>hc_sr04_2</frameId>

<fov>32</fov>

<radiation>ultrasound</radiation>

</plugin>

Page 51: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

<plugin name="gazebo_ros_imu_controller"

filename="libhector_gazebo_ros_imu.so">

<turnGravityOff>false</turnGravityOff>

<alwaysOn>true</alwaysOn>

<bodyName>IMU_link</bodyName>

<frameName>IMU_link</frameName>

<frameId>IMU_link</frameId>

<topicName>imu</topicName>

<serviceName>imu_service</serviceName>

<gaussianNoise>0.0</gaussianNoise>

<rpyOffsets>0 0 0</rpyOffsets>

<updateRate>30.0</updateRate>

</plugin>

Page 52: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

<plugin name="differential_drive_controller"

filename="libgazebo_ros_diff_drive.so">

<alwaysOn>true</alwaysOn>

<updateRate>25.0</updateRate>

<leftJoint>rueda_izquierda_joint</leftJoint>

<rightJoint>rueda_derecha_joint</rightJoint>

<wheelSeparation>1.5</wheelSeparation>

<wheelDiameter>0.63</wheelDiameter>

<torque>5</torque>

<commandTopic>cmd_vel</commandTopic>

<odometryTopic>odom</odometryTopic>

<odometryFrame>odom</odometryFrame>

<robotBaseFrame>base_link</robotBaseFrame>

<rosDebugLevel>na</rosDebugLevel>

<publishWheelTF>false</publishWheelTF>

<publishOdomTF>true</publishOdomTF>

<publishWheelJointState>false</publishWheelJointState>

<wheelAcceleration>0</wheelAcceleration>

<wheelTorque>5</wheelTorque>

<odometrySource>1</odometrySource>

<publishTf>1</publishTf>

</plugin>

Page 53: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Page 54: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Page 55: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ gz sdf -k andruino_description/sdf/andruino.sdf

Page 56: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ rosrun pysdf sdf2urdf.py andruino.sdf andruino.urdf

$ urdf_to_graphiz andruino.urdf

Page 57: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Page 58: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 59: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

𝐶𝑋 =𝑀10

𝑀00𝐶𝑌 =

𝑀01

𝑀00

𝐸𝑟𝑟𝑋 = 𝐶𝑋 −𝑊𝑖𝑑𝑡ℎ

2

𝑐𝑚𝑑. 𝑎𝑛𝑔𝑢𝑙𝑎𝑟. 𝑧 =𝐸𝑟𝑟𝑋1000

𝐸𝑟𝑟𝑌 = 𝐶𝑌 − 𝐶𝑌𝐶𝑜𝑚𝑝𝑙𝑒𝑡𝑜

𝑐𝑚𝑑. 𝑙𝑖𝑛𝑒𝑎𝑟. 𝑥 = 0.2 + 3 ∗𝐸𝑟𝑟𝑌1000

Page 60: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

𝑐𝑚𝑑. 𝑎𝑛𝑔𝑢𝑙𝑎𝑟. 𝑧 = −0.1 ∗𝑑𝑖𝑠𝑡_𝑠𝑒𝑛𝑠𝑜𝑟_𝑑𝑒𝑟𝑒𝑐ℎ𝑎 − 𝑐𝑜𝑙𝑙𝑖𝑠𝑖𝑜𝑛𝑀𝑎𝑥

𝑐𝑜𝑙𝑙𝑖𝑠𝑖𝑜𝑛 − 𝑐𝑜𝑙𝑙𝑖𝑠𝑖𝑜𝑛𝑀𝑎𝑥

Page 61: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

Page 62: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 63: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ sudo sh -c 'echo "deb

http://packages.osrfoundation.org/gazebo/ubuntu-stable

`lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-

stable.list'

$ wget http://packages.osrfoundation.org/gazebo.key -O - | sudo

apt-key add –

$ sudo apt-get update

$ sudo apt-get install gazebo9

$ sudo apt-get install libgazebo9-dev

$ gazebo

$ roslaunch andruino_gazebo andruino_world_simple.launch

Page 64: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ sudo nano ~/.ignition/fuel/config.yaml

Page 65: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ source /devel/setup.bash

$ export GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}:

/home/kramertool/catkin_ws/src/

$ roslaunch andruino_gazebo andruino_world_circuito_deco.launch

Page 66: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ roslaunch gazebo_multi_robot andruino.launch

Page 67: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ rosrun gazebo_follower Follower_obstaculos andruino1

Page 68: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ roslaunch gazebo_multi_robot robots.launch

$ rosrun gazebo_follower Follower_obstaculos nombre_robot

Page 69: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 70: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo

$ catkin_make

Page 71: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 72: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo
Page 73: Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo