yahboom
HomeTutorialsProduct
Solution
Blog
Online Store
About Us
EN/中文
Store
ROSMASTER M1 PRO📖
0.Robot Configuration and Operation Guidelines
  • 0.Unboxing and Review
  • 1.Assembly Videos
  • 2.User Manual
  • 3.Enter Docker (For Raspberry Pi)
  • 4.FAQ
  • 5.RobotManager User Guide
1.Chassis Control Course
  • 1.Robot Information Publishing
  • 2.Robot Handle Control
  • 3.Robot Keyboard Control
  • 4.Linear Velocity Calibration
  • 5.Angular Velocity Calibration
  • 6.Robot URDF Model
  • 7.Robot EKF State Estimation
2.Lidar Course
  • 1.Lidar Introduction And Use
  • 2.Lidar Obstacle Avoidance
  • 3.Lidar Following
  • 4.Lidar Guard
  • 5.Lidar Patrol
  • 6.GMapping-SLAM Mapping
  • 7.Cartographer-SLAM Mapping
  • 8.Slam-Toolbox Mapping
  • 9.Lifelong Mode Mapping
  • 10.Navigation2 Single Point Navigation
  • 11.Navigation2 Multi Point Navigation
  • 12.Cartographer Relocalization Navigation
  • 13.Slam-Toolbox Localization Navigation
  • 14.Synchronous Mapping And Navigation
  • 15.Aruco Visual Relocalization Navigation
  • 16.Mobile App Mapping And Navigation
3.USB Camera-Depth Camera Course
  • 1.USB Camera Introduction
  • 2.USB Camera Intrinsic Calibration
  • 3.Nuwa-HP60C Camera Introduction (Depth Camera Only)
  • 4.Depth Pseudo Color Image (Depth Camera Only)
  • 5.Depth Camera Distance Measurement (Depth Camera Only)
  • 6.Block Volume Calculation (Depth Camera Only)
  • 7.Edge Detection (Depth Camera Only)
  • 8.RTAB-Map SLAM Mapping (Depth Camera Only)
  • 9.RTAB-Map Navigation (Depth Camera Only)
4.Robotic Arm and 3D Space Gripping Course
  • 1.Robotic Arm Basic Usage
  • 2.Robotic Arm Kinematics
  • 3.Robotic Arm Chassis Coordination Control
  • 4.AprilTag ID Sorting
  • 5.AprilTag Height Anomaly Sorting
  • 6.AprilTag Tracking and Grasping
  • 7.Color Block Sorting
  • 8.Color Block Height Anomaly Sorting
  • 9.Color Block Tracking and Grasping
  • 10.Wood Block Shape Sorting
  • 11.KCF Tracking and Grasping Objects
  • 12.Mediapipe Gesture ID Sorting AprilTag
  • 13.Mediapipe Gesture Height Sorting AprilTag
  • 14.Desktop Tracking and Grasping AprilTag
  • 15.3D Spatial Tracking AprilTag
  • 16.Transformer Model Tracking Algorithm
  • 17.Line Following Obstacle Clearing
5.Road network planning and navigation
  • 1.Introduction To Road Network Planning
  • 2.Road Network Annotation
  • 3.Planning And Navigation Between Waypoints
  • 4.Road Network Navigation In Any Pose
  • 5.Path Re-planning
6.OpenClaw Basic Course
  • 1.Introduction to OpenClaw
  • 2.OpenClaw Core Concepts
  • 3.OpenClaw API-KEY Configuration
  • 4.OpenClaw Switch Models
  • 5.OpenClaw System Prompt Words
  • 6.OpenClaw Common CLI Commands
7.OpenClaw Interaction Method
  • 1.OpenClaw Webchat Interaction
  • 2.OpenClaw Tui Interaction
  • 3.OpenClaw Voice Dialogue Interaction
  • 4.OpenClaw WhatsApp Interaction
8.OpenClaw Development
  • 1.OpenClaw Connecting to Robot MCP Service
  • 2.Robot CLI Command Tool
  • 3.robot-control Plugin Tool
  • 4.reply-bridge Plugin Tool
  • 5.OpenClaw Multimodal Vision
  • 6.OpenClaw Chassis Control
  • 7.OpenClaw Robotic Arm Control
  • 8.OpenClaw Skills Development
  • 9.OpenClaw Scheduled Tasks
  • 10.OpenClaw Multi-Agent Intelligent Agent
  • 11.OpenClaw Active Interaction
  • 12.OpenClaw Vector Memory
