2023-11-08 16:20:02 +08:00
|
|
|
|
import os
|
|
|
|
|
import pickle
|
|
|
|
|
|
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
import numpy as np
|
|
|
|
|
|
2023-11-13 21:52:15 +08:00
|
|
|
|
from robowaiter.scene import scene
|
2023-11-16 15:28:08 +08:00
|
|
|
|
from robowaiter.algos.navigator.navigate import Navigator
|
|
|
|
|
|
2023-11-08 16:20:02 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
|
2023-11-16 15:28:08 +08:00
|
|
|
|
# 选择缩放合适的地图:3、4、5
|
|
|
|
|
file_name = 'map_4.pkl'
|
2023-11-08 16:20:02 +08:00
|
|
|
|
if os.path.exists(file_name):
|
|
|
|
|
with open(file_name, 'rb') as file:
|
|
|
|
|
map = pickle.load(file)
|
|
|
|
|
|
2023-11-13 21:52:15 +08:00
|
|
|
|
scene.init_world(1, 11)
|
|
|
|
|
scene = scene.Scene(sceneID=0)
|
2023-11-08 16:20:02 +08:00
|
|
|
|
|
2023-11-16 15:28:08 +08:00
|
|
|
|
navigator = Navigator(scene=scene, area_range=[-350, 600, -400, 1450], map=map, scale_ratio=4)
|
2023-11-08 16:20:02 +08:00
|
|
|
|
|
|
|
|
|
'''场景1: 无行人环境 robot到达指定目标'''
|
2023-11-16 15:28:08 +08:00
|
|
|
|
# goal = (-100, 700)
|
|
|
|
|
# goal = (590, 1370)
|
|
|
|
|
# goal = (290, -240)
|
|
|
|
|
# goal = (-200, -200)
|
|
|
|
|
# goal = (-200, -50)
|
2023-11-08 16:20:02 +08:00
|
|
|
|
|
|
|
|
|
'''场景2: 静止行人环境 robot到达指定目标'''
|
|
|
|
|
# scene.clean_walker()
|
|
|
|
|
# scene.add_walker(50, 300, 0)
|
|
|
|
|
# scene.add_walker(-50, 500, 0)
|
2023-11-16 15:28:08 +08:00
|
|
|
|
# goal = (-100, 700)
|
2023-11-08 16:20:02 +08:00
|
|
|
|
|
|
|
|
|
'''场景3: 移动行人环境 robot到达指定目标'''
|
2023-11-16 15:28:08 +08:00
|
|
|
|
scene.walk_to(100, 0, -90, dis_limit=5)
|
2023-11-13 21:52:15 +08:00
|
|
|
|
scene.clean_walker()
|
2023-11-16 15:28:08 +08:00
|
|
|
|
scene.add_walkers([[50, 300], [-50, 500], [0, 700]])
|
2023-11-15 14:56:03 +08:00
|
|
|
|
# scene.add_walker(50, 300, 0)
|
|
|
|
|
# scene.add_walker(-50, 500, 0)
|
|
|
|
|
# scene.add_walker(0, 700, 0)
|
2023-11-13 21:52:15 +08:00
|
|
|
|
scene.control_walker([scene.walker_control_generator(walkerID=0, autowalk=False, speed=50, X=-50, Y=600, Yaw=0)])
|
|
|
|
|
scene.control_walker([scene.walker_control_generator(walkerID=1, autowalk=False, speed=50, X=100, Y=150, Yaw=0)])
|
|
|
|
|
scene.control_walker([scene.walker_control_generator(walkerID=2, autowalk=False, speed=50, X=0, Y=0, Yaw=0)])
|
|
|
|
|
|
2023-11-15 14:30:55 +08:00
|
|
|
|
# goal = (-100, 700)
|
2023-11-16 15:28:08 +08:00
|
|
|
|
# goal = (-200, 700) # 目标在障碍物测试
|
|
|
|
|
# goal = (-400, 700) # 目标在地图外测试
|
|
|
|
|
goal = (10000, 10000) # 目标在地图外测试
|
|
|
|
|
# goal = (-220, 300)
|
|
|
|
|
# goal = (-280, 400)
|
|
|
|
|
# goal = (-230, 600)
|
2023-11-15 14:33:18 +08:00
|
|
|
|
|
2023-11-15 14:30:55 +08:00
|
|
|
|
|
2023-11-08 16:20:02 +08:00
|
|
|
|
'''场景4: 行人自由移动 robot到达指定目标'''
|
|
|
|
|
# # TODO: autowalk=True仿真器会闪退 ???
|
|
|
|
|
# scene.clean_walker()
|
|
|
|
|
# scene.add_walker(50, 300, 0)
|
|
|
|
|
# scene.add_walker(-50, 500, 0)
|
|
|
|
|
# scene.control_walker([scene.walker_control_generator(walkerID=0, autowalk=True, speed=20, X=0, Y=0, Yaw=0)])
|
|
|
|
|
# scene.control_walker([scene.walker_control_generator(walkerID=1, autowalk=True, speed=20, X=0, Y=0, Yaw=0)])
|
|
|
|
|
# time.sleep(5)
|
2023-11-16 15:28:08 +08:00
|
|
|
|
# goal = (-100, 700)
|
2023-11-08 16:20:02 +08:00
|
|
|
|
|
2023-11-15 15:40:57 +08:00
|
|
|
|
navigator.navigate(goal, animation=True)
|
2023-11-08 16:20:02 +08:00
|
|
|
|
|
|
|
|
|
scene.clean_walker()
|
|
|
|
|
print(scene.status.collision) # TODO: 不显示碰撞信息 ???
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|