BenchNPIN is a comprehensive suite of benchmarking tools for mobile robot non-prehensile interactive navigation. The goal of BenchNPIN is to provide researchers a standarized platform for training and evaluating algorithms in non-prehensile interactive navigation. BenchNPIN provides simulated environments for a wide range of non-prehensile interactive navigation tasks, metrics specifically capturing both task efficiency and interaction effort, policy templates with reference implementations.
env = gym.make('maze-NAMO-v0')
This environment features a static maze structure with randomly initialized obstacles. The robot's task is to navigate from a starting position to a goal location while minimizing path length and obstacle collisions.
env = gym.make('ship-ice-v0')
In this task, an autonomous surface vehicle must reach a horizontal goal line ahead while minimizing collisions with broken ice floes in the channel.
env = gym.make('box-pushing-v0')
The Box-Delivery environment consists of a set of movable boxes to be delivered to a designated receptacle. The robot is tasked to delivery all boxes using its front bumper.
env = gym.make('area-clearing-v0')
This envronment consists of a set of movable boxes and a clearance area. The task of the robot is to remove all boxes from this clearance area.
The Area-Clearing environment.
pip install benchnpin
The pip install
above is sufficient to run Ship-Ice and Maze environments. To run Box-Delivery and Area-Clearing, please install shortest path module as follows
git clone https://github.com/IvanIZ/spfa.git
cd spfa
pip install -e .
- Clone the project
git clone https://github.com/IvanIZ/BenchNPIN.git
- Install dependencies.
cd BenchNPIN
pip install -r requirements.txt
- Install Gym environment
pip install -e .
- Install shortest path module
git clone https://github.com/IvanIZ/spfa.git
cd spfa
pip install -e .
import benchnpin.environments
import gymnasium as gym
env = gym.make('ship-ice-v0')
observation, info = env.reset()
terminated = truncated = False
while not (terminated or truncated):
action = your_policy(observation)
observation, reward, terminated, truncated, info = env.step(action)
env.render()
To configure the parameters for each environment, please refer to the configuration examples for Maze, Ship-Ice, Box-Delivery, and Area-Clearing.
from benchnpin.baselines.base_class import BasePolicy
class CustomPolicy(BasePolicy):
def __init__(self) -> None:
super().__init__()
# initialize costum policy here
...
def train(self):
# train the custom policy here, if needed
...
def act(self, observation, **kwargs):
# define how custom policy acts in the environment
...
def evaluate(self, num_eps: int, model_eps: str ='latest'):
# define how custom policy is evaluated here
...
from benchnpin.common.metrics.base_metric import BaseMetric
import CustomPolicy1 # some custom policies
import CustomPolicy2
import CustomPolicy3
# initialize policies to be evaluated
policy1 = CustomPolicy1()
policy2 = CustomPolicy2()
policy3 = CustomPolicy3()
# run evaluations
num_eps = 200 # number of episodes to evaluate each policy
benchmark_results = []
benchmark_results.append(policy1.evaluate(num_eps=num_eps))
benchmark_results.append(policy2.evaluate(num_eps=num_eps))
benchmark_results.append(policy3.evaluate(num_eps=num_eps))
# plot efficiency and effort scores
BaseMetric.plot_algs_scores(benchmark_results, save_fig_dir='./')
Tasks | Baselines |
---|---|
Maze | SAC1, PPO1 |
Ship-Ice | SAC1, PPO1, SAV Planning2, 3 |
Box-Delivery | SAC1, PPO1, SAM4 |
Area_Clearing | SAC1, PPO1, SAM4, GTSP5 |
1: Reinforcement Learning policies Integrated with Stable Baselines 3.
2: Planning-based policy using an ASV ice navigation lattice planner.
3: Planning-based policy using a predictive ASV ice navigation planner.
4: Spatial Action Maps policy.
5: A Generalized Traveling Salesman Problem (GTSP) policy. Please see Appendix I of our paper for details.
You may download the our trained model weights from here.