学习使用turtlebot2——turtlebot2上使用Hokuyo激光雷达(型号UST-10LX)

目标

    在turtlebot2上添加Hokuyo激光雷达传感器,使用激光雷达调用gmapping进行建图。

配置情况

    电脑使用Ubuntu 14.04版本,ROS为 Indigo,激光雷达为Hokuyo(型号UST-10LX,网口型接口) 

PS:

    如果ROS上没配置好Hokuyo,参照我上一篇博客进行配置

https://blog.csdn.net/weixin_42670641/article/details/81009693

思路:

    怎么将激光雷达安装在turtlebot上使用?

    第一步:首先通过上一篇博客知道,在ROS上使用UST-10LX,要使用urg_node节点通过输入相应的IP地址进行调用,那就要在电脑连接turtlebot时同时启动节点urg_node,并且连上激光雷达的IP。那第一步要修改的便是turtlebot的启动文件minimal.launch,默认的文件位于/opt/ros/indigo/share/turtlebot_bringup/launch/minimal.launch。做法是增加一个控制激光雷达的节点,里面包括激光雷达的ip地址,连接端口,坐标系的转换关系,检测角度范围等信息。

    第二步:通过在启动文件增加节点,已经启动了激光雷达,那就要想着怎么将激光雷达的模型连接在turtlebot上。那就要在turtlebot_description功能包上增添上激光雷达的模型。查看路径/opt/ros/indigo/share/turtlebot_description/urdf/sensors里面可以看到其他已经有的传感器模型,仿照编写自己的hokuyo.urdf.xarcro(激光雷达的模型)。

    编写模型后,怎么让turtlebot找到传感器模型?

    打开/opt/ros/indigo/share/turtlebot_description/urdf/turtlebot_library.urdf.xacro,可以看到其他传感器通过这里,通过链接命令使得turtlebot找到相应模型所在的位置。

    找到传感器模型后,怎么连接上turtlebot?

  打开/opt/ros/indigo/share/turtlebot_description/robots/kobuki_hexagons_kinect.urdf.xacro,可以看到传感器连接到了base_link坐标上,仿照着设置。

    第三步,配置完模型后,想使用turtlebot的turtlebot_navigation包进行导航,在避障时move_base的节点的costmap中要增加障碍来源。因为costmap 默认扫描数据来自/scan,增加一个sensor需要在障碍配置过程中增加一个来源。新增加一个 scan_kinect,然后costmap在扫描障碍时就可以同时接收两个scan sensor的障碍数据了。见文件turtlebot_navigation/param/costmap_common_params.yaml

下面介绍具体操作:

1、在minimal.launch中添加hokuyo的节点信息

#找到自己minimal.launch的位置,我的安装在默认路径。一般情况下opt下文件不可更改,有访问权限,使用sudo chmod -R /opt更改其访问权限,使所有人可以更改
sudo  gedit  /opt/ros/indigo/share/turtlebot_bringup/launch/minimal.launch
#在打开的minimal.launch文件中,加入以下内容
 <node name="hokuyo_urg_node" pkg="urg_node" type="urg_node">
    <param name="ip_address" value="192.168.1.181" />
    <param name="ip_port" value="10940" />
    <param name="frame_id" value="base_link"/>
    <param name="calibrate_time" type="bool" value="true"/>
    <param name="intensity" type="bool" value="false"/>
    <param name="min_ang" value="-2.356194437"/>
    <param name="max_ang" value="2.35619443"/>
    <param name="cluster" value="1"/>
  </node>

2、编写hokuyo激光雷达的模型文件

#创建一个模型文件
cd /opt/ros/indigo/share/turtlebot_description/urdf/sensors
mkdir hokuyo.urdf.xacro
gedit hokuyo.urdf.xacro
#写入下面内容
<?xml version="1.0"?>
<robot name="sensor_hokuyo" xmlns:xacro="http://ros.org/wiki/xacro">
   <xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_gazebo.urdf.xacro"/>
    <xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_properties.urdf.xacro"/>

