scieee AI-readable full text Open interactive document viewer

Modelado 3D y simulación de un robot móvil en ROS y Gazebo

Tamarit Domínguez, Jesús

Abstract

En el proyecto se ha abordado la creación a partir de cero de un robot real modelo Andruino modelado en 3D mediante el programa OpenScad y su posterior integración en el sistema ROS mediante el lenguaje SDF y la utilización de plugins para el modelaje de los distintos sensores que conforman el robot. Posteriormente, se ha modelado el control del robot utilizando los datos de los sensores como información de entrada para realizar un control de seguimiento en linea y evitación de obstáculos. En la simulación de Gazebo se ha comprobado el correcto funcionamiento del control y de la simulación utilización utilizando varias instancias del robot a la vez. Finalmente, se han propuesto diferentes formas de extender el proyecto integrándolo a otros distintos,

Full text

Equation Chapter 1 Section 1 Autor: Jesús Tamarit Domínguez Tutor: Federico Cuesta Rojo Resumen Abstract • • • • $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/roslatest.list' & sudo apt-key adv --keyserver hkp://ha.pool.skskeyservers.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 • • • $ catkin_create_pkg nombre_paquete dependencias • • • • • • • • & sudo apt-get install build-essential libtinyxml-dev libboostall-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> <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> </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> $ rosrun rqt-graph rqt-graph $ rosrun rqt_image_view rqt_image_view /camera/image $ rosrun rqt-tf-tree rqt-tf-tree $rosrun rviz rviz $ roslaunch gazebo2rviz gazebo2rviz.launch Nombre_variable = cantidad; &fn = 100; • • • • • • • • • • • • • 35 <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> <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> <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> <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> • • • • • • • • • $ gz sdf -k andruino_description/sdf/andruino.sdf $ rosrun pysdf sdf2urdf.py andruino.sdf andruino.urdf $ urdf_to_graphiz andruino.urdf • • • • $ sudo nano ~/.ignition/fuel/config.yaml $ source /devel/setup.bash $ export GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}: /home/kramertool/catkin_ws/src/ $ roslaunch andruino_gazebo andruino_world_circuito_deco.launch $ roslaunch gazebo_multi_robot andruino.launch $ rosrun gazebo_follower Follower_obstaculos andruino1 • $ roslaunch gazebo_multi_robot robots.launch • $ rosrun gazebo_follower Follower_obstaculos nombre_robot $ catkin_make • • •