系统配置
vm 安装 Ubuntu 20.04.6 LTS
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
ros2版本
小鱼的一键安装
galactic
同时还安装了,ros的noetic
情景回放:
根据CSDN小鱼的教程,
Gazebo仿真环境的搭建及运行
以下是俺自己调整过的文件夹树、配置文件、运行结果
文件夹树
├── lyprc_description
│ ├── launch
│ │ ├── display_rviz2.launch.py
│ │ └── gazebo.launch.py
│ ├── lyprc01.rviz
│ ├── lyprc_description
│ │ └── __init__.py
│ ├── package.xml
│ ├── resource
│ │ └── lyprc_description
│ ├── setup.cfg
│ ├── setup.py
│ ├── test
│ │ ├── test_copyright.py
│ │ ├── test_flake8.py
│ │ └── test_pep257.py
│ ├── urdf
│ │ ├── lyprc_base.urdf
│ │ └── lyprc_gazebo.urdf
│ └── world
│ └── myhouse01.world
gazebo.launch.py文件
import os
from launch import LaunchDescription
from launch.actions import ExecuteProcess
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare
def generate_launch_description():
robot_name_in_model = 'lyprcbot'
package_name = 'lyprc_description'
urdf_name = "lyprc_gazebo.urdf"
world_name = "myhouse01.world"
ld = LaunchDescription()
pkg_share = FindPackageShare(package=package_name).find(package_name)
urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
gazebo_world_path = os.path.join(pkg_share, f'world/{world_name}')
# Start Gazebo server
start_gazebo_cmd = ExecuteProcess(
cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so', gazebo_world_path],
output='screen')
# start_gazebo_cmd = ExecuteProcess(
# cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so'],
# output='screen')
# Launch the robot
spawn_entity_cmd = Node(
package='gazebo_ros',
executable='spawn_entity.py',
arguments=['-entity', robot_name_in_model, '-file', urdf_model_path ], output='screen',
)
# Start Robot State publisher
start_robot_state_publisher_cmd = Node(
package='robot_state_publisher',
executable='robot_state_publisher',
arguments=[urdf_model_path],
)
# Launch RViz
start_rviz_cmd = Node(
package='rviz2',
executable='rviz2',
name='rviz2',
output='screen',
arguments=['-d', "/home/lyprc/LOVE/ROStest/ROSLAM_ws/src/lyprc_description/lyprc01.rviz"],
)
ld.add_action(start_gazebo_cmd)
ld.add_action(spawn_entity_cmd)
ld.add_action(start_robot_state_publisher_cmd)
ld.add_action(start_rviz_cmd)
return ld
lyprc_gazebo.urdf文件
<?xml version="1.0"?>
<robot name="lyprc">
<!-- Robot Footprint -->
<link name="base_footprint"/>
<joint name="base_joint" type="fixed">
<parent link="base_footprint"/>
<child link="base_link"/>
<origin xyz="0.0 0.0 0.076" rpy="0 0 0"/>
</joint>
<!-- base link -->
<link name="base_link">
<visual>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.12" radius="0.10"/>
</geometry>
<material name="blue">
<color rgba="0.1 0.1 1.0 0.5" />
</material>
</visual>
<collision>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.12" radius="0.10"/>
</geometry>
<material name="blue">
<color rgba="0.1 0.1 1.0 0.5" />
</material>
</collision>
<inertial>
<mass value="0.2"/>
<inertia ixx="0.0122666" ixy="0" ixz="0" iyy="0.0122666" iyz="0" izz="0.02"/>
</inertial>
</link>
<!-- laser link -->
<link name="laser_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.02" radius="0.02"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.02" radius="0.02"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</collision>
<inertial>
<mass value="0.1"/>
<inertia ixx="0.000190416666667" ixy="0" ixz="0" iyy="0.0001904" iyz="0" izz="0.00036"/>
</inertial>
</link>
<!-- laser joint -->
<joint name="laser_joint" type="fixed">
<parent link="base_link" />
<child link="laser_link" />
<origin xyz="0 0 0.075" />
</joint>
<link name="imu_link">
<visual>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<box size="0.02 0.02 0.02"/>
</geometry>
</visual>
<collision>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<box size="0.02 0.02 0.02"/>
</geometry>
</collision>
<inertial>
<mass value="0.1"/>
<inertia ixx="0.000190416666667" ixy="0" ixz="0" iyy="0.0001904" iyz="0" izz="0.00036"/>
</inertial>
</link>
<!-- imu joint -->
<joint name="imu_joint" type="fixed">
<parent link="base_link" />
<child link="imu_link" />
<origin xyz="0 0 0.02" />
</joint>
<link name="left_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.57079 0 0"/>
<geometry>
<cylinder length="0.04" radius="0.032"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="1.57079 0 0"/>
<geometry>
<cylinder length="0.04" radius="0.032"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</collision>
<inertial>
<mass value="0.2"/>
<inertia ixx="0.000190416666667" ixy="0" ixz="0" iyy="0.0001904" iyz="0" izz="0.00036"/>
</inertial>
</link>
<link name="right_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.57079 0 0"/>
<geometry>
<cylinder length="0.04" radius="0.032"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="1.57079 0 0"/>
<geometry>
<cylinder length="0.04" radius="0.032"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</collision>
<inertial>
<mass value="0.2"/>
<inertia ixx="0.000190416666667" ixy="0" ixz="0" iyy="0.0001904" iyz="0" izz="0.00036"/>
</inertial>
</link>
<joint name="left_wheel_joint" type="continuous">
<parent link="base_link" />
<child link="left_wheel_link" />
<origin xyz="-0.02 0.10 -0.06" />
<axis xyz="0 1 0" />
</joint>
<joint name="right_wheel_joint" type="continuous">
<parent link="base_link" />
<child link="right_wheel_link" />
<origin xyz="-0.02 -0.10 -0.06" />
<axis xyz="0 1 0" />
</joint>
<link name="caster_link">
<visual>
<origin xyz="0 0 0" rpy="1.57079 0 0"/>
<geometry>
<sphere radius="0.016"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="1.57079 0 0"/>
<geometry>
<sphere radius="0.016"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</collision>
<inertial>
<mass value="0.02"/>
<inertia ixx="0.000190416666667" ixy="0" ixz="0" iyy="0.0001904" iyz="0" izz="0.00036"/>
</inertial>
</link>
<joint name="caster_joint" type="fixed">
<parent link="base_link" />
<child link="caster_link" />
<origin xyz="0.06 0.0 -0.076" />
<axis xyz="0 1 0" />
</joint>
<gazebo reference="caster_link">
<material>Gazebo/Black</material>
</gazebo>
<gazebo reference="caster_link">
<mu1 value="0.0"/>
<mu2 value="0.0"/>
<kp value="1000000.0" />
<kd value="10.0" />
<!-- <fdir1 value="0 0 1"/> -->
</gazebo>
<gazebo>
<plugin name='diff_drive' filename='libgazebo_ros_diff_drive.so'>
<ros>
<namespace>/</namespace>
<remapping>cmd_vel:=cmd_vel</remapping>
<remapping>odom:=odom</remapping>
</ros>
<update_rate>30</update_rate>
<!-- wheels -->
<left_joint>left_wheel_joint</left_joint>
<right_joint>right_wheel_joint</right_joint>
<!-- kinematics -->
<wheel_separation>0.2</wheel_separation>
<wheel_diameter>0.065</wheel_diameter>
<!-- limits -->
<max_wheel_torque>20</max_wheel_torque>
<max_wheel_acceleration>1.0</max_wheel_acceleration>
<!-- output -->
<publish_odom>true</publish_odom>
<publish_odom_tf>true</publish_odom_tf>
<publish_wheel_tf>false</publish_wheel_tf>
<odometry_frame>odom</odometry_frame>
<robot_base_frame>base_footprint</robot_base_frame>
</plugin>
<plugin name="lyprc_joint_state" filename="libgazebo_ros_joint_state_publisher.so">
<ros>
<remapping>~/out:=joint_states</remapping>
</ros>
<update_rate>30</update_rate>
<joint_name>right_wheel_joint</joint_name>
<joint_name>left_wheel_joint</joint_name>
</plugin>
</gazebo>
<gazebo reference="laser_link">
<material>Gazebo/Black</material>
</gazebo>
<gazebo reference="imu_link">
<sensor name="imu_sensor" type="imu">
<plugin filename="libgazebo_ros_imu_sensor.so" name="imu_plugin">
<ros>
<namespace>/</namespace>
<remapping>~/out:=imu</remapping>
</ros>
<initial_orientation_as_reference>false</initial_orientation_as_reference>
</plugin>
<always_on>true</always_on>
<update_rate>100</update_rate>
<visualize>true</visualize>
<imu>
<angular_velocity>
<x>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>2e-4</stddev>
<bias_mean>0.0000075</bias_mean>
<bias_stddev>0.0000008</bias_stddev>
</noise>
</x>
<y>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>2e-4</stddev>
<bias_mean>0.0000075</bias_mean>
<bias_stddev>0.0000008</bias_stddev>
</noise>
</y>
<z>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>2e-4</stddev>
<bias_mean>0.0000075</bias_mean>
<bias_stddev>0.0000008</bias_stddev>
</noise>
</z>
</angular_velocity>
<linear_acceleration>
<x>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>1.7e-2</stddev>
<bias_mean>0.1</bias_mean>
<bias_stddev>0.001</bias_stddev>
</noise>
</x>
<y>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>1.7e-2</stddev>
<bias_mean>0.1</bias_mean>
<bias_stddev>0.001</bias_stddev>
</noise>
</y>
<z>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>1.7e-2</stddev>
<bias_mean>0.1</bias_mean>
<bias_stddev>0.001</bias_stddev>
</noise>
</z>
</linear_acceleration>
</imu>
</sensor>
</gazebo>
<gazebo reference="laser_link">
<sensor name="laser_sensor" type="ray">
<always_on>true</always_on>
<visualize>true</visualize>
<update_rate>5</update_rate>
<pose>0 0 0.075 0 0 0</pose>
<ray>
<scan>
<horizontal>
<samples>360</samples>
<resolution>1.000000</resolution>
<min_angle>0.000000</min_angle>
<max_angle>6.280000</max_angle>
</horizontal>
</scan>
<range>
<min>0.120000</min>
<max>3.5</max>
<resolution>0.015000</resolution>
</range>
<noise>
<type>gaussian</type>
<mean>0.0</mean>
<stddev>0.01</stddev>
</noise>
</ray>
<plugin name="laserscan" filename="libgazebo_ros_ray_sensor.so">
<ros>
<!-- <namespace>/tb3</namespace> -->
<remapping>~/out:=scan</remapping>
</ros>
<output_type>sensor_msgs/LaserScan</output_type>
<frame_name>laser_link</frame_name>
</plugin>
</sensor>
</gazebo>
</robot>
gazebo仿真运行效果
运行指令
ros:galactic(1) noetic(2) ?
1
lyprc@lyprc-vm-ubuntu2004:~/LOVE/ROStest/ROSLAM_ws$ colcon build
Starting >>> absl
Starting >>> lyprc_cartographer
Starting >>> lyprc_description
Finished <<< lyprc_cartographer [0.58s]
Finished <<< absl [0.78s]
Finished <<< lyprc_description [1.62s]
Summary: 3 packages finished [2.61s]
lyprc@lyprc-vm-ubuntu2004:~/LOVE/ROStest/ROSLAM_ws$ source install/setup.bash
lyprc@lyprc-vm-ubuntu2004:~/LOVE/ROStest/ROSLAM_ws$ ros2 launch lyprc_description gazebo.launch.py
[INFO] [launch]: All log files can be found below /home/lyprc/.ros/log/2024-04-03-15-01-11-164272-lyprc-vm-ubuntu2004-2655
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [gazebo-1]: process started with pid [2657]
[INFO] [spawn_entity.py-2]: process started with pid [2659]
[INFO] [robot_state_publisher-3]: process started with pid [2661]
[INFO] [rviz2-4]: process started with pid [2663]
[robot_state_publisher-3] [WARN] [1712127671.602336654] [robot_state_publisher]: No robot_description parameter, but command-line argument available. Assuming argument is name of URDF file. This backwards compatibility fallback will be removed in the future.
[robot_state_publisher-3] Link base_link had 5 children
[robot_state_publisher-3] Link caster_link had 0 children
[robot_state_publisher-3] Link imu_link had 0 children
[robot_state_publisher-3] Link laser_link had 0 children
[robot_state_publisher-3] Link left_wheel_link had 0 children
[robot_state_publisher-3] Link right_wheel_link had 0 children
[robot_state_publisher-3] [INFO] [1712127671.673373107] [robot_state_publisher]: got segment base_footprint
[robot_state_publisher-3] [INFO] [1712127671.673469172] [robot_state_publisher]: got segment base_link
[robot_state_publisher-3] [INFO] [1712127671.673530713] [robot_state_publisher]: got segment caster_link
[robot_state_publisher-3] [INFO] [1712127671.673591054] [robot_state_publisher]: got segment imu_link
[robot_state_publisher-3] [INFO] [1712127671.673651094] [robot_state_publisher]: got segment laser_link
[robot_state_publisher-3] [INFO] [1712127671.673711435] [robot_state_publisher]: got segment left_wheel_link
[robot_state_publisher-3] [INFO] [1712127671.673771074] [robot_state_publisher]: got segment right_wheel_link
[spawn_entity.py-2] [INFO] [1712127672.371026930] [spawn_entity]: Spawn Entity started
[spawn_entity.py-2] [INFO] [1712127672.371484217] [spawn_entity]: Loading entity XML from file /home/lyprc/LOVE/ROStest/ROSLAM_ws/install/lyprc_description/share/lyprc_description/urdf/lyprc_gazebo.urdf
[spawn_entity.py-2] [INFO] [1712127672.377082939] [spawn_entity]: Waiting for service /spawn_entity, timeout = 5
[spawn_entity.py-2] [INFO] [1712127672.377476486] [spawn_entity]: Waiting for service /spawn_entity
[rviz2-4] [INFO] [1712127672.959204836] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-4] [INFO] [1712127672.960361664] [rviz2]: OpenGl version: 3.3 (GLSL 3.3)
[rviz2-4] [INFO] [1712127673.082845510] [rviz2]: Stereo is NOT SUPPORTED
[gazebo-1] Gazebo multi-robot simulator, version 11.11.0
[gazebo-1] Copyright (C) 2012 Open Source Robotics Foundation.
[gazebo-1] Released under the Apache 2 License.
[gazebo-1] http://gazebosim.org
[gazebo-1]
[gazebo-1] Gazebo multi-robot simulator, version 11.11.0
[gazebo-1] Copyright (C) 2012 Open Source Robotics Foundation.
[gazebo-1] Released under the Apache 2 License.
[gazebo-1] http://gazebosim.org
[gazebo-1]
[rviz2-4] Warning: Invalid frame ID "odom" passed to canTransform argument target_frame - frame does not exist
[rviz2-4] at line 156 in /tmp/binarydeb/ros-galactic-tf2-0.17.5/src/buffer_core.cpp
[rviz2-4] Warning: Invalid frame ID "odom" passed to canTransform argument target_frame - frame does not exist
[rviz2-4] at line 156 in /tmp/binarydeb/ros-galactic-tf2-0.17.5/src/buffer_core.cpp
。。。。。。。好多([rviz2-4] at line 156...)
大哥看这里
[spawn_entity.py-2] [INFO] [1712127675.267688990] [spawn_entity]: Spawn status: Entity pushed to spawn queue, but spawn service timed outwaiting for entity to appear in simulation under the name [lyprcbot]
[spawn_entity.py-2] [ERROR] [1712127675.268074590] [spawn_entity]: Spawn service failed. Exiting.
[rviz2-4] Warning: Invalid frame ID "odom" passed to canTransform argument target_frame - frame does not exist
[rviz2-4] at line 156 in /tmp/binarydeb/ros-galactic-tf2-0.17.5/src/buffer_core.cpp
。。。。。。。好多([rviz2-4] at line 156...)
[ERROR] [spawn_entity.py-2]: process has died [pid 2659, exit code 1, cmd '/opt/ros/galactic/lib/gazebo_ros/spawn_entity.py -entity lyprcbot -file /home/lyprc/LOVE/ROStest/ROSLAM_ws/install/lyprc_description/share/lyprc_description/urdf/lyprc_gazebo.urdf --ros-args'].
[gazebo-1] [INFO] [1712127675.927765017] [diff_drive]: Wheel pair 1 separation set to [0.200000m]
[gazebo-1] [INFO] [1712127675.930377570] [diff_drive]: Wheel pair 1 diameter set to [0.065000m]
[gazebo-1] [INFO] [1712127675.933248258] [diff_drive]: Subscribed to [/cmd_vel]
[gazebo-1] [INFO] [1712127675.938882877] [diff_drive]: Advertise odometry on [/odom]
[gazebo-1] [INFO] [1712127675.943610027] [diff_drive]: Publishing odom transforms between [odom] and [base_footprint]
。。。。。。。好多([rviz2-4] at line 156...)
[gazebo-1] [INFO] [1712127675.977996645] [lyprc_joint_state]: Going to publish joint [right_wheel_joint]
[gazebo-1] [INFO] [1712127675.978190445] [lyprc_joint_state]: Going to publish joint [left_wheel_joint]
。。。。。。。好多([rviz2-4] at line 156...)
[gazebo-1] [Msg] Waiting for master.
[gazebo-1] [Msg] Connected to gazebo master @ http://127.0.0.1:11345
[gazebo-1] [Msg] Publicized address: 192.168.164.130
[gazebo-1] context mismatch in svga_surface_destroy
[gazebo-1] context mismatch in svga_surface_destroy
[rviz2-4] [INFO] [1712127686.796322989] [rviz2]: Message Filter dropping message: frame 'laser_link' at time 255.566 for reason 'the timestamp on the message is earlier than all the data in the transform cache'
[gazebo-1]
[gazebo-1] libcurl: (35) OpenSSL SSL_connect: 连接被对方重设 in connection to fuel.ignitionrobotics.org:443
[gazebo-1]
[gazebo-1] libcurl: (7) Failed to connect to fuel.gazebosim.org port 443: 拒绝连接
gazebo效果
rviz 效果
tf树图
订阅图
gazebo仿真的主要警告
[rviz2-4] Warning: Invalid frame ID "odom" passed to canTransform argument target_frame - frame does not exist
[rviz2-4] at line 156 in /tmp/binarydeb/ros-galactic-tf2-0.17.5/src/buffer_core.cpp
安装配置运行Cartographer
安装是采取小鱼的一键安装
文件夹树
├── lyprc_cartographer
│ ├── CMakeLists.txt
│ ├── config
│ │ └── lyprc_2d.lua
│ ├── include
│ │ └── lyprc_cartographer
│ ├── launch
│ │ └── cartographer.launch.py
│ ├── package.xml
│ ├── rviz
│ └── src
配置文件
import os
from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare
def generate_launch_description():
# 定位到功能包的地址
pkg_share = FindPackageShare(package='lyprc_cartographer').find('lyprc_cartographer')
#=====================运行节点需要的配置=======================================================================
# 是否使用仿真时间,我们用gazebo,这里设置成true
use_sim_time = LaunchConfiguration('use_sim_time', default='true')
# 地图的分辨率
resolution = LaunchConfiguration('resolution', default='0.05')
# 地图的发布周期
publish_period_sec = LaunchConfiguration('publish_period_sec', default='1.0')
# 配置文件夹路径
configuration_directory = LaunchConfiguration('configuration_directory',default= os.path.join(pkg_share, 'config') )
# 配置文件
configuration_basename = LaunchConfiguration('configuration_basename', default='lyprc_2d.lua')
rviz_config_dir = os.path.join(pkg_share, 'config')+"/cartographer.rviz"
print(f"rviz config in {rviz_config_dir}")
#=====================声明三个节点,cartographer/occupancy_grid_node/rviz_node=================================
cartographer_node = Node(
package='cartographer_ros',
executable='cartographer_node',
name='cartographer_node',
output='screen',
parameters=[{'use_sim_time': use_sim_time}],
arguments=['-configuration_directory', configuration_directory,
'-configuration_basename', configuration_basename],
# remappings = [('scan','/laser')],
)
cartographer_occupancy_grid_node = Node(
package='cartographer_ros',
executable='occupancy_grid_node',
name='occupancy_grid_node',
output='screen',
parameters=[{'use_sim_time': use_sim_time}],
arguments=['-resolution', resolution, '-publish_period_sec', publish_period_sec],
)
rviz_node = Node(
package='rviz2',
executable='rviz2',
name='rviz2',
arguments=['-d', rviz_config_dir],
parameters=[{'use_sim_time': use_sim_time}],
output='screen',
)
#===============================================定义启动文件========================================================
ld = LaunchDescription()
ld.add_action(cartographer_node)
ld.add_action(cartographer_occupancy_grid_node)
ld.add_action(rviz_node)
return ld
lyprc_2d.lua
include "map_builder.lua"
include "trajectory_builder.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
tracking_frame = "base_link",
-- base_link改为odom,发布map到odom之间的位姿态
published_frame = "odom",
odom_frame = "odom",
-- true改为false,不用提供里程计数据
provide_odom_frame = false,
-- false改为true,仅发布2D位资
publish_frame_projected_to_2d = true,
-- false改为true,使用里程计数据
use_odometry = true,
use_nav_sat = false,
use_landmarks = false,
-- 0改为1,使用一个雷达
num_laser_scans = 1,
-- 1改为0,不使用多波雷达
num_multi_echo_laser_scans = 0,
-- 10改为1,1/1=1等于不分割
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.,
}
-- false改为true,启动2D SLAM
MAP_BUILDER.use_trajectory_builder_2d = true
-- 0改成0.10,比机器人半径小的都忽略
TRAJECTORY_BUILDER_2D.min_range = 0.10
-- 30改成3.5,限制在雷达最大扫描范围内,越小一般越精确些
TRAJECTORY_BUILDER_2D.max_range = 3.5
-- 5改成3,传感器数据超出有效范围最大值
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 3.
-- true改成false,不使用IMU数据,大家可以开启,然后对比下效果
TRAJECTORY_BUILDER_2D.use_imu_data = false
-- false改成true,使用实时回环检测来进行前端的扫描匹配
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
-- 1.0改成0.1,提高对运动的敏感度
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.1)
-- 0.55改成0.65,Fast csm的最低分数,高于此分数才进行优化。
POSE_GRAPH.constraint_builder.min_score = 0.65
--0.6改成0.7,全局定位最小分数,低于此分数则认为目前全局定位不准确
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.7
-- 设置0可关闭全局SLAM
-- POSE_GRAPH.optimize_every_n_nodes = 0
return options
运行指令及效果
lyprc@lyprc-vm-ubuntu2004:~/LOVE/ROStest/ROSLAM_ws$ colcon build
Starting >>> absl
Starting >>> lyprc_cartographer
Starting >>> lyprc_description
Finished <<< lyprc_cartographer [0.78s]
Finished <<< absl [1.05s]
Finished <<< lyprc_description [1.54s]
Summary: 3 packages finished [2.09s]
lyprc@lyprc-vm-ubuntu2004:~/LOVE/ROStest/ROSLAM_ws$ source install/setup.bash
lyprc@lyprc-vm-ubuntu2004:~/LOVE/ROStest/ROSLAM_ws$ ros2 launch lyprc_cartographer cartographer.launch.py
[INFO] [launch]: All log files can be found below /home/lyprc/.ros/log/2024-04-03-15-57-20-722215-lyprc-vm-ubuntu2004-15614
[INFO] [launch]: Default logging verbosity is set to INFO
rviz config in /home/lyprc/LOVE/ROStest/ROSLAM_ws/install/lyprc_cartographer/share/lyprc_cartographer/config/cartographer.rviz
[INFO] [cartographer_node-1]: process started with pid [15622]
[INFO] [occupancy_grid_node-2]: process started with pid [15624]
[INFO] [rviz2-3]: process started with pid [15626]
[cartographer_node-1] [INFO] [1712131041.004654099] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/home/lyprc/LOVE/ROStest/ROSLAM_ws/install/lyprc_cartographer/share/lyprc_cartographer/config/lyprc_2d.lua' for 'lyprc_2d.lua'.
[cartographer_node-1] [INFO] [1712131041.005447761] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/opt/ros/galactic/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'.
[cartographer_node-1] [INFO] [1712131041.005544856] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/opt/ros/galactic/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'.
[cartographer_node-1] [INFO] [1712131041.005660751] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/opt/ros/galactic/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'.
[cartographer_node-1] [INFO] [1712131041.005730147] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/opt/ros/galactic/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'.
[cartographer_node-1] [INFO] [1712131041.006216924] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/opt/ros/galactic/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'.
[cartographer_node-1] [INFO] [1712131041.006685002] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/opt/ros/galactic/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'.
[cartographer_node-1] [INFO] [1712131041.007238775] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/opt/ros/galactic/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'.
[cartographer_node-1] [INFO] [1712131041.007327371] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/opt/ros/galactic/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'.
[cartographer_node-1] [INFO] [1712131041.007480964] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/opt/ros/galactic/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'.
[cartographer_node-1] [INFO] [1712131041.007553060] [cartographer_ros]: I0403 15:57:21.000000 15622 configuration_file_resolver.cc:41] Found '/opt/ros/galactic/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'.
[cartographer_node-1] [INFO] [1712131041.148905592] [cartographer_ros]: I0403 15:57:21.000000 15622 submap_2d.cc:187] Added submap 1
[cartographer_node-1] [INFO] [1712131041.149095083] [cartographer_ros]: I0403 15:57:21.000000 15622 map_builder_bridge.cc:132] Added trajectory with ID '0'.
[cartographer_node-1] Warning: Invalid frame ID "base_link" passed to canTransform argument target_frame - frame does not exist
[cartographer_node-1] at line 156 in /tmp/binarydeb/ros-galactic-tf2-0.17.5/src/buffer_core.cpp
[cartographer_node-1] [INFO] [1712131041.208839523] [cartographer_ros]: I0403 15:57:21.000000 15622 ordered_multi_queue.cc:172] All sensor data for trajectory 0 is available starting at '621355988732800000'.
[cartographer_node-1] [INFO] [1712131041.209073512] [cartographer_ros]: I0403 15:57:21.000000 15622 local_trajectory_builder_2d.cc:295] Extrapolator not yet initialized.
[cartographer_node-1] [WARN] [1712131041.211820980] [cartographer_ros]: W0403 15:57:21.000000 15622 pose_extrapolator.cc:168] Queue too short for velocity estimation. Queue duration: 0 ms
[occupancy_grid_node-2] [WARN] [1712131042.003545074] [occupancy_grid_node]: submap_slices and last_frame_id is empty
[rviz2-3] [INFO] [1712131042.605491716] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-3] [INFO] [1712131042.605837599] [rviz2]: OpenGl version: 3.3 (GLSL 3.3)
[rviz2-3] [INFO] [1712131042.720081141] [rviz2]: Stereo is NOT SUPPORTED
[occupancy_grid_node-2] [WARN] [1712131043.003230614] [occupancy_grid_node]: submap_slices and last_frame_id is empty
[occupancy_grid_node-2] [WARN] [1712131044.003080849] [occupancy_grid_node]: submap_slices and last_frame_id is empty
rviz和tf树及订阅关系图
错误表现 :运行slam后的rviz里的map显示Frame [map] does not exist
框架[map]不存在
球球各位好心人麻烦给小弟看看吧,小弟已经被折磨死了