9.OpenClaw Embodied intelligent application
  • 1.OpenClaw Target Tracking
  • 2.OpenClaw Arm Tracking And Grasping
  • 3.OpenClaw Arm Fixed-point Placement
  • 4.OpenClaw Waste Sorting
  • 5.OpenClaw SLAM Mapping And Navigation
  • 6.OpenClaw Navigation Transport
  • 7.OpenClaw AprilTag Grasping
  • 8.OpenClaw Color Line Patrol
  • 9.OpenClaw Visual Distance Measurement
10.OpenClaw scenario sandbox
  • 1.Map Description and Props Placement
  • 2.Building the Sandbox Map
  • 3.Visual Relocalization Marker
  • 4.Map Mapping Marker
  • 5.Sandbox Scenario Comprehensive Case
11.AI Large Model Basics
  • 1.AI Large Model Types and Principles
  • 2.RAG Retrieval Enhancement and Model Training Samples
  • 3.Embodied Intelligent Robot System Architecture
  • 4.Embodied Intelligent Functions Core Source Code
12.AI large Model Development
  • 1.Register a Model Service Provider Account
  • 2.Configuring API-KEY
  • 3.Introduction to Dify
  • 4.Basic Dify Features
  • 5.AI Large Model Development - Chatbot
  • 6.Deploy the RAG Knowledge Base
  • 7.RAG Knowledge Base + Chatbot
  • 8.AI Agent Workflow
  • 9.Custom Wake-up Response
13.AI Model - Voice Version
  • 1.Semantic Understanding and Command Following
  • 2.Multimodal Visual Understanding
  • 3.Multimodal Visual Understanding and Robotic Arm Gripping
  • 4.Multimodal Visual Understanding and SLAM Navigation
  • 5.Robotic arm gripping+Multimodal visual understand+SLAM navigation
  • 6.Intention Understanding
14.AI Model - Text Version
  • 1.Semantic Understanding and Command Following
  • 2.Multimodal Visual Understanding
  • 3.Multimodal Visual Understanding and Robotic Arm Gripping
  • 4.Multimodal Visual Understanding and SLAM Navigation
  • 5.Robotic arm gripping+Multimodal visual understand+SLAM navigation
  • 6.Intention estimation
15.Mediapipe Visual Course
  • 1.Hand detection
  • 2.Posture detection
  • 3.Overall detection
  • 4.Facial Landmark Detection
  • 5.Face detection
  • 6.Face special effects
  • 7.3D object recognition
  • 8.Brush
  • 9.Finger control
  • 10.Palm target positioning
  • 11.Fingertip trajectory recognition
  • 12.Fingertip gesture control robotic arm
  • 13.Gesture grabbing and releasing objects
  • 14.Finger control robotic arm
  • 15.Medipipe gesture control robotic arm action group
16.MoveIt2 Simulation Course
  • 1.MovelT2 configuration
  • 2.MovelT2 simulation-reality linkage
  • 3.Random movement
  • 4.Forward kinematics design
  • 5.Inverse kinematics design
  • 6.Cartesian path
  • 7.Trajectory Planning
  • 8.Collision Detection
  • 9.Scene Design
  • 10.3D perception obstacle‑avoidance
17.Multi-vehicle Course
  • 1.Multi-vehicle Control
  • 2.Multi-vehicle Navigation
  • 3.Multi-vehicle Formation
18.YOLO26 Development
  • 1.CLI Use
  • 2.Object Detection
  • 3.Instance Segmentation
  • 4.Pose Estimation
  • 5.Image Classification
  • 6.Oriented Object Detection
  • 7.YOLOv26 + DeepSORT Tracking
  • 8.Monocular Depth Estimation
19.Control Board STM32 Driver Course
  • 0.Notes (Must Read)
  • 1.About Expansion Board
  • 2.STM32 Development Environment
  • 3.Button Control
  • 4.FreeRTOS Application
  • 5.Serial Communication
  • 6.SBUS Model Aircraft Remote Control
  • 7.CAN Bus Communication
  • 8.RGB Colorful Light Bar
  • 9.Timer Interrupt to Control PWM Servo
  • 10.Control Serial Port Servos
  • 11.Nine-axis Attitude Sensor to Obtain Data
  • 12.Control Motor
  • 13.Timer Captures the Encoder Data
  • 14.1 Kinematic Analysis of Mecanum Wheel
  • 14.2 Kinematic Analysis of Ackerman
  • 14.3 Kinematic Analysis of 4WD
  • 15.PID Control Robot Movement
