Home

Awesome

<a href="https://107-systems.org/"><img align="right" src="https://raw.githubusercontent.com/107-systems/.github/main/logo/107-systems.png" width="15%"></a> :floppy_disk: l3xz_mapping

Spell Check status

This repository includes the ROS-based explorative mapping stack of L3X-Z for ELROB 2022.

The stack is tested under ROS1 Noetic Ninjemys. It can do mapping using RTAB-Map and a simple known-position approach. Also data logging is possible.

<p align="center"> <a href="https://github.com/107-systems/l3xz"><img src="https://raw.githubusercontent.com/107-systems/.github/main/logo/l3xz-logo-memento-mori-github.png" width="40%"></a> </p>

Installation

Clone the repository and go to host root:

git clone --recursive https://github.com/107-systems/l3xz_mapping
cd l3xz_mapping/host_ws

Build using catkin:

catkin_make install

There is also a frontend available for the mapping stack.

Start mapping

RTAB-Map

roslaunch l3xz_mapping l3xz_mapping.launch

Known-position approach

roslaunch l3xz_mapping knownposition_lidar.launch

Data logging

roslaunch odom_recorder.launch
roslaunch thermal_recorder.launch
roslaunch plotter_grid.launch

Nodes

transform_odom

Creates an odometry message from tf data.

Published Topics

Default NameType
/odom_slamnav_msgs/Odometry

Parameters

NameDefaultDescription
odometry_out/odom_slamOdometry topic name
parent_frame/mapParent frame of interesting tf tree part
child_frame/base_linkChild frame of interesting tf tree part

plotter

Plots robot track and OPIs according to ELROB rules into a map. The input map can be an image or data from a topic of type nav_msgs/OccupancyGrid. The OPIs to be plotted and the robot track are subscribed from a topic of type l3xz_mapping/Track.

Parameters

NameDefaultDescription
from_gridfalseGet map topic from OccupancyGrid
img_src/home/log/map.pngMap image name
img_dest/home/log/map_dest.pngDestination map image name
meters_per_pixel0.1Resolution of map image
bearing_deg0.0Robot initial bearing
zero_px[100, 100]Robot initial position
robot_track/l3xz/odom_recorder/trackTrack topic
opi_tracks[/l3xz/thermal_recorder/track, /l3xz/radiation_recorder/track]OPI topics
grid_topic/gridGrid map

recorder

Records waypoints according to ELROB log format with Unix timestamp and WSG84 coordinates with images of the artifacts. Also a track containing all waypoints can be published (e.g. for plotting). All the logs are based on an initial startpoint.

Service clients

Default NamePurpose
recorder/set_startpointSet initial robot position. Needs to be done only once and is necessary to start recording.
recorder/set_waypointRecord a new waypoint.

Published Topipcs

Default NameType
recorder/track[l3xz_mapping/Track]

Parameters

NameDefaultDescription
logpath/home/l3xz/log.txtPath for logfile
artifacts[]List of artifact images
track_publishing_rate1Period for publishing track rate
publish_tracktrueEnable publishing of track

knownposition_node

For some tasks a complete map of an area is not desired. Therefore, it is a good idea to use a robust mapping from known position approach instead of SLAM to observe the area around the robot to master autonomous navigation tasks. This node demonstrates this approach using the data of one 2D-Lidar. All features of the implemented algorithms, e.g. overlaying multiple datasets, image postprocessing or transforming using tf are not demonstrated yet.

<p align="center"> <img src="doc/img/knownposition.png"> </p>

Subscribed Topipcs

Default NameType
/lidarsensor_msgs/Odometry
/odomnav_msgs/Odometry

Published Topipcs

Default NameType
/gridnav_msgs/OccupancyGrid

Parameters

NameDefaultDescription
pixel_x600Columns of the gridmap
pixel_y600Rows of the gridmap
resolution0.1Resolution of the gridmap in meters
rate_hz5Period for publishing the gridmap
grid_topic/gridName of the gridmap
odometry_topic/odometryName of the odometry topic
showtrueShow map in OpenCV window (like above)