ros 雷达 slam 导航
2022-04-05 15:44 jym蒟蒻 阅读(790) 评论(0) 收藏 举报ros 雷达 slam 导航 文件分析
- robot_slam_laser.launch
- robot_lidar.launch
- lidar.launch
- raplidar.launch
- karto.launch
- gmapping.launch
- cartographer.launch
- robot_navigation.launch
- map.yaml
- map.pgm
- amcl_params.yaml
- move_base.launch
- costmap_common_params.yaml
- local_costmap_params.yaml
- global_costmap_params.yaml
- move_base_params.yaml:
- dwa_local_planner_params.yaml
- teb_local_planner_params.yaml
- 多点导航
- multi_points_navigation.launch
- multi_navigation.launch
- multi_goal_point.py:
- 多点全自动巡航
- way_point.launch
- multi_goal_point.py
lidar文件夹下面有多个雷达功能包。
还包括一个udev规则转换脚本。雷达使用cp2102usb转串口芯片。
多个设备通过usb连主机,很难分辨各个端口名所对应的设备。
给USB 转串口的芯片设定规则,根据芯片的 Vender ID 和 Product ID 进行筛选。读取到芯片后做一个符号链接,链接到对应端口。取名为rplidar等。
initenv.sh
#!/bin/bash
echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="hldslidar"' >/etc/udev/rules.d/hldslidar.rules
echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", GROUP:="dialout",  SYMLINK+="ydlidar"' >/etc/udev/rules.d/ydlidar.rules
echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", GROUP:="dialout",  SYMLINK+="iiilidar"' >/etc/udev/rules.d/iiilidar.rules
echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", GROUP:="dialout",  SYMLINK+="rplidar"' >/etc/udev/rules.d/rplidar.rules
echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", GROUP:="dialout",  SYMLINK+="sclidar"' >/etc/udev/rules.d/sclidar.rules
systemctl daemon-reload
service udev reload
sleep 1
service udev restart
robot_navigation这个文件夹很重要。
robot:
roslaunch robot_navigation lidar.launch  启动雷达
PC:
roslaunch robot_navigation lidar_rviz.launch  运行rviz工具
robot:
roslaunch robot_navigation robot_slam_laser.launch  激光雷达slam建图
pc:
roslaunch robot_navigation slam_rviz.launch
robot:保存地图
roscd robot_navigation/maps
rosrun map_server map_saver -f map
robot:
roslaunch robot_navigation robot_navigation.launch   导航和避障
pc:
roslaunch robot_navigation navigation_rviz.launch  
robot:
roslaunch robot_navigation robot_slam_laser.launch slam_methods:=hector 建图算法切换
pc:
roslaunch robot_navigation navigation_rviz.launch
robot:
roslaunch robot_navigation robot_navigation.launch planner:=dwa 路径规划算法切换
robot:
roslaunch robot_navigation robot_slam_laser.launch planner:=teb 导航建图
pc:
roslaunch robot_navigation slam_rviz.launch
文件里面包含:
rviz文件夹:rviz相关配置文件
maps文件夹:地图文件和地图配置信息相关的文件
param文件夹:yaml文件
launch文件夹
script文件夹:脚本文件
launch文件夹里面:
includes文件夹:建图算法的launch文件
lidar文件夹:雷达的launch文件
rviz文件夹:rviz的launch文件
robot_slam_laser.launch:
这里面主要就是launch文件的循环调用,比如,通过robot_slam_laser.launch文件调用了robot_lidar.launch文件。
这样做的好处是具有模块化。可以避免重复启动多个节点。
<launch>
  <!-- Arguments -->
  
  <arg name="slam_methods" default="gmapping" doc="slam type [gmapping, hector, karto, cartographer]"/><!-- 可传入参数slam_methods,选择SLAM建图算法 -->
  <arg name="open_rviz" default="false"/>
  <arg name="simulation" default= "false"/> <!-- 判断启动实体机器人还是 stage 仿真器 -->
  <arg name="planner"  default="" doc="opt: dwa, teb"/> <!-- 无地图环境下边建图边导航,可选参数为dwa、teb局部路径规划器 -->
  <param name="/use_sim_time" value="$(arg simulation)" />  
  <!-- simulation robot with lidar and map -->
  <!-- simulation为true 时启动仿真软件运行仿真机器人-->
  <group if="$(arg simulation)">
    <include file="$(find robot_simulation)/launch/simulation_one_robot.launch"/>
  </group>
  <!-- robot with lidar -->
  <!--simulation为false 启动launch文件夹下的robot_lidar.launch-->
  <group unless="$(arg simulation)">
    <include file="$(find robot_navigation)/launch/robot_lidar.launch"/>
  </group>
  <!-- SLAM: Gmapping, Cartographer, Hector, Karto -->
  <!-- 根据 slam_methods 参数选用不同的建图算法 -->
  <include file="$(find robot_navigation)/launch/includes/$(arg slam_methods).launch">
    <arg name="simulation"            value="$(arg simulation)"/>
  </include>
  <!-- move_base 无地图环境下导航建图功能,传入planner参数为dwa或teb,就会启动导航堆栈-->
  <group unless="$(eval planner == '')"><!--启动move_base.launch-->
    <include file="$(find robot_navigation)/launch/move_base.launch" unless="$(eval planner == '')">
        <arg name="planner"            value="$(arg planner)"/>
    </include>
  </group>
    
  <!--因为gmapping会发布map话题,这里不用启动地图服务器从本地读取地图也可以正常导航-->
  <!-- rviz open_rviz 参数为 true时,打开rviz-->
  <group if="$(arg open_rviz)"> 
    <node pkg="rviz" type="rviz" name="rviz"  
                    
                     
                    
                