ros2 launch turtlebot3_bringup robot.launch.py ## 加载 底盘以及lidar 部件.
ros2 run turtlebot3_teleop teleop_keyboard ## 加载手动遥控控制部分.
//默认位置为坐标 0, 0, 0 位置, 所以需要做地图之前进行规划和起始走位.
ros2 launch turtlebot3_cartographer cartographer.launch.py ## 启用 cartographer 的算法处理
根据以往建图经验, 尽量保持机器人平稳走动, 尤其不宜急停/急转. 速度为200mm/s 30度/s 为宜. lidar的视角做好超过180, 位置走一遍为宜. 否则多次扫描有大几率造成重影问题, 毕竟软件算法做到回环矫正还是比较难的.
ros2 run nav2_map_server map_saver -f ~/map ## 保存地图, 产生 map.pgm/yaml文件.
下一步进行 地图手动修正.
---------------------------------------------------------------------------------------------------
详细步骤
点击(此处)折叠或打开 cartographer.launch.py
-
import os
-
from ament_index_python.packages import get_package_share_directory
-
from launch import LaunchDescription
-
from launch.actions import DeclareLaunchArgument
-
from launch_ros.actions import Node
-
from launch.substitutions import LaunchConfiguration
-
from launch.actions import IncludeLaunchDescription
-
from launch.launch_description_sources import PythonLaunchDescriptionSource
-
from launch.substitutions import ThisLaunchFileDir
-
-
def generate_launch_description():
-
use_sim_time = LaunchConfiguration('use_sim_time', default='false')
-
turtlebot3_cartographer_prefix = get_package_share_directory('turtlebot3_cartographer')
-
cartographer_config_dir = LaunchConfiguration('cartographer_config_dir',
-
default=os.path.join(turtlebot3_cartographer_prefix, 'config'))
-
configuration_basename = LaunchConfiguration('configuration_basename', default='turtlebot3_lds_2d.lua') //激光雷达的参数以及建图参数
-
-
resolution = LaunchConfiguration('resolution', default='0.05') ## 地图分辨率
-
publish_period_sec = LaunchConfiguration('publish_period_sec', default='1.0') ##地图更新发布频率, 最好不要太快, 会影响CPU计算速度.
-
-
rviz_config_dir = os.path.join(get_package_share_directory('turtlebot3_cartographer'), 'rviz', 'tb3_cartographer.rviz')
-
-
return LaunchDescription([
-
DeclareLaunchArgument(
-
'cartographer_config_dir',
-
default_value=cartographer_config_dir,
-
description='Full path to config file to load'),
-
DeclareLaunchArgument(
-
'configuration_basename',
-
default_value=configuration_basename,
-
description='Name of lua file for cartographer'),
-
DeclareLaunchArgument(
-
'use_sim_time',
-
default_value='false',
-
description='Use simulation (Gazebo) clock if true'),
-
-
Node(
-
package='cartographer_ros',
-
node_executable='cartographer_node',
-
node_name='cartographer_node',
-
output='screen',
-
parameters=[{'use_sim_time': use_sim_time}],
-
arguments=['-configuration_directory', cartographer_config_dir, '-configuration_basename', configuration_basename]),
-
-
DeclareLaunchArgument(
-
'resolution',
-
default_value=resolution,
-
description='Resolution of a grid cell in the published occupancy grid'),
-
-
DeclareLaunchArgument(
-
'publish_period_sec',
-
default_value=publish_period_sec,
-
description='OccupancyGrid publishing period'),
-
-
IncludeLaunchDescription(
-
PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/occupancy_grid.launch.py']),
-
launch_arguments={'use_sim_time': use_sim_time, 'resolution': resolution, 'publish_period_sec': publish_period_sec}.items(),
-
),
-
-
Node(
-
package='rviz2',
-
node_executable='rviz2',
-
node_name='rviz2',
-
arguments=['-d', rviz_config_dir],
-
parameters=[{'use_sim_time': use_sim_time}],
-
output='screen'),
- ])
点击(此处)折叠或打开
- //occupancy_grid.launch.py 地图局部计算,回环等处理部分.
-
-
from launch import LaunchDescription
-
from launch.actions import DeclareLaunchArgument
-
from launch_ros.actions import Node
-
from launch.substitutions import LaunchConfiguration
-
-
def generate_launch_description():
-
use_sim_time = LaunchConfiguration('use_sim_time', default='false')
-
resolution = LaunchConfiguration('resolution', default='0.05')
-
publish_period_sec = LaunchConfiguration('publish_period_sec', default='1.0')
-
-
return LaunchDescription([
-
DeclareLaunchArgument(
-
'resolution',
-
default_value=resolution,
-
description='Resolution of a grid cell in the published occupancy grid'),
-
-
DeclareLaunchArgument(
-
'publish_period_sec',
-
default_value=publish_period_sec,
-
description='OccupancyGrid publishing period'),
-
-
DeclareLaunchArgument(
-
'use_sim_time',
-
default_value='false',
-
description='Use simulation (Gazebo) clock if true'),
-
-
Node(
-
package='cartographer_ros',
-
node_executable='occupancy_grid_node',
-
node_name='occupancy_grid_node',
-
output='screen',
-
parameters=[{'use_sim_time': use_sim_time}],
-
arguments=['-resolution', resolution, '-publish_period_sec', publish_period_sec]),
- ])