结合hokuyo的UST-10LX激光雷达在turtlebot上建图

2024-09-04 20:18

本文主要是介绍结合hokuyo的UST-10LX激光雷达在turtlebot上建图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本人手上所用的激光雷达是hokuyo的UST-10LX型号,接口是网口类,要将其放在turtlebot上进行SLAM建图,修改的文件和USB接口的雷达一样,但是内容上有细微差异。我也是找了好些博客综合而来,有错误的地方还请大神们多多指教。

首先,得先弄明白几点情况:

1.在ROS上安装包有两种方式,一种是通过apt-get insatll安装Debian文件,一种是源文件安装。我学习ROS不深,安装turtlebot 包时只会用apt-get方式,所以在修改相应文件时,要先切换到/opt/ros/indigo/share下进行修改。

2.修改文件前,一定要记得备份,备份,备份!!!

3.一共修改了5处文件,建议修改一次,运行一下turtlebot,确认此次修改无误后,再进行下一次修改。

好了,开始修改文件了,我一共修改了五个地方:
1.在/opt/ros/indigo/share/turtlebot_bringup/launch/minimal.launch文件中添加了hokuyo的节点:

<node name="hokuyo_urg_node" pkg="urg_node" type="urg_node"><param name="ip_address" value="192.168.0.10" /><param name="ip_port" value="10940" /><param name="frame_id" value="base_laser_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"/>< !– remap from="scan" to="base_scan" ==This is no longer needed / –>
< /node>

其中,包括激光雷达的ip地址,连接端口,坐标系的转换关系,检测角度范围,具体的范围值可以自己算一遍。这一款的激光雷达的测量角度范围是270°,那么一边的测量范围就是π*270/180/2.

2./opt/ros/indigo/share/turtlebot_description/robots/kobuki_hexagons_kinect.urdf.xacro
在下面添加了雷达的连接

<robot name="turtlebot" xmlns:xacro="http://ros.org/wiki/xacro"&gt;
< 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"/>
< /robot>

3.在/opt/ros/indigo/share/turtlebot_description/urdf/turtlebot_library.urdf.xacro
最下面添加了以下语句:

<xacro:include filename="$(find turtlebot_description)/urdf/sensors/hokuyo.urdf.xacro"/>

4.在/opt/ros/indigo/share/turtlebot_description/urdf/sensors中添加了hokuyo.urdf.xacro文件,修改内容如下:

<?xml version="1.0"?>
<robot name="sensor_hokuyo" xmlns:xacro="http://ros.org/wiki/xacro"&gt;
<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>

5.修改了/opt/ros/indigo/share/turtlebot_navigation/param/costmap_common_param.yaml文件,修改后的内容如下:

observation_sources: hokuyo kinect bump
hokuyo:
data_type: LaserScan
#topic: /hokuyo_urg_node/scan
topic: scan
marking: true
clearing: true
# min was 0.25 and max was 0.35 changed to fix hokuyo lidar
min_obstacle_height: 0.0
max_obstacle_height: 0.5
raytrace_range: 10.0 #override range for this sensor
obstacle_range: 10.0 #override range for this sensor
kinect:
data_type: LaserScan
#topic: /camera/camera_nodelet_manager/scan
topic: kinect_scan
marking: false
clearing: false
# min was 0.25 and max was0.35
min_obstacle_height: 0.0
max_obstacle_height: 0.5
bump:
data_type: PointCloud2
topic: mobile_base/sensors/bumper_pointcloud
marking: true
clearing: false
min_obstacle_height: 0.0
max_obstacle_height: 0.15

文件修改完成后,就可以按照正常的步骤来进行建图。
1.在tuetlebot 上运行:

$ roslaunch turtlebot_bringup minimal.launch
$ roslaunch turtlebot_navigation gmapping_demo.launch

2.在工作站上,运行:

$ roslaunch turtlebot_rviz_launchers view_navigation.launch
$ roslaunch turtlebot_teleop keyboard_teleop.launch

通过键盘方向键控制底盘开始建图,但是出现了以下问题:激光数据显示不出来,提示laserscan有错误,base_lase_link不存在。

这里写图片描述
由于还没找到原因,所以只好在第一步修改minimal.launch文件中,把激光雷达的坐标系改为base_link,这样就可以正常显示激光数据,并能正常建图了。
这里写图片描述
3.保存地图:
在turtlebot上,运行

$ rosrun map_server map_saver -f /tmp/my_map

导航:
1.在tuetlebot 上运行:

$ roslaunch turtlebot_bringup minimal.launch
$ roslaunch turtlebot_navigation amcl_demo.launch map_file:=/tmp/my_map.yaml

2.在工作站上运行:

$ roslaunch turtlebot_rviz_launchers view_navigation.launch –screen

就可以在地图上对底盘进行导航了。

注意:
1.在保存地图和使用地图时,最好使用绝对路径,相对路径容易出错。

