RoboWaiter/demo/行人控制.py

86 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
import sys
import time
import grpc
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable
from proto import GrabSim_pb2
from proto import GrabSim_pb2_grpc
channel = grpc.insecure_channel('localhost:30001',options=[
('grpc.max_send_message_length', 1024*1024*1024),
('grpc.max_receive_message_length', 1024*1024*1024)
])
sim_client = GrabSim_pb2_grpc.GrabSimStub(channel)
def map_test(map_id=0, scene_num=1):
initworld = sim_client.Init(GrabSim_pb2.NUL())
print(sim_client.AcquireAvailableMaps(GrabSim_pb2.NUL()))
initworld = sim_client.SetWorld(GrabSim_pb2.BatchMap(count=scene_num, mapID=map_id))
def add_walker(scene_id=0):
"""pose:表示行人的初始位置姿态"""
print('------------------add walker----------------------')
s = sim_client.Observe(GrabSim_pb2.SceneID(value=0))
walker_loc = [[0, 880], [250, 1200], [-55, 750], [70, -200]]
walker_list = []
for i in range(len(walker_loc)):
loc = walker_loc[i] + [0, 600, 100]
action = GrabSim_pb2.Action(scene=scene_id, action=GrabSim_pb2.Action.ActionType.WalkTo, values=loc)
scene = sim_client.Do(action)
print(scene.info)
# 只有可达的位置才能成功初始化行人显示unreachable的地方不能初始化行人
walker_list.append(GrabSim_pb2.WalkerList.Walker(id=i, pose=GrabSim_pb2.Pose(X=loc[0], Y=loc[1], Yaw=90)))
scene = sim_client.AddWalker(GrabSim_pb2.WalkerList(walkers=walker_list, scene=scene_id))
return scene
def control_walkers(scene_id=0):
"""pose:表示行人的终止位置姿态"""
s = sim_client.Observe(GrabSim_pb2.SceneID(value=scene_id))
walker_loc = [[-55, 750], [70, -200], [250, 1200], [0, 880]]
controls = []
for i in range(len(s.walkers)):
loc = walker_loc[i]
is_autowalk = False
pose = GrabSim_pb2.Pose(X=loc[0], Y=loc[1], Yaw=180)
controls.append(GrabSim_pb2.WalkerControls.WControl(id=i, autowalk=is_autowalk, speed=200, pose=pose))
scene = sim_client.ControlWalkers(GrabSim_pb2.WalkerControls(controls=controls, scene=scene_id))
time.sleep(10)
return scene
def remove_walkers(scene_id=0):
s = sim_client.Observe(GrabSim_pb2.SceneID(value=scene_id))
scene = sim_client.RemoveWalkers(GrabSim_pb2.RemoveList(IDs=[1, 3], scene=scene_id))
time.sleep(2)
return
def clean_walkers(scene_id=0):
scene = sim_client.CleanWalkers(GrabSim_pb2.SceneID(value=scene_id))
return scene
def walker_test(scene_id=0):
add_walker(scene_id)
control_walkers(scene_id)
print(sim_client.Observe(GrabSim_pb2.SceneID(value=scene_id)).walkers)
remove_walkers(scene_id)
print(sim_client.Observe(GrabSim_pb2.SceneID(value=scene_id)).walkers)
clean_walkers(scene_id)
return
if __name__ == '__main__':
map_id = 3 # 地图编号: 3: 咖啡厅
scene_num = 1 # 场景数量
map_test(map_id, scene_num) # 场景加载测试
time.sleep(5)
for i in range(scene_num):
print("------------------", i, "----------------------")
walker_test(i) # 行人控制测试