{"id":13751629,"url":"https://github.com/norlab-ulaval/wiln","last_synced_at":"2025-10-19T12:14:17.680Z","repository":{"id":86645616,"uuid":"215540586","full_name":"norlab-ulaval/wiln","owner":"norlab-ulaval","description":"A lidar-based Teach-and-Repeat framework designed to enable outdoor autonomous navigation in harsh weather.","archived":false,"fork":false,"pushed_at":"2025-07-09T16:31:46.000Z","size":172,"stargazers_count":26,"open_issues_count":12,"forks_count":1,"subscribers_count":2,"default_branch":"humble","last_synced_at":"2025-07-10T01:24:20.988Z","etag":null,"topics":["forest","icp","imu","lidar","navigation","path-following","robotics","ros","slam","teach-and-repeat","winter"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/norlab-ulaval.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-10-16T12:17:02.000Z","updated_at":"2025-07-09T16:31:48.000Z","dependencies_parsed_at":"2024-06-25T21:48:26.752Z","dependency_job_id":"3093d4b6-4f84-4bf9-bb4b-9fe220532b5c","html_url":"https://github.com/norlab-ulaval/wiln","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/norlab-ulaval/wiln","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Fwiln","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Fwiln/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Fwiln/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Fwiln/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/norlab-ulaval","download_url":"https://codeload.github.com/norlab-ulaval/wiln/tar.gz/refs/heads/humble","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Fwiln/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266489620,"owners_count":23937367,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["forest","icp","imu","lidar","navigation","path-following","robotics","ros","slam","teach-and-repeat","winter"],"created_at":"2024-08-03T09:00:50.302Z","updated_at":"2025-10-19T12:14:12.601Z","avatar_url":"https://github.com/norlab-ulaval.png","language":"C++","funding_links":[],"categories":["Open-Source Software"],"sub_categories":[],"readme":"# WILN - Weather-Invariant Lidar-based Navigation\n\n[![DOI](https://zenodo.org/badge/DOI/10.55417/fr.2022050.svg)](https://doi.org/10.55417/fr.2022050)\n[![ROS1](https://img.shields.io/badge/ROS1-melodic-blue?labelColor=blue\u0026logo=ROS)](http://wiki.ros.org/melodic)\n[![ROS2](https://img.shields.io/badge/ROS2-humble-blue?labelColor=blue\u0026logo=ROS)](https://docs.ros.org/en/humble)\n\nWILN 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\"](https://norlab.ulaval.ca/publications/field-report-ltr/) field report. An overview of the system demonstration is presented in the following video :\n\n[![SNOW WILN deployment](https://img.youtube.com/vi/W8TdAoeNv4U/0.jpg)](https://www.youtube.com/watch?v=W8TdAoeNv4U)\n\nThe WILN system interfaces two libraries/packages: [`libpointmatcher`](https://github.com/norlab-ulaval/libpointmatcher) with [`norlab_icp_mapper`](https://github.com/norlab-ulaval/norlab_icp_mapper) for simultaneous localization and mapping and [`GeRoNa`](https://github.com/cogsys-tuebingen/gerona) for path-following control.\n\n## Installation\n\n### Setting up libpointmatcher and the mapper\n\nFirst, in your local repositories directory, clone and build `norlab_icp_mapper`:\n\n```sh\ncd \u0026\u0026 cd repos/\ngit clone git@github.com:ethz-asl/libpointmatcher.git  \u0026\u0026 cd libpointmatcher/\nmkdir build/ \u0026\u0026 cd build/\ncmake -DCMAKE_BUILD_TYPE=Release ..\nmake -j 6\nsudo make install\ncd \u0026\u0026 cd repos\ngit clone git@github.com:norlab-ulaval/norlab_icp_mapper.git \u0026\u0026 cd norlab_icp_mapper/\nmkdir build/ \u0026\u0026 cd build/\ncmake -DCMAKE_BUILD_TYPE=Release ..\nmake -j 6\nsudo make install\n```\n\nThen, in your ROS catkin workspace, add the ROS packages to perform SLAM\n\n```sh\ncd \u0026\u0026 cd catkin_ws/src\ngit clone git@github.com:norlab-ulaval/norlab_icp_mapper_ros.git\ngit clone git@github.com:norlab-ulaval/libpointmatcher_ros.git\ngit clone git@github.com:norlab-ulaval/pointcloud_motion_deskew.git\ngit clone git@github.com:norlab-ulaval/odom_to_pose_converter.git\ncd .. \u0026\u0026 catkin_make\n```\n\n### Setting up GeRoNa\n\nGeRoNa is a collection of ROS packages, which can be installed along with their dependencies this way:\n\nFirst, install the dependencies. For example, from your workspace root directory:\n\n```sh\ncd  \u0026\u0026 cd catkin_ws/src\ngit clone https://github.com/cogsys-tuebingen/cslibs_path_planning\ngit clone https://github.com/cogsys-tuebingen/cslibs_navigation_utilities\nsudo apt install libalglib-dev\ngit clone https://github.com/cogsys-tuebingen/gerona.git\ncd ..\n\nrosdep install --from-paths -i -r -y src\ncatkin_make\n```\n\n## Quick start\n\nGeneral note : This assumes that you already have standard [timestamped lidar scan](https://github.com/norlab-ulaval/ros_rslidar), [imu](https://github.com/ethz-asl/ethzasl_xsens_driver) and general odometry nodes running.\n\n### Creating a params launch file\n\nTwo 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`](https://github.com/norlab-ulaval/WILN/tree/master/params/controller) directory. For an extensive definition of parameters, please refer to the [GeRoNa wiki](https://github.com/cogsys-tuebingen/gerona/wiki/path-follower-parameters).\n\nThe second ones define the registration parameters and filters for the SLAM algorithm. A working example can be found in the [`params/icp`](params/) directory. For more details on mapping parameters, please refer to the [norlab_icp_mapper_ros](https://github.com/norlab-ulaval/norlab_icp_mapper_ros) repository.\n\n### Creating a general launch file\n\nGeneral launch files will launch the various nodes required for navigation. They will also import the aforementioned parameters. A [launch file example](https://github.com/norlab-ulaval/WILN/blob/master/launch/warthog.launch) is given.\n\n## General operation and services\n\nThe 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.\n\nDuring 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.\n\nThe following table lists the various ROS services that enable the teach-and-repeat framework:\n\n| Service name | Description | Parameters |\n| :----------- | :---------- | :--------- |\n| /start_recording | Starts recording poses to build the reference map (cannot be called if another trajectory is already loaded). | None |\n| /stop_recording | Stops the trajectory recording (cannot be called is the recording was not started). | None                 |\n| /play_line | 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 |\n| /play_loop | Starts the repeat phase for a loop trajectory. | nb_loops (uint32)     |\n| /cancel_trajectory | Cancels the current repeat phase in the event of system failure. | None  |\n| /clear_trajectory | Clears the current trajectory from active memory. | None  |\n| /smooth_trajectory | Smooths the current trajectory using a low-pass filter. | None  |\n| /flip_trajectory | Flips the orientations of all the poses in the trajectory, without altering their order. | None  |\n| /reverse_trajectory | Reverses the order of the poses in the trajectory, without altering their orientation. | None  |\n| /save_map_traj | Saves the current map and trajectory in a `.ltr` file. | `file_name` (string) |\n| /load_map_traj | loads a specicied `.ltr` file. Assumes the robot is at the start of the trajectory. | `file_name` (string) |\n| /load_map_traj_from_end | loads a specicied `.ltr` file. Assumes the robot is at the en of the trajectory. | `file_name` (string) |\n\n## Citing\n\nIf you use wiln in an academic context, please cite [our article](https://doi.org/10.55417/fr.2022050):\n\n```bibtex\n@article{Baril2022,\n  doi = {10.55417/fr.2022050},\n  url = {https://doi.org/10.55417/fr.2022050},\n  year = {2022},\n  month = mar,\n  publisher = {Field Robotics Publication Society},\n  volume = {2},\n  number = {1},\n  pages = {1628--1660},\n  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},\n  title = {Kilometer-scale autonomous navigation in subarctic forests: challenges and lessons learned},\n  journal = {Field Robotics}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnorlab-ulaval%2Fwiln","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnorlab-ulaval%2Fwiln","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnorlab-ulaval%2Fwiln/lists"}