Ros中2D_Slam说明: turtlebot+kinect改写成turtlebot+laser(hokuyo)

2023-11-03 09:48

本文主要是介绍Ros中2D_Slam说明: turtlebot+kinect改写成turtlebot+laser(hokuyo),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://blog.csdn.net/zyh821351004/article/details/44103757

SLAM_turtlebot   hokuyo 说明:
安装包:turtlebot              turtlebot_apps

        hokuyo_node    kobuki

kinect 2D_Slam 参考链接:  http://wiki.ros.org/turtlebot_navigation/Tutorials/Build%20a%20map%20with%20SLAM

hector_slam   参考连接:  http://my.phirobot.com/blog/2014-06-hector_mapping_example.html

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
改动turtlebot的SLAM例子,已经可以初步跑动起kobuki来用实际机器人做SLAM。
 turtlebot的例子主要是利用kinect的深度信息模拟激光数据进行二维地图的构建。现在只需将传感器节点换成hokuyo
  的节点,并配置好相应的参考系与传感信息发布数据的话题。基本上就可以整体运行起来。
     现在也只是初步的配置。后面要根据实际的机器人物理模型结构,规范好激光与机器人的相对位置。
 1)机器人启动.
   机器人的物理描述文件(urdf文件)配置,关于实际运动的mobile_base相应配置,诊断节点

 2) 传感器运行。
    改动主要集中在hokuyo_node的坐标系与数据节点。

 3)gmapping 制栅格地图

 4)amcl 定位。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. 启动turtlebot. 

roslaunch turtlebot_bringup minimal.launch


2.gmapping

roslaunch turtlebot_navigation gmapping_demo.launch

注:。turtlebot的例子主要是利用kinect的深度信息模拟激光数据进行二维地图的构建。现在只需将传感器节点换成hokuyo 的节点,并配置好相应的参考系与传感信息发布数据的话题。基本上就可以整体运行起来。

ps: 这部分需要将启动的传感器3dsenser(kinect)  改成laser. hokuyo

       添加文件hokuyo_2d_sensor.launch



3.显示
roslaunch turtlebot_rviz_launchers view_navigation.launch
××键盘控制: 
$ roslaunch kobuki_keyop keyop.launch
$ roslaunch turtlebot_teleop keyboard_teleop.launch
4.保存地图
rosrun map_server map_saver -f /tmp/my_map
5 .导航
 roslaunch turtlebot_navigation amcl_demo.launch map_file:[map file path] 
显示:
roslaunch turtlebot_rviz_launchers view_navigation.launch --screen

.yaml格式文件
查看电量:
 对话框  运动GUI
 
  运行 rosrun rqt_robot_monitor rqt_robot_monitor


 **界面式查kobuki的电量(先运行节点):rosrun rqt_gui rqt_gui

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
说明:bash脚本语言。turtlebot_hokuyo_slam.sh
1. 先要进行ros的环境变量设置。
2. 并行工程中需要等待后台launch文件的启动
 


#!/bin/bash

#source /opt/ros/hydro/setup.bash  
source /opt/ros/hydro/setup.bash
source /home/agv/hydro_ws/devel/setup.bash
ROS_PACKAGE_PATH=~/hydro_ws/src:$ROS_PACKAGE_PATH
ROS_WORKSPACE=~/hydro_ws/src

echo roslaunch turtlebot_bringup 
roslaunch turtlebot_bringup minimal.launch &

 sleep 15
 echo turtlebot_navigation 
 roslaunch turtlebot_navigation gmapping_demo.launch &

 sleep 15
 echo turtlebot_rviz_launchers  

 roslaunch turtlebot_rviz_launchers view_navigation.launch &
 sleep 5

 roslaunch kobuki_keyop keyop.launch

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


注:  主要更改的配置文件。
  1.文件 src/turtlebot_apps/turtlebot_navigation/launch gmapping_demo.launch
<launch>

 <!--kinect-->
  <!--include file="$(find turtlebot_bringup)/launch/3dsensor.launch"-->
    <!--arg name="rgb_processing" value="false" /-->
    <!--arg name="depth_registration" value="false" /-->
    <!--arg name="depth_processing" value="false" /-->
    
    <!-- We must specify an absolute topic name because if not it will be prefixed by "$(arg camera)".
         Probably is a bug in the nodelet manager: https://github.com/ros/nodelet_core/issues/7 -->
    <!--arg name="scan_topic" value="/scan" /-->
  <!--/include-->

     <!--hokuyo-->
