Giter Club home page Giter Club logo

wiln's Introduction

WILN - Weather-Invariant Lidar-based Navigation

DOI ROS1 ROS2

WILN is a teach-and-repeat framework relying on lidar-based navigation to perform autonomous route repeating. This is the framework that was used in the "Kilometer-scale autonomous navigation in subarctic forests: challenges and lessons learned" field report. An overview of the system demonstration is presented in the following video :

SNOW WILN deployment

The WILN system interfaces two libraries/packages: libpointmatcher with norlab_icp_mapper for simultaneous localization and mapping and GeRoNa for path-following control.

Installation

Setting up libpointmatcher and the mapper

First, in your local repositories directory, clone and build norlab_icp_mapper:

cd && cd repos/
git clone [email protected]:ethz-asl/libpointmatcher.git  && cd libpointmatcher/
mkdir build/ && cd build/
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j 6
sudo make install
cd && cd repos
git clone [email protected]:norlab-ulaval/norlab_icp_mapper.git && cd norlab_icp_mapper/
mkdir build/ && cd build/
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j 6
sudo make install

Then, in your ROS catkin workspace, add the ROS packages to perform SLAM

cd && cd catkin_ws/src
git clone [email protected]:norlab-ulaval/norlab_icp_mapper_ros.git
git clone [email protected]:norlab-ulaval/libpointmatcher_ros.git
git clone [email protected]:norlab-ulaval/pointcloud_motion_deskew.git
git clone [email protected]:norlab-ulaval/odom_to_pose_converter.git
cd .. && catkin_make

Setting up GeRoNa

GeRoNa is a collection of ROS packages, which can be installed along with their dependencies this way:

First, install the dependencies. For example, from your workspace root directory:

cd  && cd catkin_ws/src
git clone https://github.com/cogsys-tuebingen/cslibs_path_planning
git clone https://github.com/cogsys-tuebingen/cslibs_navigation_utilities
sudo apt install libalglib-dev
git clone https://github.com/cogsys-tuebingen/gerona.git
cd ..

rosdep install --from-paths -i -r -y src
catkin_make

Quick start

General note : This assumes that you already have standard timestamped lidar scan, imu and general odometry nodes running.

Creating a params launch file

Two distinct configuration files are required. The first ones are intended to define the path following parameters, multiple examples can be found in the params/controller directory. For an extensive definition of parameters, please refer to the GeRoNa wiki.

The second ones define the registration parameters and filters for the SLAM algorithm. A working example can be found in the params/icp directory. For more details on mapping parameters, please refer to the norlab_icp_mapper_ros repository.

Creating a general launch file

General launch files will launch the various nodes required for navigation. They will also import the aforementioned parameters. A launch file example is given.

General operation and services

The framework is divided into two phases: teach and repeat. During the teach phase, an operator drives the robot along a desired route. The robot simultaneously localizes and builds a map of the environment. All robot poses are logged and represent the reference trajectory.

During the repeat phase, the robot repeats a given route. This route can either be a map that has just been recorder or a loaded map that was saved on disk. During this phase, the system registers point clouds to the map to localize but does not update the map.

The following table lists the various ROS services that enable the teach-and-repeat framework:

Service name Description Parameters
/start_recording Starts recording poses to build the reference map (cannot be called if another trajectory is already loaded). None
/stop_recording Stops the trajectory recording (cannot be called is the recording was not started). None
/clear_trajectory Clears the current trajectory from active memory. None
/play_trajectory Starts the repeat phase. The robot will repeat the trajectory backwards if it is located at it's end and the system supports both forwards or reverse motion. None
/play_loop_trajectory Starts the repeat phase for a loop trajectory. nbLoops (uint32)
/cancel_trajectory Cancels the current repeat phase in the event of system failure. None
/save_ltr Saves the current map and trajectory in a .ltr file. If no directory is specified, the file will be saved in the home/<user>/.ros directory. file_name (string)
/load_ltr loads a specicied .ltr file (cannot be executed if a map/trajectory is already loaded). If not directory is specified, will load from the home/<user>/.ros directory. file_name (string)

Citing

If you use wiln in an academic context, please cite our article:

@article{Baril2022,
  doi = {10.55417/fr.2022050},
  url = {https://doi.org/10.55417/fr.2022050},
  year = {2022},
  month = mar,
  publisher = {Field Robotics Publication Society},
  volume = {2},
  number = {1},
  pages = {1628--1660},
  author = {Dominic Baril and Simon-Pierre Desch{\^{e}}nes and Olivier Gamache and Maxime Vaidis and Damien LaRocque and Johann Laconte and Vladim{\'{\i}}r Kubelka and Philippe Gigu{\`{e}}re and Fran{\c{c}}ois Pomerleau},
  title = {Kilometer-scale autonomous navigation in subarctic forests: challenges and lessons learned},
  journal = {Field Robotics}
}

wiln's People

Contributors

dombaril avatar iamphytan avatar norlab-marmotte avatar norlab-warthog avatar simonpierredeschenes avatar williamdubois avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

fangzheng81

wiln's Issues

Update installation guide

Some dependencies are not mentioned in the installation guide:

  • norlab_controllers_msgs
  • service_caller

Solve number of loops

The number of loops done by the robot is not always the same as the one specified by the user. Need to give more details as to when this issue arises.

Standardize service names

Service calls can be cumbersome on a robot that has multiple running nodes.

I suggest that all service names follow the style /wiln/<service-name> so that it is easier to understand that the different services are all related to WILN

Installing libnabo ?

It seems like the README doesn't show how to install libnabo, even though it is used by libpointmatcher.

I would recommend adding libnabo instructions to the README, or moving installation instructions to a documentation web page.

Enhance LTR file format

  • Add robot_name metadata info
  • Add initial timestamp metadata info
  • Add timestamps to trajectory points, for time-based applications with LTR file format

Migrate to ROS 2

ROS melodic no longer supported. Need to migrate to ROS 2 humble, which is LTS until 2027.

Remove GeRoNa dependency

GeRoNa is no longer maintained. It is wiser to just add the modules that are relevant to our use to this repository to remove the dependency. We need the following path-following controllers:

  • Orthogonal-exponential
  • HBZ
  • Pure pursuit

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.