控制小车在仿真环境中移动

2024-08-24 20:08

本文主要是介绍控制小车在仿真环境中移动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

urdf——Gazebo——ros_control——MoveIt

1、gazebo_ros程序包路径                     /opt/ros/kinetic/share/gazebo_ros

                           worlds路径                    /usr/share/gazebo-7/worlds           

记得怎么运行完 gazebo的launch之后 键入命令行 killall gzserver ;否则,打开另一个launch会黑屏。    

urdf和Gazebo中的单位应以米和千克为单位,重力加速度为 9.81 m/s^2。                                          

2、roslaunch启动gazebo                        

2-1、roslaunch参数:

paused    以暂停状态启动Gazebo(默认为false)

use_sim_time    告诉ROS节点要求时间获取Gazebo发布的模拟时间,通过ROS主题/时钟发布(默认为true)

gui   启动Gazebo的用户​​界面窗口(默认为true)

headless (不推荐) recording    启用状态日志记录

debug     使用gdb以调试模式启动gzserver(Gazebo Server)(默认为false)

verbose  使用--verbose运行gzserver和gzclient,将错误和警告打印到终端(默认为false)

实例:(在明令行加入参数)

roslaunch gazebo_ros empty_world.launch paused:= true use_sim_time:= false gui:= true throttled:= false recording:= false debug:= true verbose:= true

2.2 world file

无特殊要求均可用 empty.world

2.3

在catkinMake 文件里添加依赖的包,在package.xml文件里添加依赖项。

2.4 将urdf文件加载到gazebo中

2.4.1 方法一:ROS服务调用Spawn

这种方法保持机器人相对于ROS包路径的位置,但需要使用小型(python)脚本进行ROS服务调用。

方法原理:使用一个python脚本--spawn_modelgazebo_ros中的ROS节点(在rostopic命名空间中简称为“gazebo”)发出服务调用请求,以将自定义URDF添加到Gazebo中。该spawn_model脚本位于gazebo_ros包中。

方法实例:

rosrun gazebo_ros spawn_model -file `rospack find MYROBOT_description`/urdf/MYROBOT.urdf -urdf -x 0 -y 0 -z 1 -model MYROBOT

rosrun gazebo_ro spawn_model -file urdf文件的绝对路径 -urdf -x ? -y ? -z ? -model 模型名  (xyz为模型加载到gazebo初始坐标)

可将该服务调用直接集成到ROS启动文件中,在</launch>标记之前添加以下内容:

<!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find baxter_description)/urdf/baxter.urdf -urdf -z 1 -model baxter" />

<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param urdf中robot的参数 -urdf -model urdf模型名" />

 

针对于xacro文件

<!-- Convert an xacro and put on parameter server -->
<param name="robot_description" command="$(find xacro)/xacro.py $(find pr2_description)/robots/pr2.urdf.xacro" /><!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model pr2" />

2.4.1方法二:模型数据库法

第二种方法允许您将机器人包含在.world文件中

3、在Gazebo中使用URDF

Universal Robotic Description Format (URDF) 是ROS用于描述机器人的所有元素的XML文件格式。要在Gazebo中使用URDF文件,必须添加一些其他特定于模拟的标记才能与Gazebo一起正常工作。

3.1 背景

虽然URDF在ROS中是一种有用且标准化的格式,但它们缺乏许多功能,并且尚未更新以应对机器人技术不断变化的需求。URDF只能单独指定单个机器人的运动和动态属性。URDF无法在一个世界中指定机器人本身的姿势。它也不是通用描述格式,因为它不能指定关节循环(并联连接),并且它缺乏摩擦和其他属性。在实现方面,URDF语法在大量使用XML属性的情况下破坏了正确的格式,这反过来又使URDF更加不灵活。也没有向后兼容的机制。

为了解决这个问题,创建了一种称为模拟描述格式(SDF)的新格式 ,用于Gazebo以解决URDF的缺点。SDF是从世界级到机器人级的所有内容的完整描述。它具有可扩展性,可以轻松添加和修改元素。SDF格式本身使用XML进行描述,这有助于使用简单的升级工具将旧版本迁移到新版本。为了解决这个问题,创建了一种称为模拟描述格式(SDF)的新格式 ,用于Gazebo以解决URDF的缺点。SDF是从世界级到机器人级的所有内容的完整描述。它具有可扩展性,可以轻松添加和修改元素。SDF格式本身使用XML进行描述,这有助于使用简单的升级工具将旧版本迁移到新版本。

3.2概述

必要的标签:

可选标签:

3.3<gazebo> 元素

