From 6745994c62788640f960cf8d21fb687f23b489d7 Mon Sep 17 00:00:00 2001 From: Alex AUTERNAUD <alex.auternaud@inria.fr> Date: Tue, 4 Apr 2023 11:23:57 +0200 Subject: [PATCH] if target not in sight condition --- social_mpc/goal.py | 91 ++++++++++++++++++++-------------------------- 1 file changed, 40 insertions(+), 51 deletions(-) diff --git a/social_mpc/goal.py b/social_mpc/goal.py index c0ab032..ea94c39 100644 --- a/social_mpc/goal.py +++ b/social_mpc/goal.py @@ -61,7 +61,6 @@ class GoalFinder(): if shared_groups is None and shared_humans is None: continue if not sh_goto_target_human_id[0] and not sh_goto_target_group_id[0]: - # print("No target set") continue n_human = np.sum(sh_humans[:, -1] >= 0) if n_human < 1: @@ -75,8 +74,6 @@ class GoalFinder(): n_group = np.sum(sh_groups[:, -1] >= 0) sh_groups = sh_groups[:n_group, :] group_ids = np.array(sh_groups[sh_groups[:, -1] >= 0, -1], dtype=int).tolist() - print("human_ids : {}, {}, {}".format(human_ids, humans, n_human)) - print("group_ids : {}, {}, {}".format(group_ids, sh_groups, n_group)) target = None if sh_goto_target_human_id[0]: @@ -89,12 +86,14 @@ class GoalFinder(): target = ('isolated_human', idx) # type, human id else: print("Target human not in sight") + continue if sh_goto_target_group_id[0]: if sh_goto_target_group_id[1] in group_ids: gr_idx = group_ids.index(sh_goto_target_group_id[1]) target = ('group', gr_idx, sh_goto_target_group_id[1]) # type, group index, group id else: print("Target group not in sight") + continue groups = gd.gcff.identify_groups(humans, stride=stride) for group in groups: @@ -102,7 +101,6 @@ class GoalFinder(): groups = [] for idx, group_id in enumerate(group_ids): - print('np.where(humans[:, -2] == group_id)[0]', np.where(humans[:, -2] == group_id)[0], group_id) groups.append(Group(center=sh_groups[idx, :2], person_ids=np.where(humans[:, -2] == group_id)[0])) for group in groups: print('groups from hri listener GOAL: center :{} person_ids : {}'.format(group.center, group.person_ids)) @@ -111,53 +109,44 @@ class GoalFinder(): humans_fdz[:, :3] = humans[:, :3] f_dsz = ssn.calc_dsz(humans_fdz, groups=groups) - if target[0] == 'human_in_group': - print('target', target) - center = [sh_groups[target[2], 0], sh_groups[target[2], 1]] - persons = humans[humans[:, -2] == target[3], :] - print('human_in_group : center {}, persons{}'.format(center, persons)) - goal = ssn.calc_goal_pos( - f_dsz=f_dsz, - map=global_map, - persons=persons, - group_center=center, - robot=robot_pose) - goal = list(goal) - print('goal human_in_group before {}'.format(goal)) - goal[2] = np.arctan2(goal[1] - humans[target[1]][1], goal[0] - humans[target[1]][0]) # to face the human - print('goal human_in_group after {}'.format(goal)) - elif target[0] == 'isolated_human': - print('target', target) - person = humans[target[1], :] - ts_x = person[0] + np.cos(person[2]) * stride - ts_y = person[1] + np.sin(person[2]) * stride - center = [ts_x, ts_y] - person = person[np.newaxis, :] - print('isolated_human : center {}, person{}'.format(center, person)) - print(person.shape) - goal = ssn.calc_goal_pos( - f_dsz=f_dsz, - map=global_map, - persons=person, - group_center=center, - robot=robot_pose) - goal = list(goal) - print('goal isolated_human before {}'.format(goal)) - goal[2] = np.arctan2(goal[1] - humans[target[1]][1], goal[0] - humans[target[1]][0]) # to face the human - print('goal isolated_human after {}'.format(goal)) - elif target[0] == 'group': - print('target', target) - center = [sh_groups[target[1], 0], sh_groups[target[1], 1]] - persons = humans[humans[:, -2] == target[2], :] - print('group : center {}, persons{}'.format(center, persons)) - goal = ssn.calc_goal_pos( - f_dsz=f_dsz, - map=global_map, - persons=persons, - group_center=center, - robot=robot_pose) - goal = list(goal) - print('goal group {}'.format(goal)) + if target: + if target[0] == 'human_in_group': + center = [sh_groups[target[2], 0], sh_groups[target[2], 1]] + persons = humans[humans[:, -2] == target[3], :] + goal = ssn.calc_goal_pos( + f_dsz=f_dsz, + map=global_map, + persons=persons, + group_center=center, + robot=robot_pose) + goal = list(goal) + goal[2] = np.arctan2(goal[1] - humans[target[1]][1], goal[0] - humans[target[1]][0]) # to face the human + elif target[0] == 'isolated_human': + person = humans[target[1], :] + ts_x = person[0] + np.cos(person[2]) * stride + ts_y = person[1] + np.sin(person[2]) * stride + center = [ts_x, ts_y] + person = person[np.newaxis, :] + goal = ssn.calc_goal_pos( + f_dsz=f_dsz, + map=global_map, + persons=person, + group_center=center, + robot=robot_pose) + goal = list(goal) + goal[2] = np.arctan2(goal[1] - humans[target[1]][1], goal[0] - humans[target[1]][0]) # to face the human + elif target[0] == 'group': + center = [sh_groups[target[1], 0], sh_groups[target[1], 1]] + persons = humans[humans[:, -2] == target[2], :] + goal = ssn.calc_goal_pos( + f_dsz=f_dsz, + map=global_map, + persons=persons, + group_center=center, + robot=robot_pose) + goal = list(goal) + else: + continue else: continue print("goal : {}".format(goal)) -- GitLab