1. 添加机器人的urdf文件
我是选择新建了一个urdf文件(命名为my_robot.urdf)
imu的link name选择ah100b发布的imu数据的frame_id
<!--
Copyright 2016 The Cartographer Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<robot name="zeus_x3">
<material name="orange">
<color rgba="1.0 0.5 0.2 1" />
</material>
<material name="gray">
<color rgba="0.2 0.2 0.2 1" />
</material>
<link name="imu">
<visual>
<origin xyz="0.0 0.0 0.0" />
<geometry>
<box size="0.06 0.04 0.02" />
</geometry>
<material name="orange" />
</visual>
</link>
<link name="laser_link">
<visual>
<origin xyz="0.0 0.0 0.0" />
<geometry>
<cylinder length="0.07" radius="0.05" />
</geometry>
<material name="gray" />
</visual>
</link>
<link name="base_footprint" />
<joint name="imu_link_joint" type="fixed">
<parent link="base_footprint" />
<child link="imu" />
<origin xyz="-0.2 0 0.2" rpy="3.1416 0 0" />
</joint>
<joint name="laser_link_joint" type="fixed">
<parent link="base_footprint" />
<child link="laser_link" />
<origin xyz="-0.405 0 0.73626" rpy="0. 0. 3.1416" />
</joint>
</robot>
2. 修改install_isolated/share/cartographer_ros/configuration_files和src/cartographer_ros/cartographer_ros/configuration_files路径下的lua文件
同样是选择新建了一个lua文件(命名为my_robot.lua)
-- Copyright 2016 The Cartographer Authors
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
include "map_builder.lua"
include "trajectory_builder.lua"
--include "revo_lds.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
--tracking_frame = "base_link", 进行SLAM的坐标系,如果有IMU的话为IMU坐标系,没有的话就是base_link或者base_footprint
--published_frame = "base_link", cato发布的坐标系
tracking_frame = "imu",
published_frame = "base_footprint",
odom_frame = "odom", --里程计数据的坐标系名称
provide_odom_frame = true, --使用外部/odom,所以这里不需要内部提供(是否发布里程计坐标系)
publish_frame_projected_to_2d = false,
use_pose_extrapolator = true,
--use_odometry = false,
use_odometry = false, --是否使用odom数据
use_nav_sat = false, --是否使用gps数据
use_landmarks = false,
--num_laser_scans = 0, by weiyang
--num_multi_echo_laser_scans = 1, by weiyang
num_laser_scans = 1, --如果使用的是单线雷达,此处为雷达的数量
num_multi_echo_laser_scans = 0,
--num_subdivisions_per_laser_scan = 10,
num_subdivisions_per_laser_scan = 1, --将雷达一帧的数据分成几次发出来,对于普通雷达的驱动包来说,此处应为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., --下面的五个参数为5种观测的权重比
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 --使2d还是3d的SLAM
--TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35
--TRAJECTORY_BUILDER_2D.min_range = 0.3
--TRAJECTORY_BUILDER_2D.max_range = 8.
--TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
--TRAJECTORY_BUILDER_2D.use_imu_data = true --使用IMU数据
--TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
--TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
--TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_we--ight = 10.
--TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1
--TRAJECTORY_BUILDER.collate_landmarks = true
--POSE_GRAPH.optimization_problem.huber_scale = 1e2
--POSE_GRAPH.optimize_every_n_nodes = 35
--POSE_GRAPH.constraint_builder.min_score = 0.65
return options
注释掉的部分是因为我在机器人上测试的时候,有没有这几句话都能够使用(暂时只做到了能够使用,可这些参数可能和优化部分相关,待下一步研究)
3. 修改install_isolated/share/cartographer_ros//launch和src/cartographer_ros/cartographer_ros/launch下的launch文件
新建my_robot.launch和demo_my_robot.launch文件
my_robot.launch:
<!--
Copyright 2016 The Cartographer Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<launch>
<param name="robot_description"
textfile="$(find zeus_x3_description)/urdf/my_robot.urdf" />
<!--"$(find cartographer_ros)/urdf/backpack_2d.urdf"-->
<node name="robot_state_publisher" pkg="robot_state_publisher"
type="robot_state_publisher" />
<node name="cartographer_node" pkg="cartographer_ros"
type="cartographer_node" args="
-configuration_directory $(find cartographer_ros)/configuration_files
-configuration_basename my_robot.lua"
output="screen">
<remap from="scan" to="/scan" />
<remap from="imu" to="/imu" />
</node>
<node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
</launch>
demo_my_robot.launch:
<!--
Copyright 2016 The Cartographer Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<launch>
<param name="/use_sim_time" value="false" />
<include file="$(find ah100b)/launch/imu.launch" />
<include file="$(find bunker_bringup)/launch/lslidar.launch" />
<include file="$(find cartographer_ros)/launch/my_robot.launch" />
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
</launch>