ros 雷达 slam 导航
2022-04-05 15:44 jym蒟蒻 阅读(592) 评论(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"