Introducción a la programación del cliente de desarrollo de aplicaciones ROS

ROS es la abreviatura de Robot Operating System Este artículo presenta el desarrollo de aplicaciones ROS y la programación del cliente. La función del programa es crear una tortuga simulada con código. Primero el código C ++, luego el código Python, también puede elegir ver solo uno con el que esté familiarizado.

Creación de paquetes de funciones

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 servicio_de_aprendizaje std_msgs roscpp rospy geometry_msgs 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_service y la siguiente es la biblioteca de dependencias del paquete de funciones, aquí está std_msgs roscpp rospy geometry_msgs turtlesim Hay 5 dependencias Bibliotecas.

Después de ejecutar el comando anterior, puede ver un directorio llamado learning_service en el directorio src, que tiene el siguiente contenido:

CMakeLists.txt incluye scripts package.xml src

Entre ellos, los scripts se crearon manualmente más tarde para almacenar el código Python.

código fuente c ++

En el directorio src, que también es el directorio ~ / catkin_ws / src / learning_service / src, cree un archivo turtle_spawn.cpp,

cd ~ // catkin_ws / src / servicio_aprendizaje / src

nano turtle_spawn.cpp

El contenido es:

/**
 * 该例程将请求/spawn服务,服务数据类型turtlesim::Spawn
 */

#include <ros/ros.h>
#include <turtlesim/Spawn.h>

int main(int argc, char** argv)
{
    // 初始化ROS节点
	ros::init(argc, argv, "turtle_spawn");

    // 创建节点句柄
	ros::NodeHandle node;

    // 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
	ros::service::waitForService("/spawn");
	ros::ServiceClient add_turtle = node.serviceClient<turtlesim::Spawn>("/spawn");

    // 初始化turtlesim::Spawn的请求数据
	turtlesim::Spawn srv;
	srv.request.x = 2.0;
	srv.request.y = 2.0;
	srv.request.name = "turtle2";

    // 请求服务调用
	ROS_INFO("Call service to spwan turtle[x:%0.6f, y:%0.6f, name:%s]", 
			 srv.request.x, srv.request.y, srv.request.name.c_str());

	add_turtle.call(srv);

	// 显示服务调用结果
	ROS_INFO("Spwan turtle successfully [name:%s]", srv.response.name.c_str());

	return 0;
};


Este código tiene comentarios claros. Este es un proceso básico para implementar el cliente:

Inicializar el nodo ROS

Crear identificador de nodo

Cree un cliente de servicio y conéctese al servicio llamado / spawn

Inicializar la solicitud de datos de turtlesim :: Spawn

Solicitar llamada de servicio

Mostrar resultados de llamadas de servicio

Configurar el archivo cmake

En el directorio ~ / catkin_ws / src / learning_service /, hay un archivo CMakeLists.txt, necesitamos modificar este archivo

cd ~ / catkin_ws / src / learning_service

nano CMakeLists.txt 

Agregue las siguientes 2 líneas a este archivo,

add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})

La ubicación agregada es la última parte de Build. Consulte la siguiente ubicación, que es ## install ## al frente:

# target_link_libraries(${PROJECT_NAME}_node
#   ${catkin_LIBRARIES}
# )

add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})

#############
## Install ##
#############

 Guardar la salida

Esto completa la compilación y configuración.

Compila y ejecuta la prueba

La compilación debe volver al directorio ~ / catkin_ws

cd ~ / catkin_ws

catkin_make

Debe obtenerse una vez después de la compilación:

fuente devel / setup.bash

Si hay un error en la compilación, debe eliminar el error y luego ejecutar la prueba.

Abra una terminal, inicie ros, ejecute

roscore

Abre otra terminal y ejecuta la tortuga.

rosrun turtlesim turtlesim_node

Lo anterior es para iniciar el entorno de prueba.Si hay un problema, puede consultar:  La tortuga de simulación en ROS , pero el control del teclado no se inicia.

Finalmente ejecutamos en nuestra terminal:

rosrun learning_service turtle_spawn

Después de ejecutar el comando anterior, vemos una tortuga más, ahora hay dos.

Esto completa el desarrollo de c ++.

código python 

Para no mezclar con C ++, cree un directorio de scripts en el directorio ~ / catkin_ws / src / learning_service /, y luego vaya a este directorio y cree un archivo turtle_spawn.py

cd ~ / catkin_ws / src / learning_service / scripts

nano turtle_spawn.py

El contenido del archivo es:

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

# 该例程将请求/spawn服务,服务数据类型turtlesim::Spawn

import sys
import rospy
from turtlesim.srv import Spawn

def turtle_spawn():
	# ROS节点初始化
    rospy.init_node('turtle_spawn')

	# 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
    rospy.wait_for_service('/spawn')
    try:
        add_turtle = rospy.ServiceProxy('/spawn', Spawn)

		# 请求服务调用,输入请求数据
        response = add_turtle(3.0,3.0, 0.0, "turtle3")
        return response.name
    except rospy.ServiceException, e:
        print "Service call failed: %s"%e

if __name__ == "__main__":
	#服务调用并显示调用结果
    print "Spwan turtle successfully [name:%s]" %(turtle_spawn())

Hay instrucciones claras en el código y el proceso es:

Inicialización del nodo ROS

Después de descubrir el servicio / spawn, cree un cliente de servicio y conéctese al servicio llamado / spawn

Solicitar llamada de servicio, ingresar datos de solicitud

prueba de ejecución de python

Python se puede ejecutar directamente sin compilación,

Cambie turtle_spawn.py para tener atributos de ejecución 

chmod + x * .py

Esto se puede verificar con ls -l:

Al mismo tiempo, debe obtenerse una vez: 

fuente ~ / catkin_ws / devel / setup.bash

Primero, necesita iniciar el entorno de prueba. Una terminal inicia roscore y otra terminal inicia la tortuga rosrun turtlesim turtlesim_node. Si hay un problema, puede consultar:  La tortuga de simulación bajo ROS , pero el control del teclado no está activado. 

Luego ejecute el siguiente comando:

rosrun learning_service turtle_spawn.py

El resultado de la ejecución es que hay más tortugas.

El código fuente también se puede descargar en https://github.com/huchunxu/ros_21_tutorials

Eso es todo para la introducción.
 

Supongo que te gusta

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