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:
2, 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:
3.2, add_action_files modificados () añadido Timer.action los archivos:
3,3, generate_message modificado () actionlib_msgs añadidas:
3,4, catkin_package modificado () fue actionlib_msgs añadidas:
. 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>
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
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: