【ROS】移动机器人导航仿真(2)——SLAM(gmapping)

在前一节中,简单介绍了移动机器人的3D建模,并在gazebo三维仿真环境中实现了简单的移动。这一节采用gmapping包实现机器人的SLAM(同时定位与地图建立)。使用上一节构建的机器人3D模型,在gazebo三维仿真环境中移动,并为此环境构建一个二维地图。概述移动机器人在未知的环境中进行导航时,接收来自里程计,传感器流的信息,构建工作环境的地图模型,然后再根据地图和目标位姿信息来导航、定位。ROS
摘要由CSDN通过智能技术生成

在前一节中,简单介绍了移动机器人的3D建模,并在gazebo三维仿真环境中实现了简单的移动。这一节采用gmapping包实现机器人的SLAM(同时定位与地图建立)。使用上一节构建的机器人3D模型,在gazebo三维仿真环境中移动,并为此环境构建一个二维地图。


概述

移动机器人在未知的环境中进行导航时,接收来自里程计,传感器流的信息,构建工作环境的地图模型,然后再根据地图和目标位姿信息来导航、定位。

ROS导航功能包集是ROS系统最强大的特性之一,可以实现机器人的自主导航和运动,但只能用于双轮差分驱动或者完全轮驱动的机器人。导航功能包集假定机器人以特定方式配置以便运行。下图显示了此配置的概述。白色组件是ROS提供的导航所必需的组件,灰色组件是ROS提供的可选组件,你要做的是为每个机器人平台创建蓝色组件。详见http://wiki.ros.org/navigation/Tutorials/RobotSetup

这里写图片描述

以下是你需要做的:
1. 让机器人发布关于所有关节和传感器位置关系的信息(tf);
2. 让机器人发送线速度和角速度信息(odom);
3. 接收激光雷达的信息来实现完成地图构建和定位(sensor sources);
4. 创建机器人的基础控制器,负责将线速度和转向角度信息发布给硬件平台(base controller)。

gmapping包采用了粒子滤波算法,提供基于激光的SLAM(同时定位和地图建立),节点名为slam_gmapping。使用slam_gmapping,可以从移动机器人收集的激光和位姿关系数据创建二维栅格地图。即订阅了tf (tf/tfMessage) 和scan (sensor_msgs/LaserScan) 主题,发布map_metadata (nav_msgs/MapMetaData) 和map (nav_msgs/OccupancyGrid) 主题。详见http://wiki.ros.org/gmapping


使用gazebo创建变换(tf)

tf是ROS中的一个功能包,它可以让用户随着时间的推移跟踪多个坐标系。tf维护在时间上缓冲的坐标变换树结构中的坐标系之间的关系,并且使得用户在任何时间点可以任意转换两个坐标系之间的点和向量。在一个机器人系统中,需要用tf将各种数据的坐标系串联起来,变成一个树形结构(每个节点只能有一个父节点,可以有多个孩子节点),以便后面通讯和显示。

在上一节机器人的3D建模中,已经配置了机器人本体各组件之间的坐标变换关系,它们之间的变换都为静态变换。在本节中,需要配置odom到机器人基座标系base_footprint之间的坐标变换关系,此变换为动态变化。odom是一个很好的固定坐标系,在机器人的起点位姿上,机器人的姿态相对odom而言是随时间经常变动的。在gazebo环境中可以使用Gazebo 插件(plugins)来配置odom到base_footprint的变换。

Gazebo 插件可以为URDF模型提供更强大的功能,并且可以为传感器输出和电机输出绑定ROS消息和服务。插件可以添加到URDF的任何主要元素 —robot,link或joint,具体取决于插件的范围和目的。要完成向URDF中的特定元素添加插件,必须在gazebo元素中包含plugin标记。
以下是URDF中robots元素的插件示例:

<gazebo  (reference =“x”)>
  <plugin name="differential_drive_controller" filename="libdiffdrive_plugin.so">
    ... plugin parameters ...
  </plugin>
</gazebo>

在上面的例子中,插件被添加到robot元素中,因为与其他gazebo元素和属性类似,如果没有指定reference =“x”(link、joint等),则假设reference是整个robot。name为插件的名称,filename为插件所适用的共享库。详见http://gazebosim.org/tutorials?tut=ros_gzplugins

在上一节中构建的机器人模型为滑移转向(skid-steer)机器人,所以我在模型文件中添加了skid_steer_drive_controller插件,代码如下:

  • 16
    点赞
  • 173
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
要进行ROS机器人导航仿真,你需要安装一些必要的软件包。首先,你可以使用以下命令安装turtlebot相关的软件包:sudo apt-get install ros-kinetic-turtlebot-bringup ros-kinetic-turtlebot-create ros-kinetic-openni-* ros-kinetic-openni2-* ros-kinetic-freenect-* ros-kinetic-usb-cam ros-kinetic-laser-* ros-kinetic-hokuyo-node ros-kinetic-audio-common gstreamer0.10-pocketsphinx ros-kinetic-pocketsphinx ros-kinetic-slam-gmapping ros-kinetic-joystick-drivers python-rosinstall ros-kinetic-orocos-kdl ros-kinetic-python-orocos-kdl python-setuptools ros-kinetic-dynamixel-motor libopencv-dev python-opencv ros-kinetic-vision-opencv ros-kinetic-depthimage-to-laserscan ros-kinetic-arbotix-* ros-kinetic-turtlebot-teleop ros-kinetic-move-base ros-kinetic-map-server ros-kinetic-fake-localization ros-kinetic-amcl。\[1\] 接下来,在安装好ROS kinetic版本的Ubuntu系统中,你可以打开一个终端窗口,并输入以下命令来安装turtlebot包:sudo apt-get install ros-kinetic-turtlebot-*。\[2\] 安装完成后,你可以使用以下命令启动仿真环境并进行自主导航roslaunch racecar_gazebo racecar_runway_navigation.launch roslaunch racecar_gazebo racecar_rviz.launch。\[3\] 这样,你就可以开始进行ROS机器人导航仿真了。 #### 引用[.reference_title] - *1* *2* [ROS机器人导航仿真(kinetic版本)](https://blog.csdn.net/sinolover/article/details/90721486)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ROS机器人定位导航仿真(包括智能车、无人机飞行的仿真)](https://blog.csdn.net/weixin_43749019/article/details/107284304)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值