ROS Gazebo安装入门及仿真室内环境和小车实现(十九)

目录

安装

简介

URDF与Gazebo基本集成流程

创建功能包

编写URDF文件 

启动Gazebo并显示模型

 launch 文件实现:

命令行启动(去掉launch中的第三行加载模型)

 集成到launch里启动

 URDF集成Gazebo相关设置

collision 

 inertial

颜色设置 

 URDF集成Gazebo实操

框架搭建 

 编写封装惯性矩阵算法的 xacro 文件

 底盘修改

驱动轮修改

支撑轮修改

 传感器修改

 雷达修改

Gazebo仿真环境搭建

方式一:用别人的仿真环境 

 方式二:自己搭建环境

 方式三:自定义仿真环境

 下载官方模型库


安装

Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。

以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,gzebo会默认被安装。

运行使用命令gazeborosrun gazebo_ros gazebo

注意1:在 Ubuntu20.04 与 ROS Noetic 环境下,gazebo 启动异常以及解决

  • 问题1:VMware: vmw_ioctl_command error Invalid argument(无效的参数)

    解决:

    echo "export SVGA_VGPU10=0" >> ~/.bashrc

    source .bashrc

  • 问题2:[Err] [REST.cc:205] Error in REST request

    解决:sudo gedit ~/.ignition/fuel/config.yaml

    然后将url : https://api.ignitionfuel.org使用 # 注释

    再添加url: https://api.ignitionrobotics.org

  • 问题3:启动时抛出异常:[gazebo-2] process has died [pid xxx, exit code 255, cmd.....

    解决:killall gzserverkillall gzclient

注意2:如果 gazebo没有安装,请自行安装:

1.添加源:

sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" 
>
 /etc/apt/sources.list.d/gazebo-stable.list'

wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

2.安装:

第一步
sudo apt update
第二步
sudo apt install gazebo11 
第三步
sudo apt install libgazebo11-dev

简介

URDF 需要集成进 Rviz 或 Gazebo 才能显示可视化的机器人模型,前面已经介绍了URDF 与 Rviz 的集成,本节主要介绍:

  • URDF 与 Gazebo 的基本集成流程;
  • 如果要在 Gazebo 中显示机器人模型,URDF 需要做的一些额外配置;
  • 关于Gazebo仿真环境的搭建。

URDF与Gazebo基本集成流程

URDF 与 Gazebo 集成流程与 Rviz 实现类似,主要步骤如下:

  1. 创建功能包,导入依赖项

  2. 编写 URDF 或 Xacro 文件

  3. 启动 Gazebo 并显示机器人模型

创建功能包

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第1张图片

编写URDF文件 

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第2张图片




    
        
            
                
            
            
            
                
            
        
        
            
                
            
            
        
        
            
            
            
        
    
    
        Gazebo/Black
    


ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第3张图片

 一个是设置碰撞参数一个是设置连杆矩阵的

注意, 当 URDF 需要与 Gazebo 集成时,和 Rviz 有明显区别:

1.必须使用 collision 标签,因为既然是仿真环境,那么必然涉及到碰撞检测,collision 提供碰撞检测的依据。

2.必须使用 inertial 标签,此标签标注了当前机器人某个刚体部分的惯性矩阵,用于一些力学相关的仿真计算。

3.颜色设置,也需要重新使用 gazebo 标签标注,因为之前的颜色设置为了方便调试包含透明度,仿真环境下没有此选项。

如果是标准集合体,复制visual的geometry和origin即可 

        
            
                
            
            
        

惯性矩阵

代表的是质量此处为6kg

 

        
            
            
            
        

启动Gazebo并显示模型

 launch 文件实现:

这个是直接用默认gazebo配置无需新建 empty_world.launch

这个launch是在gazebo_ros包里的



    
    

    
    

    
    

跟rviz不同还需要一行命令让gazebo显示机器人模型






ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第4张图片

 args="-urdf -model mycar -param robot_description"  />

-urdf 要用urdf类型数据 

-model mycar 模型取名叫mycar

 -param robot_description要加载的模型是从 robot_description获取的

命令行启动(去掉launch中的第三行加载模型)

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第5张图片

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第6张图片

 此时gazebo是空的

启动命令传给gazebo参数

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第7张图片

 集成到launch里启动

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第8张图片

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第9张图片

 此时就完成了

 URDF集成Gazebo相关设置

 较之于 rviz,gazebo在集成 URDF 时,需要做些许修改,比如:必须添加 collision 碰撞属性相关参数、必须添加 inertial 惯性矩阵相关参数,另外,如果直接移植 Rviz 中机器人的颜色设置是没有显示的,颜色设置也必须做相应的变更。

collision 

 如果机器人link是标准的几何体形状,和link的 visual 属性设置一致即可。

 inertial

 惯性矩阵的设置需要结合link的质量与外形参数动态生成,标准的球体、圆柱与立方体的惯性矩阵公式如下(已经封装为 xacro 实现):

推导见下面的链接

(67条消息) ROS漫漫长路(一)——Gazebo中机器人圆柱,球,长方体惯性矩阵推导与代码实现_lzzzzzzm的博客-CSDN博客_长方体的惯性矩阵

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第10张图片

 转动惯量的SI单位为kg·m²。对于一个质点,I=mr²,其中,m是其质量,r是质点和转轴的垂直距离。

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第11张图片

所以对称物体的ixy ixz iyz iyx iyz izx izy为0 

(因为积分为0)

 球体惯性矩阵


    
        
            
            
        
    

圆柱惯性矩阵


        
            
             
        
    

 立方体惯性矩阵

 
       
               
               
       
   

 需要注意的是,原则上,除了 base_footprint 外,机器人的每个刚体部分都需要设置惯性矩阵,且惯性矩阵必须经计算得出,如果随意定义刚体部分的惯性矩阵,那么可能会导致机器人在 Gazebo 中出现抖动,移动等现象。

颜色设置 

 在 gazebo 中显示 link 的颜色,必须要使用指定的标签:


     Gazebo/Blue

PS:material 标签中,设置的值区分大小写,颜色可以设置为 Red Blue Green Black .....

 URDF集成Gazebo实操

需求描述:

将之前的机器人模型(xacro版)显示在 gazebo 中

实现流程:

  1. 需要编写封装惯性矩阵算法的 xacro 文件

  2. 为机器人模型中的每一个 link 添加 collision 和 inertial 标签,并且重置颜色属性

  3. 在 launch 文件中启动 gazebo 并添加机器人模型

框架搭建 

 编写封装惯性矩阵算法的 xacro 文件

新建文件复制以下代码


    
    
        
            
            
        
    

    
        
            
             
        
    

    
       
               
               
       
   

把之前的小车xacro实现复制进来 

具体见 

(15条消息) ROS xacro URDF优化(十七)_啥也不是的py人的博客-CSDN博客https://blog.csdn.net/weixin_50920579/article/details/124189174?spm=1001.2014.3001.5501

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第12张图片

 修改car.urdf.xacro

要增加包含惯性矩阵的xacro

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第13张图片

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第14张图片

 底盘修改

因为直接用的之前的rviz的xacro文件,所以要对应进行修改

对link增加属性

 跟visual保持一致就行

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第15张图片

 调用xacro interia matrix



另外设置一下全局变量

 最后是颜色设置

    
      Gazebo/Yellow
    

此处就完成了车体部分设置

然后执行一下看看有没有错

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第16张图片

 可以看到车体正常显示了

雷达和摄像头还没有正常显示

驱动轮修改

添加

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第17张图片

 添加颜色

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第18张图片

 添加惯性矩阵

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第19张图片

 

运行

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第20张图片

 可以看到多出了红色的轮子

支撑轮修改

 设置

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第21张图片

 添加惯性矩阵

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第22张图片

 

 设置颜色

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第23张图片

 运行

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第24张图片

 传感器修改

 

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第25张图片

惯性矩阵 

 

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第26张图片

 

颜色设置 

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第27张图片

 雷达修改

先改支架

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第28张图片

惯性矩阵修改 

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第29张图片

 颜色修改

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第30张图片

 雷达修改

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第31张图片

惯性矩阵调用 

 

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第32张图片

 颜色修改

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第33张图片

运行

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第34张图片

 运行成功

Gazebo仿真环境搭建

 

到目前为止,我们已经可以将机器人模型显示在 Gazebo 之中了,但是当前默认情况下,在 Gazebo 中机器人模型是在 empty world 中,并没有类似于房间、家具、道路、树木... 之类的仿真物,如何在 Gazebo 中创建仿真环境呢?

Gazebo 中创建仿真实现方式有两种:

  • 方式1: 直接添加内置组件创建仿真环境

  • 方式2: 手动绘制仿真环境(更为灵活)

也还可以直接下载使用官方或第三方提高的仿真环境插件。

方式一:用别人的仿真环境 

以下为素材链接可以直接git clone下载 

 GitHub - zx595306686/sim_demoicon-default.png?t=M3K6https://github.com/zx595306686/sim_demo.git

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第35张图片

新建目录并且把.world放进去 

 

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第36张图片

 新建launch环境

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第37张图片

 world_name是固定参数

启动

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第38张图片

 方式二:自己搭建环境

启动gazebo

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第39张图片

然后自己搭建再另存为即可 

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第40张图片

另存为即可 

ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第41张图片 

 方式三:自定义仿真环境

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第42张图片

创建墙体 

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第43张图片

创建门窗 

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第44张图片

改变材质,改变颜色 

 ROS Gazebo安装入门及仿真室内环境和小车实现(十九)_第45张图片

 

使用官方提供的插件

当前 Gazebo 提供的仿真道具有限,还可以下载官方支持,可以提供更为丰富的仿真实现,具体实现如下:

 下载官方模型库

git clone https://github.com/osrf/gazebo_models

之前是:hg clone https://bitbucket.org/osrf/gazebo_models但是已经不可用

注意: 此过程可能比较耗时

3.2 将模型库复制进 gazebo

将得到的gazebo_models文件夹内容复制到 /usr/share/gazebo-*/models

3.3 应用

重启 Gazebo,选择左侧菜单栏的 insert 可以选择并插入相关道具了

你可能感兴趣的:(#,ros,ros)