一、场景设计

  场景设计如下,一个线程每隔10s生成一个MoveBaseGoal并加入队列,子树Path依次取出MoveBaseGoal并发送给MoveBaseServer完成全部路径,需要实现的内容如下:

  1、一个生成MoveBaseGoal的线程;

  2、子树Path;

  3、为了方便测试,需要一个模拟的MoveBaseServer;

 

二、程序实现

  1、生成MoveBaseGoal:GenGoal.py

 1 #!/usr/bin/env python
 2 
 3 
 4 import threading
 5 import time
 6 
 7 from move_base_msgs.msg import *
 8 
 9 
10 _goal_list = []
11 _gen_goal_thread = None
12 
13 
14 def get_goal():
15     if len(_goal_list)>0:
16         return True, _goal_list.pop(0)
17     return False, None
18 
19 
20 def gen_goal():
21     global _gen_goal_thread
22     _gen_goal_thread = threading.Thread(target=_gen_goal, name="GenGoal")
23     _gen_goal_thread.setDaemon(True)
24     _gen_goal_thread.start()
25     return
26 
27 
28 def _gen_goal():
29     x, y = 0, 0
30     for i in range(1, 20):
31         x, y = x+i, y+i
32         goal = MoveBaseGoal()
33         goal.target_pose.pose.position.x, goal.target_pose.pose.position.y = x, y
34         _goal_list.append(goal)
35         time.sleep(10)
36     return
37 
38 
39 if __name__ == "__main__":
40     gen_goal()
41     while True:
42         flag, goal = get_goal()
43         if flag:
44             print(goal)
45         time.sleep(5)
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-17
猜你喜欢
  • 2022-12-23
  • 2021-09-13
  • 2022-12-23
  • 2021-07-31
  • 2021-05-08
  • 2021-06-02
  • 2021-09-26
相关资源
相似解决方案