How to run ndt_mapping and ndt_matching using a Laser Scan sensor (/sensor_msgs/LaserScan)
- ROS version: Melodic
- Autoware version: Autoware.AI
- Autoware.AI GitHub branch: master and 1.14.0
- Autoware Installation method: Docker (CPU only)
- ROS Distro: melodic
- Platform: Ubuntu 18.04 (running on Windows 10 + Windows Subsystem for Linux 2)
- CPU architecture: x86_64 (Intel Core i7-10750H)
- Programming languages used: Python, C++, MATLAB
I have successfully run ndt_mapping, ndt_matching, waypoint_saver with Autoware Runtime Manager using the /points_raw topic (/sensor_msgs/PointCloud2 message) in the Sample Moriyame bagfile (link). However, I would now like to run those nodes on my robot. I have a version of my car/robot in simulation (using Gazebo) and one in the lab. It is a small-scale robot (roughly 1/10th the size of an actual car). The issue is that the only sensors available are cameras (Intel Realsense and some CSI cameras), a 2D laser distance sensor (RPLidar), and an IMU sensor (this has not yet been set up). The distance sensor publishes to the /scan topic as /sensor_msgs/LaserScan messages but ndt_matching expects data as /sensor_msgs/PointCloud2 on the /points_raw topic. I have tried converting the /sensor_msgs/LaserScan to /sensor_msgs/PointCloud2 using (here and here) and generated this rosbag (link). However, the laser_geometry package specifies that it is only meant for a stationary object (link) and cannot be used for mobile robots
Since we are gathering data across the time of the scan, it is often important that the chosen target_frame is actually a fixed frame.
This is evident by the unusable /points_raw data in my bagfile. Since I cannot attach files on ROS answers yet, I have attached the scripts used here. I cannot use a GPS sensor to localize since the robot will be indoor and cannot generate a Vector Map or Lanelet2 map from PointClouds.
Since ndt_mapping and ndt_matching are crucial for running Autoware, especially without GPS data, I have the following questions:
How can I run ndt_mapping and ndt_matching directly with /sensor_msgs/LaserScan? Running directly with /sensor_msgs/LaserScan should reduce the overhead and inaccuracies resulting from converting /sensor_msgs/LaserScan to /sensor_msgs/PointCloud2.
How can I accurately convert /sensor_msgs/LaserScan messages to /sensor_msgs/PointCloud2 messages in the correct frame needed for ndt_mapping (I think /base_link)?
Does anybody know any small (and cheap) 2D/3D sensor (small enough to fit on that small) that integrates well with ROS and publishes PointCloud2 data?