<!--配置了相应的激光数据base  与 topic -->
  <arg name="2dsensor"  default="$(optenv SENSOR_2D hokuyo)"/>
  <!-- rplidar, hokuyo -->
  <!--arg name="use_filter" default="$(optenv USE_FILTER false)"/-->
  
  <include file="$(find turtlebot_bringup)/launch/includes/$(arg 2dsensor)_2d_sensor.launch.xml">
    <arg name="scan_topic" value="/scan" />
    <arg name="laser_frame" value="camera_depth_frame" />
    <!-- if need change port -->
    <!--arg name="laser_port" value="/dev/ttyACM0" /-->
  </include>
  
  <!--include if="$(arg use_filter)" file="$(find exbotxi_bringup)/launch/includes/laser_filter.launch.xml">
    <arg name="scan_in" value="scan_raw"/>
    <arg name="scan_out" value="/scan"/>
  </include-->

 <include file="$(find turtlebot_navigation)/launch/includes/gmapping.launch.xml"/>

  <include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/>

</launch>



2. 文件 /home/agv/kobuki_ws/src/turtlebot/turtlebot_bringup/launch/2dsensor.launch

<launch>
  <arg name="2dsensor"  default="$(optenv SENSOR_2D hokuyo)"/>
  <!-- rplidar, hokuyo -->
  <arg name="use_filter" default="$(optenv USE_FILTER false)"/>
  
  <include file="$(find exbotxi_bringup)/launch/includes/$(arg 2dsensor)_2d_sensor.launch.xml">
    <arg if="$(arg use_filter)" name="scan_topic" value="scan_raw" />
    <arg name="laser_frame" value="laser_link" />
    <!-- if need change port -->
    <!--arg name="laser_port" value="/dev/ttyUSB1" /-->
  </include>
  
  <include if="$(arg use_filter)" file="$(find exbotxi_bringup)/launch/includes/laser_filter.launch.xml">
    <arg name="scan_in" value="scan_raw"/>
    <arg name="scan_out" value="scan"/>
  </include>
  
</launch>


3. 文件 /home/agv/kobuki_ws/src/turtlebot/turtlebot_bringup/launch/include/hokuyo_2d_sensor.launch.xml

<launch>
  <arg name="scan_topic" default="/scan" />
  <arg name="laser_frame" default="kobuki" />
  <arg name="laser_port" default="/dev/ttyACM0" />
  
  <node name="hokuyo" pkg="hokuyo_node" type="hokuyo_node">
    <param name="port" type="string" value="$(arg laser_port)"/>
    <param name="min_ang" value="-1.7" />
    <param name="max_ang" value="1.7" />
    <param name="min_range" value="0.18" />
    <param name="hokuyo_node/calibrate_time" value="true" />
    <param name="frame_id" value="$(arg laser_frame)" />
    <remap from="scan" to="$(arg scan_topic)"/>
  </node>
</launch>


注意:Turtlebot添加激光雷达时,参考:http://wiki.ros.org/turtlebot/Tutorials/hydro/Adding%20a%20Hokuyo%20laser%20to%20your%20Turtlebot

单次使用时:http://wiki.ros.org/hokuyo_node/Tutorials/UsingTheHokuyoNode  需要修改雷达端口权限:

sudo chmod a+rw /dev/ttyACM0



上张图以示纪念:


[html]  view plain copy
  1. 补充:  坐标系的问题。  
  2.   
  3. 1 turtlebot_world.launch  
  4.      <include file="$(find turtlebot_gazebo)/launch/includes/$(arg base).launch.xml">  
  5.   
  6. 1.1 kobuki.launch.xml  
  7.   <arg name="urdf_file" default="$(find xacro)/xacro.py '$(find turtlebot_description)/robots/$(arg base)_$(arg stacks)_$(arg 3d_sensor).urdf.xacro'" />  
  8.   <param name="robot_description" command="$(arg urdf_file)" />  
  9. 1.1.1 rplidar.urdf.xacro  
  10.   <xacro:macro name="sensor_rplidar" params="parent">  
  11.     <joint name="laser" type="fixed">  
  12.       <origin xyz="0.15 0.0 0.15" rpy="0 0.0 0.0" />  
  13.       <parent link="base_link" />  
  14.       <child link="base_laser_link" />  
  15.     </joint>  
  16. 熟悉下urdf文件的的相应语法。。  
  17. 坐标系的相对关系。父子坐标系  
  18.         旋转与平移。  

