ros programación del robot real (5) - acción definida

prefacio

"Ros práctica de programación de robots '- definido en el Capítulo V de la acción.
Frente intentó definir sus propios tipos de mensajes y servicios, seguido por la definición de la acción. Son sólo para un tipo de mensaje de respuesta oportuna, y las funciones de programación sustancialmente similar, tiene su propia entrada y salida. Pero en la solución del problema de servicio de operación del robot claramente no es lo suficientemente bueno, como disparos, podemos ver con el servicio de escribir un servicio escrita sacar la bola, ya que la trayectoria de la pelota en el aire, pero si la trama de destino no podrá cigarras. La acción entonces usted puede golpear la pelota fuera a hacer, o esperar a que el balón al área entró en la caja y hacer que la próxima decisión.
Aquí vamos a crear una acción sincronizada

proceso de implementación

Los pasos anteriores han creado un espacio de trabajo predeterminado ros y crear un buen paquete básico, continúan para completar la creación de la acción sobre esta base.
Ver el paquete no se ha creado aquí: práctica de programación ROS (3.1) - Crear su propio mensaje de tipo
1, ctrl + alt + t terminal de salida, en el directorio acción básica creada directorio, y crear el archivo en el directorio de Timer.action acción:

cd ~/catkin_ws/src/basic/
mkdir action
cd action
vi Timer.action

Introduzca el texto siguiente en Timer.action:

#这坑爹的书把变量全写在注释里了,还好我眼睛比较尖锐。。。坑死我了
#就像这样duration time_to_wait
#你如果中英文隔开我还挺好看出来的,妈妈的全是英文的谁会注意看哦
duration time_to_wait

---
duration time_elapsed
uint32 updates_sent


---
duration time_elapsed
duration time_remaining

A continuación, puede echar un vistazo a las relaciones de directorios de archivos:
Aquí Insertar imagen Descripción2, catkin_make plazo

cd ~/catkin_ws
catkin_make

3, modificar CMakeLists.txt

cd ~/catkin_ws/src/basic
vi CMakeLists.txt

3.1 action_msgs, find_package modificado () Añadido:
Aquí Insertar imagen Descripción
3.2, add_action_files modificados () añadido Timer.action los archivos: Aquí Insertar imagen Descripción
3,3, generate_message modificado () actionlib_msgs añadidas: Aquí Insertar imagen Descripción
3,4, catkin_package modificado () fue actionlib_msgs añadidas:
Aquí Insertar imagen Descripción
. 4, junto con el package.xml construido dependencias, dependencias y ejecutar:

vi package.xml

Pegar las dos líneas siguientes en él.
<Build_depend> actionlib_msgs </ build_depend>
<exec_depend> actionlib_msgs </ exec_depend>
Aquí Insertar imagen Descripción

5, volver al directorio raíz del amento compilado:

cd ~/catkin_ws/
catkin_make

6, la preparación de los movimientos básicos del servidor:
6.1, crear el archivo simple_action_serve.py en paquete básico src:


cd ~/catkin_ws/src/basic/src
vi simple_action_serve.py
chmod 777 simple_action_serve.py

Introduzca la siguiente;
simple_action_serve.py

#!/usr/bin/env python

import rospy
import time
import actionlib
from basic.msg import TimerAction,TimerGoal,TimerResult

def do_timer(goal):
	start_time=time.time()
	time.sleep(goal.time_to_wait.to_sec())
	result=TimerResult()
	result.time_elapsed=rospy.Duration.from_sec(time.time()-start_time)
	result.updates_sent=0
	server.set_succeeded(result)

rospy.init_node('timer_action_server')
server=actionlib.SimpleActionServer('timer',TimerAction,do_timer,False)
server.start()
rospy.spin()

6,2, ctrl + alt + t para abrir una nueva carreras terminales roscore:

roscore

6.3, compilar y ejecutar de nuevo al directorio raíz de la secuencia de comandos:

cd ~/catkin_ws
catkin_make
source devel/setup.bash
rosrun basic simple_action_serve.py

7, lista para ver si hay servicios adecuados ejecutan
Aquí Insertar imagen Descripción
8, el uso de la acción:
8,1, crear una acción mediante una secuencia de comandos:

cd ~/catkin_ws/src/basic/src
vi simple_action_client.py
chmod 777 simple_action_client.py

Introduzca lo siguiente:
simple_action_client.py

#!/usr/bin/env python

import rospy
import actionlib
from basic.msg import TimerAction,TimerGoal,TimerResult

rospy.init_node('timer_action_client')
client=actionlib.SimpleActionClient('timer',TimerAction)
client.wait_for_server()
goal=TimerGoal()
goal.time_to_wait=rospy.Duration.from_sec(5.0)
client.send_goal(goal)
client.wait_for_result()
print('Time elapsed:%f'%(client.get_result().time_elapsed.to_sec()))

8.2, compilar y ejecutar de nuevo al directorio raíz de la secuencia de comandos:

cd ~/catkin_ws
catkin_make
source devel/setup.bash
rosrun basic simple_action_client.py

Los resultados operativos incluyen:
Aquí Insertar imagen Descripción

Publicado 53 artículos originales · ganado elogios 5 · Vistas 2206

Supongo que te gusta

Origin blog.csdn.net/qq_37668436/article/details/104195399
Recomendado
Clasificación