ros仿真笔记之——基于gazebo的多机器人探索环境仿真(代码片段)

gwpscut gwpscut     2023-03-14     359

关键词:

之前博客《ROS学习笔记之——多机器人探索环境》介绍过一个名为explore_lite的机器人的包

本博文对其进行gazebo仿真分析

 

目录

实验

修改地方的说明

参考资料


 

实验

首先在包clone下来(这个包设置为私密了,想下载的读者可以直接下载源包https://github.com/hrnr/m-explore然后再做相应的改动)

cd /home/kwanwaipang/catkin_ws/src
git clone https://github.com/KwanWaiPang/multiple-robots-for-ROS.git
(git clone https://github-username:github-password@github.com/github-username/github-template-name.git)

但是却显示如下

最后还是下载zip好了,还没找到bug所在。。。。

然后cm一下

先按照博客《ROS实验笔记之——基于gazebo的ROS多机器人仿真》中那样来运行gazebo多机器人

export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_gazebo m_turtlebot3_world.launch

然后开启新的终端运行

roslaunch explore_lite multi_explore.launch

然后报错如下

export TURTLEBOT3_MODEL=waffle

加上然后就可以了

但是存在问题是机器人只会原地转。。。。。

后面会通过实验再验证一下。但是个人感觉exploration好像没啥意义,探索出边界,倒不如结合一起做多机器人融合SLAM。机器人自动的运动,同时slam建图。

 

修改地方的说明

在原来的explore_lite(https://github.com/hrnr/m-explore)包的launch文件下,添加如下几个launch文件

原来的只有

这里只列出multi_explore.launch文件

<launch>

<!-- Argument -->
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
  <arg name="move_forward_only" default="false"/>
  <arg name="cmd_vel_topic" default="/cmd_vel" />
  <arg name="odom_topic" default="odom" />

<group ns="tb3_0">
<!-- Turtlebot3 -->
  <include file="$(find turtlebot3_bringup)/launch/includes/description.launch.xml">
    <arg name="model" value="$(arg model)" />
  </include>

  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" output="screen">
    <param name="publish_frequency" type="double" value="50.0" />
    <param name="tf_prefix" value="tb3_0" />
  </node>

<!-- move_base -->
  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
    <rosparam file="$(find explore_lite)/param/first_costmap_common_params_$(arg model).yaml" command="load" ns="/tb3_0/global_costmap" />
    <rosparam file="$(find explore_lite)/param/first_costmap_common_params_$(arg model).yaml" command="load" ns="/tb3_0/local_costmap" />
    <rosparam file="$(find explore_lite)/param/first_local_costmap_params.yaml" command="load" />
    <rosparam file="$(find explore_lite)/param/first_global_costmap_params.yaml" command="load" />
    <rosparam file="$(find explore_lite)/param/move_base_params.yaml" command="load" />
    <rosparam file="$(find explore_lite)/param/dwa_local_planner_params_$(arg model).yaml" command="load" />
    <remap from="cmd_vel" to="/tb3_0/cmd_vel"/>
    <remap from="odom" to="tb3_0/odom"/>
    <param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" />
  </node>

<!-- SLAM -->
  <node pkg="gmapping" type="slam_gmapping" name="turtlebot3_slam_gmapping" output="screen">
    <param name="base_frame" value="/tb3_0/base_footprint"/>
    <param name="odom_frame" value="/tb3_0/odom"/>
    <param name="map_frame"  value="/tb3_0/map"/>
    <param name="map_update_interval" value="2.0"/>
    <param name="maxUrange" value="3.0"/>
    <param name="sigma" value="0.05"/>
    <param name="kernelSize" value="1"/>
    <param name="lstep" value="0.05"/>
    <param name="astep" value="0.05"/>
    <param name="iterations" value="5"/>
    <param name="lsigma" value="0.075"/>
    <param name="ogain" value="3.0"/>
    <param name="lskip" value="0"/>
    <param name="minimumScore" value="50"/>
    <param name="srr" value="0.1"/>
    <param name="srt" value="0.2"/>
    <param name="str" value="0.1"/>
    <param name="stt" value="0.2"/>
    <param name="linearUpdate" value="1.0"/>
    <param name="angularUpdate" value="0.2"/>
    <param name="temporalUpdate" value="0.5"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="100"/>
    <param name="xmin" value="-10.0"/>
    <param name="ymin" value="-10.0"/>
    <param name="xmax" value="10.0"/>
    <param name="ymax" value="10.0"/>
    <param name="delta" value="0.05"/>
    <param name="llsamplerange" value="0.01"/>
    <param name="llsamplestep" value="0.01"/>
    <param name="lasamplerange" value="0.005"/>
    <param name="lasamplestep" value="0.005"/>
  </node>

<!-- Explore -->
<node pkg="explore_lite" type="explore" respawn="false" name="explore" output="screen">
  <param name="robot_base_frame" value="/tb3_0/base_footprint"/>
  <param name="costmap_topic" value="/tb3_0/map"/>
  <param name="costmap_updates_topic" value="/tb3_0/map_updates"/>
  <param name="visualize" value="true"/>
  <param name="planner_frequency" value="0.33"/>
  <param name="progress_timeout" value="30.0"/>
  <param name="potential_scale" value="3.0"/>
  <param name="orientation_scale" value="0.0"/>
  <param name="gain_scale" value="1.0"/>
  <param name="transform_tolerance" value="0.3"/>
  <param name="min_frontier_size" value="0.75"/>
</node>
</group>

<group ns="tb3_1">
<!-- Turtlebot3 -->
  <include file="$(find turtlebot3_bringup)/launch/includes/description.launch.xml">
    <arg name="model" value="$(arg model)" />
  </include>
  
  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" output="screen">
    <param name="publish_frequency" type="double" value="50.0" />
    <param name="tf_prefix" value="tb3_1" />
  </node>

<!-- move_base -->
  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
    <rosparam file="$(find explore_lite)/param/second_costmap_common_params_$(arg model).yaml" command="load" ns="/tb3_1/global_costmap" />
    <rosparam file="$(find explore_lite)/param/second_costmap_common_params_$(arg model).yaml" command="load" ns="/tb3_1/local_costmap" />
    <rosparam file="$(find explore_lite)/param/second_local_costmap_params.yaml" command="load" />
    <rosparam file="$(find explore_lite)/param/second_global_costmap_params.yaml" command="load" />
    <rosparam file="$(find explore_lite)/param/move_base_params.yaml" command="load" />
    <rosparam file="$(find explore_lite)/param/dwa_local_planner_params_$(arg model).yaml" command="load" />
    <remap from="cmd_vel" to="/tb3_1/cmd_vel"/>
    <remap from="odom" to="/tb3_1/odom"/>
    <param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" />
  </node>

  <node pkg="gmapping" type="slam_gmapping" name="turtlebot3_slam_gmapping" output="screen">
    <param name="base_frame" value="/tb3_1/base_footprint"/>
    <param name="odom_frame" value="/tb3_1/odom"/>
    <param name="map_frame"  value="/tb3_1/map"/>
    <param name="map_update_interval" value="2.0"/>
    <param name="maxUrange" value="3.0"/>
    <param name="sigma" value="0.05"/>
    <param name="kernelSize" value="1"/>
    <param name="lstep" value="0.05"/>
    <param name="astep" value="0.05"/>
    <param name="iterations" value="5"/>
    <param name="lsigma" value="0.075"/>
    <param name="ogain" value="3.0"/>
    <param name="lskip" value="0"/>
    <param name="minimumScore" value="50"/>
    <param name="srr" value="0.1"/>
    <param name="srt" value="0.2"/>
    <param name="str" value="0.1"/>
    <param name="stt" value="0.2"/>
    <param name="linearUpdate" value="1.0"/>
    <param name="angularUpdate" value="0.2"/>
    <param name="temporalUpdate" value="0.5"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="100"/>
    <param name="xmin" value="-10.0"/>
    <param name="ymin" value="-10.0"/>
    <param name="xmax" value="10.0"/>
    <param name="ymax" value="10.0"/>
    <param name="delta" value="0.05"/>
    <param name="llsamplerange" value="0.01"/>
    <param name="llsamplestep" value="0.01"/>
    <param name="lasamplerange" value="0.005"/>
    <param name="lasamplestep" value="0.005"/>
  </node>

<!-- Explore -->
<node pkg="explore_lite" type="explore" respawn="false" name="explore" output="screen">
  <param name="robot_base_frame" value="/tb3_1/base_footprint"/>
  <param name="costmap_topic" value="/tb3_1/map"/>
  <param name="costmap_updates_topic" value="/tb3_1/map_updates"/>
  <param name="visualize" value="true"/>
  <param name="planner_frequency" value="0.33"/>
  <param name="progress_timeout" value="30.0"/>
  <param name="potential_scale" value="3.0"/>
  <param name="orientation_scale" value="0.0"/>
  <param name="gain_scale" value="1.0"/>
  <param name="transform_tolerance" value="0.3"/>
  <param name="min_frontier_size" value="0.75"/>
</node>
</group>

<group ns="tb3_2">
<!-- Turtlebot3 -->
  <include file="$(find turtlebot3_bringup)/launch/includes/description.launch.xml">
    <arg name="model" value="$(arg model)" />
  </include>
  
  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" output="screen">
    <param name="publish_frequency" type="double" value="50.0" />
    <param name="tf_prefix" value="tb3_2" />
  </node>

<!-- move_base -->
  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
    <rosparam file="$(find explore_lite)/param/third_costmap_common_params_$(arg model).yaml" command="load" ns="/tb3_2/global_costmap" />
    <rosparam file="$(find explore_lite)/param/third_costmap_common_params_$(arg model).yaml" command="load" ns="/tb3_2/local_costmap" />
    <rosparam file="$(find explore_lite)/param/third_local_costmap_params.yaml" command="load" />
    <rosparam file="$(find explore_lite)/param/third_global_costmap_params.yaml" command="load" />
    <rosparam file="$(find explore_lite)/param/move_base_params.yaml" command="load" />
    <rosparam file="$(find explore_lite)/param/dwa_local_planner_params_$(arg model).yaml" command="load" />
    <remap from="cmd_vel" to="/tb3_2/cmd_vel"/>
    <remap from="odom" to="/tb3_2/odom"/>
    <param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" />
  </node>

<!-- SLAM -->
  <node pkg="gmapping" type="slam_gmapping" name="turtlebot3_slam_gmapping" output="screen">
    <param name="base_frame" value="/tb3_2/base_footprint"/>
    <param name="odom_frame" value="/tb3_2/odom"/>
    <param name="map_frame"  value="/tb3_2/map"/>
    <param name="map_update_interval" value="2.0"/>
    <param name="maxUrange" value="3.0"/>
    <param name="sigma" value="0.05"/>
    <param name="kernelSize" value="1"/>
    <param name="lstep" value="0.05"/>
    <param name="astep" value="0.05"/>
    <param name="iterations" value="5"/>
    <param name="lsigma" value="0.075"/>
    <param name="ogain" value="3.0"/>
    <param name="lskip" value="0"/>
    <param name="minimumScore" value="50"/>
    <param name="srr" value="0.1"/>
    <param name="srt" value="0.2"/>
    <param name="str" value="0.1"/>
    <param name="stt" value="0.2"/>
    <param name="linearUpdate" value="1.0"/>
    <param name="angularUpdate" value="0.2"/>
    <param name="temporalUpdate" value="0.5"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="100"/>
    <param name="xmin" value="-10.0"/>
    <param name="ymin" value="-10.0"/>
    <param name="xmax" value="10.0"/>
    <param name="ymax" value="10.0"/>
    <param name="delta" value="0.05"/>
    <param name="llsamplerange" value="0.01"/>
    <param name="llsamplestep" value="0.01"/>
    <param name="lasamplerange" value="0.005"/>
    <param name="lasamplestep" value="0.005"/>
  </node>

<!-- Explore -->
<node pkg="explore_lite" type="explore" respawn="false" name="explore" output="screen">
  <param name="robot_base_frame" value="/tb3_2/base_footprint"/>
  <param name="costmap_topic" value="/tb3_2/map"/>
  <param name="costmap_updates_topic" value="/tb3_2/map_updates"/>
  <param name="visualize" value="true"/>
  <param name="planner_frequency" value="0.33"/>
  <param name="progress_timeout" value="30.0"/>
  <param name="potential_scale" value="3.0"/>
  <param name="orientation_scale" value="0.0"/>
  <param name="gain_scale" value="1.0"/>
  <param name="transform_tolerance" value="0.3"/>
  <param name="min_frontier_size" value="0.75"/>
</node>
</group>

</launch>

 

 

 

参考资料

https://blog.csdn.net/kalenE992/article/details/92029294(github私密)

https://github.com/hrnr/m-explore(原来的包,本博文所用的包在其基础上改进)

 

ros仿真笔记之——基于frontier_exploration的机器人自主探索

最近在做机器人自主探索建图的相关topic。之前博客也尝试了不同的自主探索包,如rrt_exploration包《ROS仿真笔记之——基于rrt_exploration的单个机器人自主探索建图》与explore_lite包《ROS仿真笔记之——移动机器人自主探索式地... 查看详情

ros学习笔记之——gazebo仿真(代码片段)

...人学习gazebo的学习记录。 Gazebo是一款3D仿真器,支持机器人开发所需的机器人、传感器和环境模型,并且通过搭载的物理引擎可以得到逼真的仿真结果。Gazebo是近年来最受欢迎的三维仿真器之一,并被选为美国DARPA机... 查看详情

ros仿真笔记之——基于gazebo的eventcamera仿真(dvsgazebo)(代码片段)

首先安装DVS的驱动包,之前博客《ROS学习笔记之——ESVO复现及DAVIS346测试》已经配置过了~然后clone工程,随便放到一个文件下gitclonehttps://github.com/HBPNeurorobotics/gazebo_dvs_plugin.git然后编译,即可将dvs模型安装到系统... 查看详情

ros仿真笔记之——gazebo配置velodyne(代码片段)

之前博客《ROS仿真笔记之——基于gazebo的eventcamera仿真(dvsgazebo)》介绍了在gazebo里面配置dvssensor,本博文将velodyne也加上,并且在dvscamera里面加入image,使得仿真的eventcamera在输出eventstream的同时,也可以输出图片。... 查看详情

ros实验笔记之——基于cartographer的多机器人slam地图融合(代码片段)

之前博客《 ROS仿真笔记之——多移动机器人SLAM地图融合 》已经实现了基于gmapping的多机器人地图融合。实验和仿真都验证过了。本博文通过cartographer来实现SLAM,再做mapmerge先看视频效果two启动的文件#!/bin/bashgnome-terminal--tab... 查看详情

ros2+gazebo+opencv之mobot仿真视觉传感器(代码片段)

...OpenCV的微笑入门资料篇ROS2之OpenCV怎么理解一段代码 ROS2机器人个人教程博客汇总(2021共6套) 其中:使用机器人操作系统ROS2和仿真软件Gazebo9服务进阶实战(八)-mobot 查看详情

ros实验笔记之——evo(代码片段)

...lyingroom"·Issue#4·uzh-rpg/rpg_dvs_evo_open·GitHub之前博客《ROS仿真笔记之——基于gazebo的eventcamera仿真(dvsgazebo)》介绍了DVS的gazebo仿真。博客《ROS学习笔记之——ESVO复现及DAVIS346测试》介绍了ESVO以及事件相 查看详情

ros从入门到精通2-5:gazebo插件制作案例(带碰撞属性的多行人场景)(代码片段)

...系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS进行实际项目的开发和调试的工程能力。🚀详情:《ROS从入门到精通》1Gazebo插件在ROS从入门到精通2-2:机器人3D物理仿真——Gazebo中介绍过G... 查看详情

ros和gazebo进行机器人仿真

Gazebo是一种多机器人仿真器,可用于室内外机器人仿真。Gazebo在ROS中有良好的接口,包含ROS和Gazebo的所有控制。若要实现ROS到Gazebo的通信,我们必须安装ROS-Gazebo接口。应该安装以下软件包:$sudoaptinstallros-melodic-gazebo-ros-pkgs ro... 查看详情

gazebo机器人仿真流程之world类(代码片段)

前文介绍了World类和WorldPrivate类的成员变量及成员函数。这里集中梳理一下,在Gazebo仿真场景(World)中,都有哪些东西。在Gazebo中,仿真相关的对象主要有以下几个:(1)物理引擎PhysicsEngine(2)模型Model(3)实体Entity(4)场... 查看详情

ros学习笔记之——3dmapmerge(代码片段)

之前博客《ROS实验笔记之——基于cartographer的多机器人SLAM地图融合》已经实现了2Dmapmerge,也做了大量这方面的demotwo基于两个turtlebot2的多机器人SLAM地图融合本博文看看3dmapmerge方面的资料首先呢有CCM-SLAM(https://github.com/VI... 查看详情

rosgazebo使用解析

...是ROS中的一个实现物理仿真的工具包,gazebo本身就是一款机器人的仿真软件,基于ODE的物理引擎,可以模拟机器人以及环境中的很多物理特性。类似于rviz工具,在gazebo工具中也可以加载机器人模型。加载的步骤:安装gazebo工具... 查看详情

gazebo機器人仿真學習探索筆記機器人模型

gazebo_models:https://bitbucket.org/osrf/gazebo_models模型庫下載,可以參考如下命令:~/Rob_Soft/Gazebo7$hgclonehttps://bitbucket.org/osrf/gazebo_models下載更改目錄下載到指定文件夾中。模型庫的結構目錄配置等可以參考官方文檔,注意model.sdf。當然... 查看详情

ros学习笔记之——基于qgc的px4仿真

之前博客《ROS实验笔记之——PX4仿真》已经介绍了PX4编译及QGC的安装,本博文进一步的基于QGC进行仿真控制QGC里有很多的参数控制首先打开虚拟的遥控器是实现遥控控制就可以在QGC用模拟手柄控制无人机(左边的遥感是... 查看详情

robotoperatingsystem(ros)学习笔记2---使用smartcar进行仿真

搭建环境:XMWare Ubuntu14.04 ROS(indigo)转载自古月居 转载连接:http://www.guyuehome.com/248 一、模型完善  文件夹urdf下,创建gazebo.urdf.xacro、smartcar.urdf.xacro、smartcar_body.urdf.xacro三个文件1、机器人主体smartcar_bod 查看详情

基于ros1.0的stdrsimulation搭建多移动机器人(multiplerobots)仿真系统

基于ROS1.0的stdrsimulation搭建多移动机器人(multiplerobots)仿真系统原创SimileciWH最后发布于2018-10-2617:12:20 https://blog.csdn.net/SimileciWH/article/details/83416437 多移动机器人的概念就不叙述了,直接讲如何正确的在ROS系统下构建基于stdrs... 查看详情

ros实验笔记之——px4仿真

...搭建了px4开发环境。本博文在ubuntu下对PX4进行一些基本的仿真学习~之前在做无人机仿真开发时《ROS实验笔记之——基于Prometheus自主无人机开源项目的学习与仿真》,已经安装了px4了~为此不需要 查看详情

在ros中开始自主机器人仿真-4建立自己的自主机器人urdf模型

要建立自己的自主机器人,首先,必须要建立自己的机器人模型,URDF(UnifiedRobotDescriptionFormat)模型。part3建立自主机器人URDF模型机器人URDF模型主要由两个文件组成:.xacro是主文件,包含URDF项,包括关节,连杆;.gazebo包含gazebo... 查看详情