20.Docker Course
  • 1.Docker Introduction and Installation
  • 2.Docker Basic Commands
  • 3.Docker Submission and Multi-Terminal Access
  • 4. Docker Startup Script
  • 5.Docker-Vscode Environment Construction
21.Image Processing Basics Course
  • 1. Introduction to Open Source CV
  • 2. Image reading and display
  • 3. Image writing
  • 4. Image quality
  • 5. Pixel Operation
  • 6. Image zoom
  • 7. Image cutting
  • 8. Image translation
  • 9. Image Mirroring
  • 10. Affine Transformation
  • 11. Image Rotation
  • 12. Perspective Transformation
  • 13. Grayscale processing
  • 14. Image Binarization
  • 15. Edge Detection
  • 16. Line drawing
  • 17. Rectangle and circle drawing
  • 18. Drawing text and pictures
22.Linux System Course
  • 1.Introduction to Linux system
  • 2.Ubuntu file system
  • 3.Ubuntu common commands
  • 4.Ubuntu common editors
  • 5.Ubuntu software operation commands
  • 6.Virtual machine installation
  • 7.SSH remote control
  • 8.VNC remote control
  • 9.Transfer files remotely
  • 10.Driver library and communication
  • 11.Static IP and hotspot mode
  • 12.Bind device ID
  • 13.Capacity expansion and resource allocation
  • 14.Update system software sources
  • 15.Set root user password
  • 16.sudo free password
  • 17.Connect to WiFi network
  • 18.View system version
  • 19.Customized service management
  • 20.Back up system image
23.ROS2 Basic Course
  • 1.Introduction to ROS2
  • 2.ROS2 install Humble
  • 3.ROS2 development environment
  • 4.ROS2 workspace
  • 5.ROS2 function package
  • 6.ROS2 node
  • 7.ROS2 topic communication
  • 8.ROS2 service communication
  • 9.ROS2 action communication
  • 10.ROS2 custom interface message
  • 11.ROS2 parameter service case
  • 12.ROS2 meta-function package
  • 13.ROS2 distributed communication
  • 14.ROS2 DDS
  • 15.ROS2 time related API
  • 16.ROS2 common command tools
  • 17.ROS2 rviz2 use
  • 18.ROS2 rqt toolbox
  • 19.ROS2 Launch startup file configuration
  • 20.ROS2 recording and playback tool
  • 21.ROS2 URDF model
  • 22.ROS2 Gazebo simulation platform
  • 23.ROS2 TF2 coordinate transformation
24.Main Control Course
Jetson Orin Nano_NX
  • 1.Jetson Orin board introduction
  • 2.Restore the factory image system
  • 3.Backup SSD system
  • 4.SSD expansion
  • 5.Network configuration
  • 6.SSH remote login
  • 7.VNC remote control
  • 8.Remote file transfer
  • 9.Jtop tool
  • 10.Exchange space expansion
Raspberry Pi
  • 1. Introduction to Raspberry PI 5
  • 2. Raspberry PI system installation and backup
  • 3. Powering the Raspberry PI 5
  • 4. Startup of Raspberry PI 5
  • 5. Update and upgrade operating system
  • 6. Introduction to raspi-config tool
  • 7. config.txt file description
  • 8. Network Configuration
  • 9. remote access
  • 10. Transfer files remotely
  • 11. Set display resolution and rotation
  • 12. Set screen to sleep
  • 13. Play audio and video
  • 14. Using USB camera
  • 15. Using MIPI camera
  • 16. Get real-time temperature of Raspberry Pi
RDKX5
  • 1.Introduction to RDK X5 board
  • 2.Write system file
  • 3.Hardware interface description
  • 4.Install case and other accessories
  • 5.Network configuration
  • 6.Remote login
  • 7.Update system
  • 8.srpi-config user guide
  • 9.config. txt configuration file
  • 10.Self-startup setting
  • 11.RDK exclusive command usage
  • 12.Linux command usage
  • 13.GPIO readwrite operation
  • 14.Image classification algorithm
  • 15.Use USB camera
  • 16.Use MIPI camera
  • 17.Binocular camera depth algorithm
  • 18. Controlling RGB Cooling Fans