2.由于学艺不精,urdf文件没有设置好,所以激光的坐标系设置的有问题,还请大神们能够多多指教。

3.在使用激光雷达建图时,最好先查看下激光雷达的ip地址和所在网段的ip地址。例如,我最开始使用的激光雷达的IP地址是192.168.1.10,需要也设置一下电脑的静态IP地址,使其网段在192.168.1.XX下,当我在IP地址为192.168.1.YY的WiFi下远程控制上网本时,就不能正确识别上网本的IP地址,会出现destination host unreachable的错误。这时候,要么连接一个IP地址不为192.168.1.YY的WiFi,要么就在UrgBenriStandard上修改激光雷达的IP地址。

这篇关于结合hokuyo的UST-10LX激光雷达在turtlebot上建图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136928

相关文章

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

Go 语言中Select与for结合使用break

func test(){i := 0for {select {case <-time.After(time.Second * time.Duration(2)):i++if i == 5{fmt.Println("break now")break }fmt.Println("inside the select: ")}fmt.Println("inside the for: ")}} 执行后

cartographer+turtlebot+hokuyo|安装配置

cartographer+turtlebot+hokuyo|安装配置 系统:ubuntu 14.04+ros indigo 或 ubuntu 16.04+ros kinetic 平台:turtlebot2 传感器:hokuyo UTM-30LX laser 本文假设已经成功安装ubuntu,ros,以及各种与turtlebot相关的ros package等。本文主要介绍,怎么安装配car

【LVI-SAM】激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节

激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节 1. 特征提取实现过程总结1.0 特征提取过程小结1.1 类 `FeatureExtraction` 的整体结构与作用1.2 详细特征提取的过程1. 平滑度计算(`calculateSmoothness()`)2. 标记遮挡点(`markOccludedPoints()`)3. 特征提取(`extractF

Jenkins--pipeline认识及与RF文件的结合应用

什么是pipeline? Pipeline,就是可运行在Jenkins上的工作流框架,将原本独立运行的单个或多个节点任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。 为什么要使用pipeline? 1.流程可视化显示 2.可自定义流程任务 3.所有步骤代码化实现 如何使用pipeline 首先需要安装pipeline插件: 流水线有声明式和脚本式的流水线语法 流水线结构介绍 Node:

结合Python与GUI实现比赛预测与游戏数据分析

在现代软件开发中,用户界面设计和数据处理紧密结合,以提升用户体验和功能性。本篇博客将基于Python代码和相关数据分析进行讨论,尤其是如何通过PyQt5等图形界面库实现交互式功能。同时,我们将探讨如何通过嵌入式预测模型为用户提供赛果预测服务。 本文的主要内容包括: 基于PyQt5的图形用户界面设计。结合数据进行比赛预测。文件处理和数据分析流程。 1. PyQt5 图形用户界面设计

第二十一章 rust与动静态库的结合使用

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust与动静态库的结合使用 目录 注意一、前言二、库生成三、库使用四、总结 一、前言 rust中多了很多类型的库,比如前面章节中我们提到基本的bin与lib这两种crate类型库。 如果你在命令行执行下列语句: rustc --help 那么你将能找到这样的内容: --crate-type [bin|li

“设计模式双剑合璧:工厂模式与策略模式在支付系统中的完美结合”

工厂模式(Factory Pattern)和策略模式(Strategy Pattern)都是常见的设计模式,但它们解决的问题和应用场景不同。下面是它们的区别: 1. 目的不同: 工厂模式(Factory Pattern): 工厂模式的主要目的是创建对象。它通过定义一个创建对象的接口,让子类决定实例化哪一个具体类,从而将对象创建的逻辑与使用的代码分离。 工厂模式可以分为简单工厂、工厂方法和抽象

Windows电脑本地安装HFS文件共享服务结合内网穿透搭建低成本NAS

文章目录 前言1.软件下载安装1.1 设置HFS访客1.2 虚拟文件系统 2. 使用cpolar建立一条内网穿透数据隧道2.1 保留隧道2.2 隧道名称2.3 创建二级子域名访问本地hfs 总结 前言 本文主要介绍如何在Windows系统电脑使用HFS并结合cpolar内网穿透工具搭建低成本NAS,并实现使用公网地址远程访问管理本地局域网电脑存储的文件。 云存储作为一个新概念

Spring回顾之五 —— 测试,JUnit与SpringTest的完美结合

没有测试的程序,是不完整的,每一个从事写程序的人员,都应该坚持做单元测试,通过单元测试可以验证程序基本功能的有效性,从而保证整个系统的质量,功在一时,利在千秋。这里我们将尝试使用Junit和SpringTest,在之前的系统里添加测试功能。 第一步:JUnit与SpringTest的引入     JUnit故名知意,是一个专门为Java语言提供单元测试的框架。平时的开发过程中,单元