当前位置:网站首页>Interesting practice of robot programming 16 synchronous positioning and map building (SLAM)
Interesting practice of robot programming 16 synchronous positioning and map building (SLAM)
2022-07-05 01:28:00 【zhangrelay】
360 Laser is used to avoid obstacles , How can that be? , It's totally overqualified ……
stay Gazebo In the simulator SLAM when , Various environments and robot models can be selected or created in the virtual world .SLAM Simulation and Practice TurtleBot3 Of SLAM Very similar .
Through the three-dimensional environment of the keyboard remote control and autonomous obstacle avoidance driving , Have fully mastered the basic use of , Next entry SLAM link .
The effect is shown below :
This article does not contain SLAM Algorithm details , Follow up blog updates .
For more cool applications based on maps, please refer to the following :
Start the simulation world
There are three Gazebo Environmental Science , But to use SLAM Create map , It is recommended to use TurtleBot3 World or TurtleBot3 House.
Use one of the following commands to load Gazebo Environmental Science . In this directive , Will use TurtleBot3 World.
Please be there. burger、waffle、waffle_pi In Chinese, it means TURTLEBOT3_MODEL Parameters use the correct keywords .
- world
- $ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py - house
- $ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
Choose one of the two above .
function SLAM node
Use Ctrl + Alt + T From remote PC Open a new terminal and run SLAM node . By default Cartographer SLAM Method .
- $ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
Run the autonomous obstacle avoidance node
Use Ctrl + Alt + T From remote PC Open a new terminal , And then from PC function drive node .
- ros2 run turtlebot3_gazebo turtlebot3_drive
Run the remote control operation node
Use Ctrl + Alt + T From remote PC Open a new terminal , And then from the remote PC Run the remote operation node .
- ros2 run turtlebot3_teleop teleop_keyboard
Save the map
After successfully creating the map , Use Ctrl + Alt + T From remote PC Open a new terminal and save the map .
- ros2 run nav2_map_server map_saver_cli -f ~/map
cartographer.launch
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')
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',
executable='cartographer_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',
executable='rviz2',
name='rviz2',
arguments=['-d', rviz_config_dir],
parameters=[{'use_sim_time': use_sim_time}],
output='screen'),
])
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
The configuration file lua
include "map_builder.lua"
include "trajectory_builder.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
tracking_frame = "imu_link",
published_frame = "odom",
odom_frame = "odom",
provide_odom_frame = false,
publish_frame_projected_to_2d = true,
use_odometry = true,
use_nav_sat = false,
use_landmarks = false,
num_laser_scans = 1,
num_multi_echo_laser_scans = 0,
num_subdivisions_per_laser_scan = 1,
num_point_clouds = 0,
lookup_transform_timeout_sec = 0.2,
submap_publish_period_sec = 0.3,
pose_publish_period_sec = 5e-3,
trajectory_publish_period_sec = 30e-3,
rangefinder_sampling_ratio = 1.,
odometry_sampling_ratio = 1.,
fixed_frame_pose_sampling_ratio = 1.,
imu_sampling_ratio = 1.,
landmarks_sampling_ratio = 1.,
}
MAP_BUILDER.use_trajectory_builder_2d = true
TRAJECTORY_BUILDER_2D.min_range = 0.12
TRAJECTORY_BUILDER_2D.max_range = 3.5
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 3.
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.1)
POSE_GRAPH.constraint_builder.min_score = 0.65
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.7
-- POSE_GRAPH.optimize_every_n_nodes = 0
return options
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
边栏推荐
- Wechat applet: new independent backstage Yuelao office one yuan dating blind box
- Inventory of more than 17 typical security incidents in January 2022
- Take you ten days to easily complete the go micro service series (IX. link tracking)
- dotnet-exec 0.6.0 released
- Delaying wages to force people to leave, and the layoffs of small Internet companies are a little too much!
- Applet live + e-commerce, if you want to be a new retail e-commerce, use it!
- 無心劍英譯席慕容《無怨的青春》
- PHP 约瑟夫环问题
- Database performance optimization tool
- Game 280 of leetcode week
猜你喜欢
MySQL REGEXP:正则表达式查询
What sparks can applet container technology collide with IOT
【CTF】AWDP总结(Web)
Senior Test / development programmers write no bugs? Qualifications (shackles) don't be afraid of mistakes
Four pits in reentrantlock!
BGP comprehensive experiment
Exploration and practice of integration of streaming and wholesale in jd.com
[wave modeling 1] theoretical analysis and MATLAB simulation of wave modeling
[flutter topic] 64 illustration basic textfield text input box (I) # yyds dry goods inventory #
流批一體在京東的探索與實踐
随机推荐
视频网站手绘
Game 280 of leetcode week
【纯音听力测试】基于MATLAB的纯音听力测试系统
Jcenter () cannot find Alibaba cloud proxy address
【海浪建模3】三维随机真实海浪建模以及海浪发电机建模matlab仿真
Wechat applet: the latest WordPress black gold wallpaper wechat applet two open repair version source code download support traffic main revenue
How to use words to describe breaking change in Spartacus UI of SAP e-commerce cloud
What is the current situation and Prospect of the software testing industry in 2022?
A simple SSO unified login design
Database postragesq BSD authentication
Hand drawn video website
Roads and routes -- dfs+topsort+dijkstra+ mapping
Arbitrum:二维费用
JS implementation determines whether the point is within the polygon range
LeetCode周赛 + AcWing周赛(T4/T3)分析对比
dotnet-exec 0.6.0 released
【大型电商项目开发】性能压测-优化-中间件对性能的影响-40
Package What is the function of JSON file? What do the inside ^ angle brackets and ~ tilde mean?
How to safely eat apples on the edge of a cliff? Deepmind & openai gives the answer of 3D security reinforcement learning
实战模拟│JWT 登录认证