Download
  • System File
  • Code
  • 3D Model File
  • Software Tools
  • Hardware_Info
  • Deb function package
  • Dify AI Agent
Download ZIP

Welcome to ROSMASTER M1 PRO repository

6.GMapping-SLAM Mapping

Gmapping Mapping Algorithm

Gmapping Mapping Algorithm1. Course Content2. Gmapping Algorithm Introduction3. Case Demonstration3.1 Mapping Process3.2 Saving the Map3.3 Configuration File4. Source Code Analysis

1. Course Content

Basic: Run the example program, perform SLAM mapping with the gmapping mapping algorithm, and save the grid map.

Advanced: Understand the gmapping algorithm's configuration parameters.

2. Gmapping Algorithm Introduction

  • Gmapping is a commonly used open-source SLAM algorithm based on the filtering SLAM framework.

  • Gmapping is based on the RBPF particle filter algorithm, separating the simultaneous localization and mapping process: it performs localization first, then mapping.

  • Gmapping makes two main improvements on the RBPF algorithm: an improved proposal distribution and selective resampling.

Advantages: Gmapping can build indoor maps in real time, requires relatively little computation for building small-scene maps, and achieves high accuracy.

Disadvantages: As the scene grows larger, the number of particles required increases; because each particle carries a map, the memory and

computation required to build a large map both increase. Therefore, it is not suitable for building large-scene maps. It also lacks loop closure detection, so the map may become misaligned during loop closure. Although increasing the number of particles can make the map close, this comes at the cost of increased computation and memory.

 

3. Case Demonstration

  • Launch method 1: GUI launch

 

  • Launch method 2: CLI command launch in VNC

xxxxxxxxxx
ros2 launch yahboomcar_bringup gmapping.launch.py

image-20260727194219441

3.1 Mapping Process

  • Note: when mapping, the slower the speed, the better the result (mainly the rotation speed should be slower).

  • Control the car's movement to complete mapping of the environment. You can use keyboard control or joystick control; here, keyboard control is used as an example

xxxxxxxxxx
ros2 run common_demo keyboard_control

image-20260727194501760

image-20260727194745399

 

3.2 Saving the Map

  • Method 1: operate through the UI; start RobotManager

    image-20260827192317863

  • Click Save Map. You can also customize the map name and map type. If the terminal indicates that saving failed, simply save again

image-20260917215722823

 

  • Method 2: run the following command in the terminal to save the grid map:

xxxxxxxxxx
ros2 launch yahboomcar_bringup save_map_launch.py

Tip

Optional parameter:

map_name: specifies the name for saving the map; the default value is map

For example, to save a map named test.yaml, you need to add the parameter: ros2 launch yahboomcar_bringup save_map_launch.py map_name:=test.yaml

When the terminal displays Map saved successfully, the map has been saved successfully. If saving fails, try saving again.

 

The default map save path is as follows:

xxxxxxxxxx
~/map/map.yaml

A pgm image and a yaml file yahboom_map.yaml