这篇关于Ros中2D_Slam说明: turtlebot+kinect改写成turtlebot+laser(hokuyo)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

ROS话题通信流程自定义数据格式

ROS话题通信流程自定义数据格式 需求流程实现步骤定义msg文件编辑配置文件编译 在 ROS 通信协议中,数据载体是一个较为重要组成部分,ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:String、Int32、Int64、Char、Bool、Empty… 但是,这些数据一般只包含一个 data 字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如:

Modbus初学者教程,第三章:modbus寄存器说明

第三章:modbus寄存器说明 寄存器种类 Modbus协议中一个重要的概念是寄存器,所有的数据均存放于寄存器中。Modbus寄存器是指一块内存区域。Modbus寄存器根据存放的数据类型以及各自读写特性,将寄存器分为4个部分,这4个部分可以连续也可以不连续,由开发者决定。寄存器的意义如下表所示。 Modbus协议定义了设备间的数据传输方式,包括数据格式和通信规则。Modbus寄存器是协议中用

CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中

CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中 code review! 文章目录 CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中1.`CMAKE_INSTALL_PREFIX`详解变量作用设置 `CMAKE_INSTALL_PREFIX`示例影响范围常

ROS话题通信机制实操C++

ROS话题通信机制实操C++ 创建ROS工程发布方(二狗子)订阅方(翠花)编辑配置文件编译并执行注意订阅的第一条数据丢失 ROS话题通信的理论查阅ROS话题通信流程理论 在ROS话题通信机制实现中,ROS master 不需要实现,且连接的建立也已经被封装了,需要关注的关键点有三个: 发布方(二狗子)订阅方(翠花)数据(此处为普通文本) 创建ROS工程 创建一个ROS工程

SLAM Paper Reading和代码解析

最近对VINS、LIO-SAM等重新进行了Paper Reading和代码解析。这两篇paper和代码大约在三年前就读过,如今重新读起来,仍觉得十分经典,对SLAM算法研发具有十分重要的借鉴和指导意义。重新来读,对其中的一些关键计算过程也获得了更新清晰的了解,现整理分享出来,供有需要的同学参考。 VINS-MONO算法总结-徐胜攀.pdf资源-CSDN文库 对VINS-MONO的算法框架进

【经典算法】LeetCode 22括号生成(Java/C/Python3/Go实现含注释说明,中等)

作者主页: 🔗进朱者赤的博客 精选专栏:🔗经典算法 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名) ❤️觉得文章还不错的话欢迎大家点赞👍➕收藏⭐️➕评论,💬支持博主,记得点个大大的关注,持续更新🤞 ————————————————- 首先,请注意题目链接有误,您提供的链接是LeetCode 14,但题目

DB2日期格式转换的函数及说明

--当前日期+20天。 cast(replace(varchar(CURRENT timeSTAMP +20 days)  ,'-','')as varchar(8))   --获取当前日期: select current date from sysibm.sysdummy1;  values current date; --获取当前日期  select cur

Ubuntu iso 镜像下载 步骤截图说明

Ubuntu镜像下载,在这个网址: Enterprise Open Source and Linux | Ubuntu 步骤如下图所示: 1、登入网址 2、点击Get Ubuntu 3、点击Download Ubuntu Desktop 后续点击Downloadload 24.04 LTS直接下载就行 如果需要下载其它版本,点击check out our alternative

Java面试题:通过实例说明工厂模式和抽象工厂模式的用法,以及它们在解耦中的作用

工厂模式和抽象工厂模式是创建型设计模式中的两种,主要用于对象的创建,并且通过将对象的创建过程封装起来,来实现代码的解耦和灵活性。下面通过具体实例来说明这两种模式的用法及其在解耦中的作用。 工厂模式(Factory Method Pattern) 工厂模式通过定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 实例说明 假设我们有一个交通工具接口 Veh