<!-- Set location of lidar as parameters. distance from center of bottom of kobuki base in meters -->
<xacro:macro name="sensor_hokuyo" params="parent">
 <joint name="laser" type="fixed">
  <origin yz="0.08 0.46 0.0" rpy="0 0 0" />
  <parent link="${parent}"/>
  <child link="base_laser_link" />
 </joint>

<link name="base_laser_link">
 <visual>
  <geometry>
   <box size="0.00 0.05 0.06" />
  </geometry>
  <material name="Green" />
 </visual>
 <inertial>
  <mass value="0.000001" />
  <origin xyz="0 0 0" />
  <inertia ixx="0.0001" ixy="0.0" ixz="0.0" iyy="0.0001" iyz="0.0" izz="0.0001" />
 </inertial>
 </link>
 </xacro:macro>
</robot

3、让turtlebot找到传感器模型

gedit /opt/ros/indigo/share/turtlebot_description/urdf/turtlebot_library.urdf.xacro
#添加下面语句
<xacro:include filename="$(find turtlebot_description)/urdf/sensors/hokuyo.urdf.xacro"/>

4、连接上turtlebot

gedit /opt/ros/indigo/share/turtlebot_description/robots/kobuki_hexagons_kinect.urdf.xacro
#添加雷达的连接
<?xml version="1.0"?>
<!--
    - Base      : kobuki
    - Stacks    : hexagons
    - 3d Sensor : kinect
    - lidar     : hokuyo
-->    
<robot name="turtlebot" xmlns:xacro="http://ros.org/wiki/xacro">

  <xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_common_library.urdf.xacro" />
  <xacro:include filename="$(find kobuki_description)/urdf/kobuki.urdf.xacro" />
  <xacro:include filename="$(find turtlebot_description)/urdf/stacks/hexagons.urdf.xacro"/>
  <xacro:include filename="$(find turtlebot_description)/urdf/sensors/kinect.urdf.xacro"/>
  <xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_library.urdf.xacro" />
  <kobuki/>
  <stack_hexagons parent="base_link"/>
  <sensor_kinect  parent="base_link"/>
  <sensor_hokuyo  parent="base_link"/>

5、在避障时move_base node的costmap中增加障碍来源

gedit /opt/ros/indigo/share/turtlebot_navigation/param/costmap_common_params.yaml
 z_voxels: 2
  publish_voxel_map: false
  observation_sources:  scan bump  hokuyo   #增加了一个障碍扫描源hokuyo
  scan:
    data_type: LaserScan
    topic: scan
    marking: true
    clearing: true
    min_obstacle_height: 0.25
    max_obstacle_height: 0.35
  bump:
    data_type: PointCloud2
    topic: mobile_base/sensors/bumper_pointcloud
    marking: true
    clearing: false
    min_obstacle_height: 0.0
    max_obstacle_height: 0.15
  hokuyo:                        #增加的hokuyo的参数
    data_type:LaserScan
    topic:scan
    marking:true
    clearing:true
    min_obstacle_height:0.0       #需修改,取决于sensor的实际高度
    max_obstacle_height:0.5       #需修改,取决于sensor的实际高度
  # for debugging only, let's you see the entire voxel grid

文件修改完后,使用下面命令开始建图。

roslaunch turtlebot_bringup minimal.launch                   #启动turtlebot
roslaunch turtlebot_navigation gmapping_demo.launch          #启动建图

roslaunch turtlebot_rviz_launchers view_navigation.launch    #启动可视化
roslaunch turtlebot_teleop  keyboard_teleop.launch           #启动控制小车运动


保存地图

rosrun map_server map_saver -f /tmp/my_map

运用保存的地图进行导航:

roslaunch turtlebot_bringup minimal.launch                                    #启动turtlebot
roslaunch turtlebot_navigation amcl_demo.launch map_file:=/tmp/my_map.yaml    #载入地图
roslaunch turtlebot_rviz_launchers view_navigation.launch                     #可视化










posted on 2018-07-12 15:46  _杰轩  阅读(982)  评论(0编辑  收藏  举报

导航