xxxxxxxxxx
image: yahboom_map.pgm
mode: trinary
resolution: 0.05
origin: [-10, -10, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

Parameter analysis:

  • image: the path of the map file; it can be an absolute path or a relative path

  • mode: this attribute can be one of trinary, scale, or raw, depending on the mode selected; trinary mode is the default mode

  • resolution: the map's resolution, in meters/pixel

  • origin: the 2D pose (x, y, yaw) of the map's lower-left corner; here yaw is rotated counter-clockwise (yaw=0 means no rotation). At present, many parts of the system ignore the yaw value.

  • negate: whether to invert the meaning of white/black and free/occupied (the interpretation of thresholds is unaffected)

  • occupied_thresh: pixels with an occupancy probability greater than this threshold are considered fully occupied.

  • free_thresh: pixels with an occupancy probability less than this threshold are considered fully free.

 

3.3 Configuration File

  • Configuration file path:

xxxxxxxxxx
~/yahboomcar_ros2_ws/yahboomcar_ws/src/yahboomcar_bringup/param/slam_gmapping.yaml
  • Meaning of the default configuration parameters:

xxxxxxxxxx
slam_gmapping:
  ros__parameters:
    # Angular update threshold (radians): update the map when the robot rotates beyond this angle
    angularUpdate: 0.25
    # Angular sampling step (radians): the angular search step used for scan matching
    astep: 0.05
    # Name of the robot base coordinate frame
    base_frame: base_footprint
    # Name of the map coordinate frame
    map_frame: map
    # Name of the odometry coordinate frame
    odom_frame: odom
    # Iteration termination condition of the scan matching algorithm: stop iterating when the parameter change is less than this value
    delta: 0.05
    # Maximum number of iterations for scan matching
    iterations: 5
    # Kernel size used for scan matching; affects the smoothness of the match
    kernelSize: 1
    
    # Distance sampling range for large-scale scan matching (meters)
    lasamplerange: 0.005
    # Distance sampling step for large-scale scan matching (meters)
    lasamplestep: 0.005
    # Linear update threshold (meters): update the map when the robot moves beyond this distance
    linearUpdate: 0.5
    # Distance sampling range for small-scale scan matching (meters)
    llsamplerange: 0.01
    # Distance sampling step for small-scale scan matching (meters)
    llsamplestep: 0.01
    
    # Measurement noise covariance of the laser scan
    lsigma: 0.075
    # Number of laser beams to skip: 0 means using all laser points
    lskip: 0
    # Linear sampling step (meters): the linear search step used for scan matching
    lstep: 0.05
    # Map update interval (seconds)
    map_update_interval: 3.0
    # Maximum laser range (meters): points beyond this distance are ignored
    maxRange: 6.0
    # Effective maximum laser range (meters): the maximum distance used for mapping
    maxUrange: 4.0
    # Minimum score threshold for scan matching: matches below this value are discarded
    minimum_score: 0.0
    # Occupancy probability threshold: cells greater than this value are considered occupied
    occ_thresh: 0.25
    # Gain factor: affects the speed of map updates
    ogain: 3.0
    # Number of particles in the particle filter
    particles: 30
    # QoS (Quality of Service) parameter settings
    qos_overrides:
      /parameter_events:
        publisher:
          depth: 1000          # Message queue depth
          durability: volatile # Durability policy
          history: keep_all    # History policy
          reliability: reliable # Reliability policy
      /tf:
        publisher:
          depth: 1000
          durability: volatile
          history: keep_last   # Keep only the latest message
          reliability: reliable
    # Resampling threshold: trigger resampling when the number of effective particles falls below this ratio
    resampleThreshold: 0.5
    # Angular noise covariance of scan matching
    sigma: 0.05
    # Odometry model parameter: proportion of linear error caused by linear motion
    srr: 0.1
    # Odometry model parameter: proportion of angular error caused by linear motion
    srt: 0.2
    # Odometry model parameter: proportion of linear error caused by angular motion
    str: 0.1
    # Odometry model parameter: proportion of angular error caused by angular motion
    stt: 0.2
    # Time update interval (seconds): update the map even if the robot has not moved
    temporalUpdate: 1.0
    # Coordinate transform publishing period (seconds)
    transform_publish_period: 0.05
    # Whether to use simulation time
    use_sim_time: false
    # Maximum x-axis range of the map (meters)
    xmax: 100.0
    # Minimum x-axis range of the map (meters)
    xmin: -100.0
    # Maximum y-axis range of the map (meters)
    ymax: 100.0
    # Minimum y-axis range of the map (meters)
    ymin: -100.0

 

4. Source Code Analysis

  • gmapping mapping launch file

xxxxxxxxxx
~/yahboomcar_ros2_ws/yahboomcar_ws/src/yahboomcar_bringup/launch/gmapping.launch.py

 

  • slam_gmapping_config_file: the full path for loading the gmapping parameter configuration file slam_gmapping.yaml

  • rviz_cmd: declares the rviz launch parameter, default value True, used to control whether to automatically start Rviz2

  • bringup_car_base: includes car_base.launch.py, enabling the LiDAR (use_lidar: True) and IMU (use_imu: True), disabling the camera and magnetometer, and using the EKF odometry as the TF source (odom_tf_source: ekf)

  • gmapping_node: starts the slam_gmapping node and loads the above configuration file to perform mapping

  • rviz_node: starts Rviz2 and loads the preset configuration gmapping_rviz.rviz, controlled by the rviz parameter

  • LaunchDescription: aggregates and returns all declared parameters and nodes

xxxxxxxxxx
def generate_launch_description():

    slam_gmapping_config_file = os.path.join(get_package_share_directory("yahboomcar_bringup"), "param", "slam_gmapping.yaml")

    rviz_cmd=DeclareLaunchArgument(
        "rviz",
        default_value="True",
        description="Start Rviz2 automatically ?",
    )

    bringup_car_base=IncludeLaunchDescription(
            PythonLaunchDescriptionSource(os.path.join(get_package_share_directory('yahboomcar_bringup'),'launch','car_base.launch.py')),
            launch_arguments={'log_level': 'info',
                              'use_imu': 'True',
                              'use_lidar': 'True',
                              'use_mag': 'False',
                              'use_camera': 'False',
                              'odom_tf_source': 'ekf'
                              }.items())

    gmapping_node=Node(
    package='slam_gmapping', 
    executable='slam_gmapping', 
    output='screen', 
    parameters=[slam_gmapping_config_file]
    )
    rviz_node=Node(
        package='rviz2',
        executable='rviz2',
        name='rviz2',
        arguments=['-d', os.path.join(get_package_share_directory('yahboomcar_bringup'), 'rviz', 'gmapping_rviz.rviz')],
        condition=IfCondition(LaunchConfiguration('rviz'))
    )

    return LaunchDescription([
            rviz_cmd,                       
            rviz_node,                       
            bringup_car_base,                 
            gmapping_node,                 
    ])

 

  • Save map command launch file path

xxxxxxxxxx
~/yahboomcar_ros2_ws/yahboomcar_ws/src/yahboomcar_bringup/launch/save_map_launch.py

Important

In subsequent chapter courses, the save map command and the command source code in RobotManager's save map feature are all save_map_launch.py, which switches between different functions through launch parameters. save_map_launch.py will not be explained again in subsequent courses

 

  • map_folder_dir: defines the map save directory ~/map

  • declared_arguments: declares two launch parameters, map_name (map name, default map, without file extension) and map_type (map type, default gridmap, options gridmap / pbstream / posegraph)

  • map_path / pbstream_path: concatenates the save directory and map name into the full path

  • save_map: uses nav2_map_server's map_saver_cli to save the grid map, specifying a free space threshold of 0.196 and an occupied threshold of 0.65; executes only when map_type == 'gridmap'

  • save_pbstream: calls Cartographer's /write_state service via ros2 service call to save a map in .pbstream format; executes only when map_type == 'pbstream'

  • save_posegraph: calls slam_toolbox's /slam_toolbox/serialize_map service via ros2 service call to save the pose graph; executes only when map_type == 'posegraph'

  • LaunchDescription: aggregates and returns all parameter declarations and the three save nodes (executed conditionally)

​x
def generate_launch_description():
    map_folder_dir = os.path.join(os.path.expanduser('~'), 'map')

    declared_arguments = [
        DeclareLaunchArgument(
            'map_name',
            default_value='map',
            description='Map name to save, without file extension',
        ),
        DeclareLaunchArgument(
            'map_type',
            default_value='gridmap',
            description='Type of map to be saved (optional):gridmap、pbstream、posegraph',
        ),
    ]

    map_name = LaunchConfiguration('map_name')
    map_type = LaunchConfiguration('map_type')
    map_path = PathJoinSubstitution([map_folder_dir, map_name])
    pbstream_path = PathJoinSubstitution([map_folder_dir, map_name])

    save_map = Node(
        package='nav2_map_server',
        executable='map_saver_cli',
        arguments=[
            '-f', PathJoinSubstitution([map_folder_dir, map_name]),
            '--free', '0.196',
            '--occ', '0.65'],
        condition=IfCondition(PythonExpression(["'", map_type, "' == 'gridmap'"]))
    )


    save_pbstream = ExecuteProcess(
        condition=IfCondition(PythonExpression(["'", map_type, "' == 'pbstream'"])),
        cmd=[
            'ros2', 'service', 'call',
            '/write_state',
            'cartographer_ros_msgs/srv/WriteState',
            ['{filename: "', pbstream_path, '.pbstream"}'],
        ],
        shell=False,
        emulate_tty=True,
        output='screen',
    )
    
    save_posegraph = ExecuteProcess(
        condition=IfCondition(PythonExpression(["'", map_type, "' == 'posegraph'"])),
        cmd=[
            'ros2', 'service', 'call',
            '/slam_toolbox/serialize_map',
            'slam_toolbox/srv/SerializePoseGraph',
            ['{filename: "', map_path, '"}'],
        ],
        shell=False,
        emulate_tty=True,
        output='screen',
    )


    return LaunchDescription([
        *declared_arguments,
        save_map,
        save_pbstream,
        save_posegraph,
    ])
Lidar Patrol
Cartographer-SLAM Mapping

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文