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

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

相关文章

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

gradle安装和环境配置全过程

《gradle安装和环境配置全过程》本文介绍了如何安装和配置Gradle环境,包括下载Gradle、配置环境变量、测试Gradle以及在IntelliJIDEA中配置Gradle... 目录gradle安装和环境配置1 下载GRADLE2 环境变量配置3 测试gradle4 设置gradle初始化文件5 i

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

Python实现局域网远程控制电脑

《Python实现局域网远程控制电脑》这篇文章主要为大家详细介绍了如何利用Python编写一个工具,可以实现远程控制局域网电脑关机,重启,注销等功能,感兴趣的小伙伴可以参考一下... 目录1.简介2. 运行效果3. 1.0版本相关源码服务端server.py客户端client.py4. 2.0版本相关源码1

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推