Paper: A Behavioral Approach to Visual Navigation with Graph Localization Networks
Website: https://graphnav.stanford.edu/
Video: https://youtu.be/nN3B1F90CFM
Citing
@INPROCEEDINGS{Savarese-RSS-19,
AUTHOR = {Kevin Chen AND Juan Pablo de Vicente AND Gabriel Sepulveda AND Fei Xia AND Alvaro Soto AND Marynel Vázquez AND Silvio Savarese},
TITLE = {A Behavioral Approach to Visual Navigation with Graph Localization Networks},
BOOKTITLE = {Proceedings of Robotics: Science and Systems},
YEAR = {2019},
ADDRESS = {FreiburgimBreisgau, Germany},
MONTH = {June},
DOI = {10.15607/RSS.2019.XV.010}
}
# Need python 2 when using ROS
conda create -n graphnav python=3.7
# Install requirements
pip install -r requirements.txt
# Add graphnav
export PYTHONPATH=$PYTHONPATH:<path-to-graphnav>/src
Install Gibson v2. Follow the directions here for ROS-specific instructions.
Example Gibson installation below using Anaconda. For more details, see Gibson.
conda create -n graphnav-gibson-py2 python=2.7
conda activate graphnav-gibson-py2
pip install -e . # From GibsonEnvV2 directory
conda deactivate
If not done already, execute the ROS-specific Gibson instructions.
Example of path setup below. Put these in a script if you would like.
export PYTHONPATH=$PYTHONPATH:<path-to-GibsonEnvV2>
export PYTHONPATH=$PYTHONPATH:<path-to-graphnav-gibson-py2-venv>/lib/python2.7/site-packages # Path to virtual env if you used one (use Python 2)
export PYTHONPATH=$PYTHONPATH:<path-to-graphnav>/src
# Make sure to remove these from PATH as specified in the Gibson ROS instructions (if using Anaconda)
echo $PATH | grep -oP "[^:;]+" | grep conda
Add ROS packages for Gibson and graphnav, just like the ROS-specific Gibson instructions.
# Gibson
ln -s <path-to-GibsonEnvV2>/examples/ros/gibson-ros/ ~/catkin_ws/src/
cd ~/catkin_ws && catkin_make
ln -s <path-to-graphnav> ~/catkin_ws/src/semnav_ros
cd ~/catkin_ws && catkin_make
Download the data (collected from Gibson 1) from here. This data is used for training the behaviors networks.
Replace the following in graphnav/config.py
:
DATASET_ROOT = '/data/graphnav/trajectory-data'
LOG_ROOT = '/data/graphnav/experiments'
STANFORD_JSON = '<path-to-graphnav>/data/semantic_labels.json'
MAPS_ROOT = '<path-to-graphnav>/maps/v0.2'
For faster data loader initialization in each run:
# Edit the directory in build_dataset_cache.py
python build_dataset_cache.py --dataset_type frame_by_frame
Example train command:
python learning/behavior_net/behavior_trainer.py \
--batch_size 32 \
--learning_rate 0.0001 \
--dataset v0.2 \
--n_workers 3 \
--behaviornet_type behavior_rnn \
--dataset_type temporal \
--print_freq 250 \
--val_freq 1000 \
--ckpt_freq 1000 \
--n_epochs 500 \
--log_dir v0.2/behavior_rnn/tl \
--behavior_id tl \
--n_frames_per_sample 20
An example config for different behavior networks:
# behaviornet_type, behavior_id, dataset_type
behaviornets = [
('behavior_rnn', 'tl', 'temporal'),
('behavior_rnn', 'tr', 'temporal'),
('behavior_cnn', 'cf', 'temporal'),
('behavior_rnn', 's', 'temporal'),
('behavior_cnn', 'fd', 'temporal'),
]
python learning/graph_net/graph_net_trainer.py \
--dataset v0.2 \
--learning_rate 1e-4 \
--n_workers 3 \
--behaviornet_type graph_net \
--dataset_type graph_net \
--print_freq 100 \
--val_freq 2000 \
--ckpt_freq 2000 \
--n_epochs 500 \
--n_frames_per_sample 20 \
--log_dir v0.2/graph_net \
--aggregate_method sum \
--use_gn_augmentation
The code has been tested with ROS Kinetic (Python 2.7).
Edit the Gibson configuration yaml file. Pay particular attention to the model ID. Also make sure fov: 2.62
or 150
degrees (depending on Gibson 1 or Gibson 2) and resolution: 320
.
Edit the ROS launch file. Make sure the area yaml matches with the model ID specified in the turtlebot_rgbd.yaml
and points to a yaml from the this repo.
Edit graph_net_navigation_brain.py
to load the desired checkpointed models.
roslaunch gibson2-ros turtlebot_gt_navigation.launch
rosrun semnav_ros navigation_planner.py
rosrun semnav_ros graph_net_navigation_brain.py --dataset_type graph_net # No particle filter