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

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

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

Centos环境下Tomcat虚拟主机配置详细教程

《Centos环境下Tomcat虚拟主机配置详细教程》这篇文章主要讲的是在CentOS系统上,如何一步步配置Tomcat的虚拟主机,内容很简单,从目录准备到配置文件修改,再到重启和测试,手把手带你搞定... 目录1. 准备虚拟主机的目录和内容创建目录添加测试文件2. 修改 Tomcat 的 server.X

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

VSCode配置Anaconda Python环境的实现

《VSCode配置AnacondaPython环境的实现》VisualStudioCode中可以使用Anaconda环境进行Python开发,本文主要介绍了VSCode配置AnacondaPytho... 目录前言一、安装 Visual Studio Code 和 Anaconda二、创建或激活 conda

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中