建图完成后,就可以根据自己建立的地图进行2d的slam啦~
废话不多说,下面放教程:
- 新建激光雷达的launch启动文件
roscd rslidar_pointcloud/
cd launch
gedit my_slidar_16_2dlaser.launch
然后把下面的内容放到这个launch中去。
<?xml version="1.0"?>
<launch>
<arg name="model" default="RS16" />
<arg name="device_ip" default="192.168.1.200" />
<arg name="msop_port" default="6699" />
<arg name="difop_port" default="7788" />
<arg name="cut_angle" default="0" doc="If set at [0, 360), cut at specific angle feature activated, otherwise use the fixed packets number mode."/>
<arg name="lidar_param_path" default="$(find rslidar_pointcloud)/data/rs_lidar_16/"/>
<node name="rslidar_node" pkg="rslidar_driver" type="rslidar_node" output="screen" >
<param name="model" value="$(arg model)"/>
<param name="device_ip" value="$(arg device_ip)" />
<param name="msop_port" value="$(arg msop_port)" />
<param name="difop_port" value="$(arg difop_port)"/>
<param name="cut_angle" value="$(arg cut_angle)"/>
<!--param name="pcap" value="path_to_pcap"/-->
</node>
<node name="cloud_node" pkg="rslidar_pointcloud" type="cloud_node" output="screen" >
<param name="model" value="$(arg model)"/>
<param name="curves_path" value="$(arg lidar_param_path)/curves.csv" />
<param name="angle_path" value="$(arg lidar_param_path)/angle.csv" />
<param name="channel_path" value="$(arg lidar_param_path)/ChannelNum.csv" />
<param name="max_distance" value="200"/>
<param name="min_distance" value="0.4"/>
<param name="resolution_type" value="0.5cm"/>
<param name="intensity_mode" value="1"/>
</node>
<node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.45 0 0.0 0.0 base_link laser 100"/>
</launch>
调到这里,其实路上遇到了很多坑,比如turtlebot_navigation包自带一个rslidar的2d启动文件,我尝试对比后发现,缺少了很多配置,导致那个文件无法使用,为了保证官方的源文件正确,这里就直接复制黏贴出来重新创了一个launch文件。
-
新建一个包罗万象的launch文件打开之前建立的所有有用的节点
roscd turbot_slam/launch/amcl
gedit rslidar_amcl_test.launch
这里的launch文件的建立具有非常大的随意性,我只是在参考各类博文和资料的时候,顺手建立在这个地方而已,如果大家没有turbot的这个包,应该也无所谓。只是我在使用amcl和movebase的时候参考了这个文件夹内的其他demo文件,所以为了对比方便,就建在这个地方。理论上这个launch文件可以放在任何地方,包括自己的工作空间内。
下面放launch文件的内容:
<?xml version="1.0"?>
<!-- Create by chenchen -->
<!-- Time : 2020-08-06 -->
<launch>
<!-- Define laser type-->
<arg name="laser_type" default="rslidar_16" />
<!-- laser driver -->
<!-- start robosense -->
<!--include file="$(find turtlebot_navigation)/laser/driver/$(arg laser_type)_laser.launch" /-->
<include file="$(find turtlebot_bringup)/launch/minimal.launch"/>
<include file="$(find rslidar_pointcloud)/launch/my_slidar_16_2dlaser.launch" />
<include file="$(find pointcloud_to_laserscan)/launch/point_to_scan.launch" />
<!-- Map server -->
<arg name="map_file" default="/home/turtlebot/my_guiji.yaml"/>
<node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" />
<!-- AMCL -->
<arg name="custom_amcl_launch_file" default="$(find turtlebot_navigation)/launch/includes/amcl/rplidar_amcl.launch.xml"/>
<arg name="initial_pose_x" default="0.0"/> <!-- Use 17.0 for willow's map in simulation -->
<arg name="initial_pose_y" default="0.0"/> <!-- Use 17.0 for willow's map in simulation -->
<arg name="initial_pose_a" default="0.0"/>
<include file="$(arg custom_amcl_launch_file)">
<arg name="initial_pose_x" value="$(arg initial_pose_x)"/>
<arg name="initial_pose_y" value="$(arg initial_pose_y)"/>
<arg name="initial_pose_a" value="$(arg initial_pose_a)"/>
</include>
<!--two tf publisher info can't be add-->
<!--node pkg="tf" type="static_transform_publisher" name="baselink_to_laser" args="0 0 0 0 0 0 /base_link /laser 100" /-->
<!--node pkg="tf" type="static_transform_publisher" name="map_to_odom" args="0 0 0 0 0 0 map odom 100" /-->
<!-- movebase-->
<arg name="custom_param_file" default="$(find turtlebot_navigation)/param/rplidar_costmap_params.yaml"/>
<include file="$(find turtlebot_navigation)/launch/includes/move_base/laser_move_base.launch.xml">
<arg name="custom_param_file" value="$(arg custom_param_file)"/>
</include>
<node pkg = "rviz" type = "rviz" name = "rviz"
args = "-d $(find guijigenzong)/rviz/rslidar_slam.rviz"/>
</launch>
先简单介绍一下这个launch文件的内容,前三个include分别是turtlebot的底盘启动文件,激光雷达启动文件,3d转2d启动文件的路径,然后是mapsever,也就是地图服务器的打开,这里的地图指定需要改成自己建好的图,当然如果你想做的更官方一点,可以使用arg去定义一些量。接下去是amcl节点的打开,下面是一些配置,比如机器人的初始位姿信息。接着是movebase节点的启动。这里的amcl和movebase的各类配置文件,都采用的是rplidar turtlebot的配置,因为只是修改了激光雷达的使用,所以我感觉应该是通用的,如果在自己的机器上跑感觉效果较一般,想要改进,可以考虑修改一些配置来获得较好的结果(这里可以参考一些别人的调参经验)。
注意:最后的node rviz调用了一个rviz的配置文件,这里的guijigenzong是本人的工作空间内的一个包名,大家的工控机里一定没有,所以大家可以自行指定这里的路径。由于csdn没有办法发附件,在ubuntu系统内又登录不上百度网盘,所以这里我把.rviz文件的内容直接复制黏贴了上来,大家可以自己配置,也可以直接使用我的rviz文件。
Panels:
- Class: rviz/Displays
Help Height: 78
Name: Displays
Property Tree Widget:
Expanded:
- /Global Options1
- /Status1
- /LaserScan1
- /Map1
- /PointCloud21
- /Map2
- /Map3
Splitter Ratio: 0.5
Tree Height: 565
- Class: rviz/Selection
Name: Selection
- Class: rviz/Tool Properties
Expanded:
- /2D Pose Estimate1
- /2D Nav Goal1
- /Publish Point1
Name: Tool Properties
Splitter Ratio: 0.588679016
- Class: rviz/Views
Expanded:
- /Current View1
Name: Views
Splitter Ratio: 0.5
- Class: rviz/Time
Experimental: false
Name: Time
SyncMode: 0
SyncSource: LaserScan
Toolbars:
toolButtonStyle: 2
Visualization Manager:
Class: ""
Displays:
- Alpha: 0.5
Cell Size: 1
Class: rviz/Grid
Color: 160; 160; 164
Enabled: true
Line Style:
Line Width: 0.0299999993
Value: Lines
Name: Grid
Normal Cell Count: 0
Offset:
X: 0
Y: 0
Z: 0
Plane: XY
Plane Cell Count: 10
Reference Frame: <Fixed Frame>
Value: true
- Alpha: 1
Autocompute Intensity Bounds: true
Autocompute Value Bounds:
Max Value: 0.460200012
Min Value: 0.460200012
Value: true
Axis: Z
Channel Name: intensity
Class: rviz/LaserScan
Color: 255; 255; 255
Color Transformer: AxisColor
Decay Time: 0
Enabled: true
Invert Rainbow: false
Max Color: 255; 255; 255
Max Intensity: 47
Min Color: 0; 0; 0
Min Intensity: 47
Name: LaserScan
Position Transformer: XYZ
Queue Size: 10
Selectable: true
Size (Pixels): 3
Size (m): 0.00999999978
Style: Points
Topic: /scan
Unreliable: false
Use Fixed Frame: true
Use rainbow: true
Value: true
- Alpha: 0.699999988
Class: rviz/Map
Color Scheme: map
Draw Behind: false
Enabled: true
Name: Map
Topic: /map
Unreliable: false
Use Timestamp: false
Value: true
- Alpha: 1
Class: rviz/RobotModel
Collision Enabled: false
Enabled: true
Links:
All Links Enabled: true
Expand Joint Details: false
Expand Link Details: false
Expand Tree: false
Link Tree Style: Links in Alphabetic Order
base_footprint:
Alpha: 1
Show Axes: false
Show Trail: false
base_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
camera_depth_frame:
Alpha: 1
Show Axes: false
Show Trail: false
camera_depth_optical_frame:
Alpha: 1
Show Axes: false
Show Trail: false
camera_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
camera_rgb_frame:
Alpha: 1
Show Axes: false
Show Trail: false
camera_rgb_optical_frame:
Alpha: 1
Show Axes: false
Show Trail: false
caster_back_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
caster_front_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
cliff_sensor_front_link:
Alpha: 1
Show Axes: false
Show Trail: false
cliff_sensor_left_link:
Alpha: 1
Show Axes: false
Show Trail: false
cliff_sensor_right_link:
Alpha: 1
Show Axes: false
Show Trail: false
gyro_link:
Alpha: 1
Show Axes: false
Show Trail: false
mount_asus_xtion_pro_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
plate_bottom_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
plate_middle_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
plate_top_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_bottom_0_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_bottom_1_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_bottom_2_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_bottom_3_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_bottom_4_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_bottom_5_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_kinect_0_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_kinect_1_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_middle_0_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_middle_1_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_middle_2_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_middle_3_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_top_0_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_top_1_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_top_2_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
pole_top_3_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
wheel_left_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
wheel_right_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
Name: RobotModel
Robot Description: robot_description
TF Prefix: ""
Update Interval: 0
Value: true
Visual Enabled: true
- Alpha: 1
Autocompute Intensity Bounds: true
Autocompute Value Bounds:
Max Value: 2.69588876
Min Value: -0.0626194477
Value: true
Axis: Z
Channel Name: intensity
Class: rviz/PointCloud2
Color: 255; 255; 255
Color Transformer: AxisColor
Decay Time: 0
Enabled: true
Invert Rainbow: false
Max Color: 255; 255; 255
Max Intensity: 255
Min Color: 0; 0; 0
Min Intensity: 1.61684775
Name: PointCloud2
Position Transformer: XYZ
Queue Size: 10
Selectable: true
Size (Pixels): 3
Size (m): 0.00999999978
Style: Spheres
Topic: /rslidar_points
Unreliable: false
Use Fixed Frame: true
Use rainbow: true
Value: true
- Alpha: 0.699999988
Class: rviz/Map
Color Scheme: map
Draw Behind: false
Enabled: false
Name: Map
Topic: /move_base/global_costmap/costmap
Unreliable: false
Use Timestamp: false
Value: false
- Alpha: 0.699999988
Class: rviz/Map
Color Scheme: costmap
Draw Behind: false
Enabled: true
Name: Map
Topic: /move_base/local_costmap/costmap
Unreliable: false
Use Timestamp: false
Value: true
Enabled: true
Global Options:
Background Color: 48; 48; 48
Default Light: true
Fixed Frame: map
Frame Rate: 30
Name: root
Tools:
- Class: rviz/Interact
Hide Inactive Objects: true
- Class: rviz/MoveCamera
- Class: rviz/Select
- Class: rviz/FocusCamera
- Class: rviz/Measure
- Class: rviz/SetInitialPose
Topic: /initialpose
- Class: rviz/SetGoal
Topic: /move_base_simple/goal
- Class: rviz/PublishPoint
Single click: true
Topic: /clicked_point
Value: true
Views:
Current:
Class: rviz/Orbit
Distance: 8.50367165
Enable Stereo Rendering:
Stereo Eye Separation: 0.0599999987
Stereo Focal Distance: 1
Swap Stereo Eyes: false
Value: false
Focal Point:
X: -0.498540431
Y: -0.287057936
Z: 0.382327557
Focal Shape Fixed Size: true
Focal Shape Size: 0.0500000007
Invert Z Axis: false
Name: Current View
Near Clip Distance: 0.00999999978
Pitch: 1.33979702
Target Frame: <Fixed Frame>
Value: Orbit (rviz)
Yaw: 6.23359585
Saved: ~
Window Geometry:
Displays:
collapsed: false
Height: 846
Hide Left Dock: false
Hide Right Dock: false
QMainWindow State: 000000ff00000000fd00000004000000000000016a000002c4fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006100fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000002c4000000d700fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002c4fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a005600690065007700730100000028000002c4000000ad00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004b00000003efc0100000002fb0000000800540069006d00650100000000000004b00000030000fffffffb0000000800540069006d006501000000000000045000000000000000000000022b000002c400000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
Selection:
collapsed: false
Time:
collapsed: false
Tool Properties:
collapsed: false
Views:
collapsed: false
Width: 1200
X: 101
Y: 26
直接新建一个然后复制黏贴就好了,当然自己配置也可以,这个是很方便的。
下面贴一个终极结果图:
为了展示所有的效果,我把除了global_costmap之外的效果都打开了,然后也微调了一下颜色线条之类的,可以看到机器人根据amcl可以较准确估计位姿信息,也可以直接通过rviz进行导航。
完结撒花~
如果在整个调试的过程中遇到任何问题,欢迎与本人交流,在csdn的私信我可能不会看。大家可以通过加我的QQ与我联系:649660368 注明来意哦~