Introducción a la programación de desarrollo de aplicaciones ROS de transmisión y monitoreo del sistema de coordenadas tf (python)

ROS es la abreviatura de Robot Operating System Este artículo presenta la introducción del desarrollo de aplicaciones ROS, la programación de la transmisión y el monitoreo del sistema de coordenadas TF. Hay 2 tortugas en la simulación de la pequeña tortuga. El teclado controla la primera tortuga para moverse y ambas tortugas transmiten sus coordenadas. El monitor escucha las coordenadas de las dos tortugas, obtiene la posición relativa y controla a la segunda tortuga para que siga a la primera. El código es Python. La verificación de la prueba adopta el método roslaunch.

Creación de paquetes de proyectos

Este artículo es una continuación del artículo Programación de la transmisión y monitoreo del sistema de coordenadas tf en la introducción al desarrollo de la aplicación ROS Si ha realizado ese experimento, el paquete del proyecto se ha establecido, así que omita esta sección.

El  espacio de trabajo de ROS  se establece en el artículo Desarrollo de ROS y preparación de aplicaciones: crear un espacio de trabajo . Ahora, cree un paquete funcional:

cd ~ / catkin_ws / src

catkin_create_pkg learning_tf roscpp rospy tf turtlesim

La primera línea es para volver al directorio src del espacio de trabajo La creación del paquete de funciones debe ejecutarse en este directorio.

La segunda línea es el comando para crear el paquete de funciones, el primer parámetro es el nombre del paquete de funciones, aquí está learning_tf, y la siguiente es la biblioteca de dependencias del paquete de funciones, aquí hay un total de 4 bibliotecas de dependencias de roscpp rospy tf turtlesim.

Después de ejecutar el comando anterior, puede ver un directorio llamado learning_tf en el directorio src con el siguiente contenido:

CMakeLists.txt incluye package.xml src

Código de emisora

En el directorio del proyecto, que también es el directorio ~ / catkin_ws / src / learning_tf /, cree una nueva carpeta scripts y cree un archivo turtle_tf_broadcaster.py,

cd ~ // catkin_ws / src / learning_tf /

scripts mkdir

guiones de cd

nano turtle_tf_broadcaster.py

El contenido es:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import roslib
roslib.load_manifest('learning_tf')
import rospy

import tf
import turtlesim.msg

def handle_turtle_pose(msg, turtlename):
    br = tf.TransformBroadcaster()
    br.sendTransform((msg.x, msg.y, 0),
                     tf.transformations.quaternion_from_euler(0, 0, msg.theta),
                     rospy.Time.now(),
                     turtlename,
                     "world")

if __name__ == '__main__':
    rospy.init_node('turtle_tf_broadcaster')
    turtlename = rospy.get_param('~turtle')
    rospy.Subscriber('/%s/pose' % turtlename,
                     turtlesim.msg.Pose,
                     handle_turtle_pose,
                     turtlename)
    rospy.spin()

Primero defina una función de devolución de llamada, que incluye el establecimiento de una transmisión

El programa principal, primero define un nodo de suscriptor, establece la función de devolución de llamada
Una vez que se reciben los datos, llama a la función de devolución de llamada

Visita de contenido más detallado: http://wiki.ros.org/tf2/Tutorials/Writing%20a%20tf2%20broadcaster%20%28Python%29

Código de escucha

En el directorio de scripts del directorio del proyecto, que también es el directorio ~ / catkin_ws / src / learning_tf / scripts, cree un archivo turtle_tf_listener.py,

cd ~ // catkin_ws / src / learning_tf / scripts

nano turtle_tf_listener.py

El contenido es:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import roslib
roslib.load_manifest('learning_tf')
import rospy
import math
import tf
import geometry_msgs.msg
import turtlesim.srv

if __name__ == '__main__':
    rospy.init_node('turtle_tf_listener')

    listener = tf.TransformListener()

    rospy.wait_for_service('spawn')
    spawner = rospy.ServiceProxy('spawn', turtlesim.srv.Spawn)
    spawner(4, 2, 0, 'turtle2')

    turtle_vel = rospy.Publisher('turtle2/cmd_vel', geometry_msgs.msg.Twist,queue_size=1)

    rate = rospy.Rate(10.0)
    while not rospy.is_shutdown():
        try:
            (trans,rot) = listener.lookupTransform('/turtle2', '/turtle1', rospy.Time(0))
        except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
            continue
        angular = 4 * math.atan2(trans[1], trans[0])
        linear = 0.5 * math.sqrt(trans[0] ** 2 + trans[1] ** 2)
        cmd = geometry_msgs.msg.Twist()
        cmd.linear.x = linear
        cmd.angular.z = angular
        turtle_vel.publish(cmd)

        rate.sleep()

El código se presenta en  http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20%28Python%29 

lanzar archivo para iniciar la prueba

No es necesario compilar el código Python, pero debe configurarse como un archivo ejecutable

 chmod + x * .py

Aquí usamos roslaunch para comenzar la prueba:

 cd ~ // catkin_ws / src / learning_tf /

lanzamiento de mkdir

lanzamiento de cd

nano start_tf_demo_py.launch

<launch>

        <!-- Turtlesim Node-->
        <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
        <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>

        <node name="turtle1_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py">
          <param name="turtle" type="string" value="turtle1" />
        </node>
        <node name="turtle2_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py">
          <param name="turtle" type="string" value="turtle2" />
        </node>

    <node pkg="learning_tf" type="turtle_tf_listener.py" name="listener" />

</launch>

Guardar y Salir

Inicie roslaunch con el siguiente comando

roslaunch start_tf_demo_py.launch

Este comando está en la carpeta donde se encuentra el lanzamiento; de lo contrario, se requiere el nombre de la ruta delante de él.

También puede comenzar con un paquete de proyecto:

roslaunch learning_tf start_tf_demo_py.launch

Vea la interfaz de la tortuga simulada, regrese a la terminal de inicio y use las teclas de flecha para controlar el movimiento de la primera tortuga, puede ver la segunda tortuga siguiente.

El efecto es el siguiente:

Eso es todo para la introducción. 

 

Supongo que te gusta

Origin blog.csdn.net/leon_zeng0/article/details/115168200
Recomendado
Clasificación