How to save map after SLAM

To save the map generated during the SLAM session, I can use the map_saver package provided by ROS and save it as two files:
.pgm file and .yaml file.
In Lidar_Slam_Sim example, I only have a chance to visualize the generated map using the video display, as shown in the image.
How can I save the .pgm and . yaml files from simulink?

 Accepted Answer

Zheng Dong
Zheng Dong on 12 Sep 2023
Hi Ahmed,
Here is a workaround for your question. The prototype is attached.
In summary, you can add a blank nav_msgs/OccupancyGrid type message as an input to your lidar SLAM block and then utilize the function "fcn" in the demo block to overwrite the message with the map data you got from the SLAM algorithm. In the prototype, a random occupancyMap is used, but in your case it will be the occupancyMap you got from the lidar SLAM. Then you can publish it to map_saver to output the map.
Hope it helps,
Best,
Zheng

7 Comments

Hi Zheng,
I first edited the fcn line map = occupancyMap(msgIn); instead of rand(10) and then changed the data type of the msgOut to Inherit: Same as Simulink because I encountered an error.
However, I was unable to resolve the issue and received an error message.
Cannot propagate non-bus signal to block 'Lidar_Slam_Sim_Map/Triggered Lidar SLAM/Publish/SignalSpecification' because the block has a bus object specified. A bus signal matching the bus object specification must be passed in.
Hi Ahmed,
After you open the MATLAB function block, you can use "Edit Data" button in top-left corner to set the msgOut as a bus type. Please check the figure for more details.
Best,
Zheng
Hi Zheng,
I applied this option before and here is the error I got.
Hi Ahmed,
As I mentioned in the first reply, you need to give a blank nav_msgs/OccupancyGrid type message as a second input besides your map and assign msgOut = msgIn2;
It will make msgOut of nav_msgs/OccupancyGrid type, then you can assign the data to msgOut's fields.
Best,
Zheng
Hi Zheng,
Here is the result
Hi Ahmed,
This is because 128 is the default maximum length for message. Find "Variable Size Messages" in "SIMULATION" section, choose "nav_msgs/OccupancyGrid", uncheck "Use default limits for this message type", and then specify a number is larger than your map data size (82944 in your figure). Check the figure for more details.
Best,
Zheng
Hi Zheng,
Thank you so much for your effort and time. Everything is working exactly as it should be.
Best

Sign in to comment.

More Answers (1)

Ajay
Ajay on 12 Sep 2023
yes

1 Comment

How?
In Lidar_Slam_Sim example, I only have a chance to visualize the generated map using the video display, as shown in the image.
How can I save the .pgm and . yaml files from simulink?

Sign in to comment.

Categories

Find more on Aerospace Applications in Help Center and File Exchange

Products

Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!