<gazebo>元素是URDF的扩展,用于指定Gazebo中模拟所需的其他属性。它允许您指定以SDF格式找到的未包含在URDF格式中的属性。元素中的<gazebo>元素都不是必需的,因为将自动包含默认值。有三种不同类型的<gazebo>元素 - 一种用于<robot>标记,一种用于<link>标记,一种用于<joint>标记。

  • rrbot.gazebo 是一个Gazebo特定文件,包含我们大多数特定于Gazebo的XML元素,包括 标签
  • materials.xacro 一个简单的Rviz颜色文件,用于存储rgba值,不是必需的,但是一个很好的约定

3.3.1 <robot>标签的<gazebo> 元素 

如果在没有reference=""属性的情况下使用<gazebo>元素,则假定该<gazebo>元素用于整个机器人模型。

<gazebo>标签的内部元素<robot>元素列在下表中:

NameTypeDescription
staticboolIf set to true, the model is immovable. Otherwise the model is simulated in the dynamics engine.

如果您希望将URDF模型永久地附加到世界框架(地平面),则必须创建“world”link并将其固定到模型基础的关节。

3.3.2 <collision><visual>元素

这些标签在Gazebo中与在Rviz中的标签基本相同。尽管如此,重要的是要指定两者,因为与某些ROS应用程序不同,如果您没有明确指定元素,Gazebo将不会将您的<visual>元素用作<collision>元素<collision>

urdf中的颜色属性无法在gazebo中显示需要借助 gazebo 辅助文件来完成,必须为每个link指定Gazebo材质标记<material>

3.3.3 link的<gazebo>元素

NameTypeDescription
materialvalueMaterial of visual element
gravityboolUse gravity
dampingFactordoubleExponential velocity decay of the link velocity - takes the value and multiplies the previous link velocity by (1-dampingFactor).
maxVeldoublemaximum contact correction velocity truncation term.
minDepthdoubleminimum allowable depth before contact correction impulse is applied
mu1doubleFriction coefficients μ for the principal contact directions along the contact surface as defined by the Open Dynamics Engine (ODE) (see parameter descriptions in ODE's user guide)
mu2
fdir1string3-tuple specifying direction of mu1 in the collision local reference frame.
kpdoubleContact stiffness k_p and damping k_d for rigid body contacts as defined by ODE (ODE uses erp and cfm but there is a mapping between erp/cfm and stiffness/damping)
kd
selfCollideboolIf true, the link can collide with other links in the model.
maxContactsintMaximum number of contacts allowed between two entities. This value overrides the max_contacts element defined in physics.
laserRetrodoubleintensity value returned by laser sensor.

3.4 joint的 <gazebo>  元素

并非URDF中记录的所有元素都适用于Gazebo

必须: <origin><parent><child>

省略:<calibration>,<safety_controller>

可选:<dynamics>标签只有damping可用,<limit>标签中的所有属性都是可选的

NameTypeDescription
stopCfmdoubleJoint stop constraint force mixing (cfm) and error reduction parameter (erp) used by ODE
stopErp
provideFeedbackboolAllows joints to publish their wrench data (force-torque) via a Gazebo plugin
implicitSpringDamperboolIf this flag is set to true, ODE will use ERP and CFM to simulate damping. This is a more stable numerical method for damping than the default damping tag. The cfmDamping element is deprecated and should be changed to implicitSpringDamper.
cfmDamping
fudgeFactordoubleScale the excess for in a joint motor at joint limits. Should be between zero and one.

3.5 验证urdf是否能转成SDF

gz sdf -p MODEL.urdf

 

4、在Gazebo的插件

Gazebo插件为您的URDF模型提供更多功能,可以为传感器输出和电机输入提供ROS消息和服务调用。

4.1 插件类型

Gazebo支持 多种插件类型,并且所有插件类型都可以连接到ROS,但只能通过URDF文件引用几种类型:

  • ModelPlugins,提供对physics :: Model API的访问
  • SensorPlugins,提供对sensors:: Sensor API的访问
  • VisualPlugins,提供对rendering :: Visual API的访问

4.2添加 ModelPlugin

modelplugin插件 插入到<robot>元素内的<gazebo>元素下.

<robot>... robot description ...<gazebo><plugin name="differential_drive_controller" filename="libdiffdrive_plugin.so">... plugin parameters ...</plugin></gazebo>... robot description ...
</robot>

4.3添加 SensorPlugin

添加 传感器插件略有不同, 将sensor 插件看成link形式与gazebo联系.

<robot>... robot description ...<link name="sensor_link">... link description ...</link><gazebo reference="sensor_link"><sensor type="camera" name="camera1">... sensor parameters ...<plugin name="camera_controller" filename="libgazebo_ros_camera.so">... plugin parameters ..</plugin></sensor></gazebo></robot>

4.4 gazebo_plugins中提供的插件

4.4.1

4.4.2

4.4.3

 

 

 

 

 

 

 

 

 

 

 

 

 

这篇关于控制小车在仿真环境中移动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads