facebookresearch / habitat-lab

A modular high-level library to train embodied AI agents across a variety of tasks and environments.
https://aihabitat.org/
MIT License
1.89k stars 475 forks source link

Crowd navigation and simulation with multiple humanoids with Habitat 3.0 #1696

Open rosanom opened 9 months ago

rosanom commented 9 months ago

Hello guys, first of all congrats for the great work done on the Habitat project!

I'm working on the crowd navigation problem (also referred as Social Navigation, but different from the social nav task defined in the Habitat 3.0 paper), where an agent has to reach a PointGoal while avoiding collisions with moving humans. I took a look at the social_nav/social_nav.yaml file, where I understand that a humanoid moves along shortest paths to randomly sampled coordinates, while the robot has to reach (and eventually follow) the humanoid, so it receives a HumanPointGoal as input, that is constantly updated. In my case, I would like to maintain the humanoid moving in the environment, but provide fixed PointGoals to the robot, like in a classic PointGoal navigation task. Is there a way to customize the newsocial_nav.yaml config file to support this new task? Follow up question: can I import more than one humanoid to simulate very crowded scenarios?

Thank you in advance! Marco

santurini commented 9 months ago

Same problem here, about how to import more humanoids in the scene!

L-Scofano commented 9 months ago

I'm also curious to know whether importing more than one humanoid is possible. Thanks in advance!

aclegg3 commented 9 months ago

Hey all,

Happy to see so much interest in socially aware AI applications!

It seems like the primary question here is around customization of Habitat 3.0 tasks with humanoids. Quick answers:

Can I import more than one humanoid?

Absolutely! Habitat-sim has no limit to the number of articulated objects you can add to a scene. The humanoid_agent wrappers in Habitat-lab provide APIs to control the humanoid with animated walk cycles, root offsets, and other convenience utilities. These can also be instantiated in isolation from a task and are not limited to a single instantiation.

How can I customize the new social tasks (e.g. social_nav)?

This will involve a combination of new task logic and configuration changes. I suggest you read into the task code, familiarize yourself with the details and then consider the following question: do you need to control your humanoid agents with policy actions or scripted control (e.g. shortest path following)?

xavierpuigf commented 8 months ago

To follow up on the previous response. The more straightforward approach to add multiple humanoids to the social navigation task is to modify the social_nav.yaml file. You will need to do the following:

Right now there is agent_0 (robot) and agent_1 (human). You need to define a set of agents (say agent_2...agent_N) which will all be human, and have the same config as agent_1.

  1. Go here and define the next human agents. You need to pretty much copy the config in agent_1 and make it for agent_2...agent_N (agent action, type, obs_keys, agents_order...)
  2. Go then to social_nav.yaml and do the same, wherever there is an agent1 specification, add for the agents{2..N) you defined.

With this setup you should be able to have something running.

rosanom commented 7 months ago

Thank you for your answers! Now I better understand how to include multiple humanoids in my simulations. Do you have any suggestion on how I can fix the goal coordinates of the robot (not the humanoid) like in a standard pointgoal nav setup? I do not want the robot to reach the humanoid's position.

I would like to maintain the humanoid moving in the environment, but provide fixed PointGoals to the robot, like in a classic PointGoal navigation task. Is there a way to customize the newsocial_nav.yaml config file to support this new task?

Thank you