Gazebo教程(三)——model文件结构

1、简介

Gazebo可以通过编程或者GUI在仿真过程中动态加载models,models在下载或者创建之后会存储在电脑中,这篇教程将介绍model的文件目录结构,以及model必须包含的文件。

Gazebo中的models定义了一个动态的、带运动仿真、可视化的实体,此外,一个model可能包含一个或者多个可以影响model运行的plugins,一个mode可以表征一个小物块也可以表征一个复杂的机器人,甚至整个大地也是一个model。

Gazebo依靠一个数据库来在仿真中存储和保持models,model的数据库是一个团队支持的资源,所以希望你上传你创建和使用的model到数据库。

2、model的数据库路径

    git clone https://bitbucket.org/osrf/gazebo_models
 3、model数据库结构
一个model的数据库必须遵循一个特定的文件目录格式,每个model包含一个文件夹,一个databasee.config文件包含数据库信息,一个model.config文件包含model的基本数据。一个model的文件夹还必须包含材料、网格、插件以及sdf文件。

数据库的目录结构如下,例子中的目录只包括model_1一个model。

Database

  • database.config : Meta data about the database. This is now populated automatically from CMakeLists.txt
  • model_1 : A directory for model_1
    • model.config : Meta-data about model_1
    • model.sdf : SDF description of the model
    • model.sdf.erb : Ruby embedded SDF model description
    • meshes : A directory for all COLLADA and STL files
    • materials : A directory which should only contain the textures and scripts subdirectories
      • textures : A directory for image files (jpg, png, etc).
      • scripts : A directory for OGRE material scripts
    • plugins: A directory for plugin source and header files

3.1 database config

database.config文件包含license、名称和所有models的目录,这个文件只有在在线model库里面需要,本地的库不需要这个文件。该文件的格式如下:

<?xml version='1.0'?>
<database>
  <name>name_of_this_database</name>
  <license>Creative Commons Attribution 3.0 Unported</license>
  <models>
    <uri>file://model_directory</uri>
  </models>
</database>

<name> database的名字

<license> license名称,推荐Creative Commons Attribution 3.0 Unported

<models> 一个包含所有model的URIs的列表。

<uri> model的路径,例如 file://model_directory_name

3.2 model config

每个model都必须包含一个model.config文件,这个文件包含model的原始数据,格式如下。

<?xml version="1.0"?>

<model>
  <name>My Model Name</name>
  <version>1.0</version>
  <sdf version='1.5'>model.sdf</sdf>

  <author>
    <name>My name</name>
    <email>name@email.address</email>
  </author>

  <description>
    A description of the model
  </description>
</model>

<name> model的名称

<version> 版本号

<sdf> 描述这个model的sdf或者urdf文件

<author> model创建者的名字

<description> model的描述

<depend> 所有该model使用的依赖,一般是指其他models

<model> 依赖的model

<uri> 依赖model的路径

<version>model的版本

3.3 Model SDF

每个model需要一个model.sdf文件,这个文件包含了所有的仿真描述文件,后面的教程中会详细描述。

3.4 Model SDF.ERB

用于包含其他类型的文件,暂时不讨论。

vim命令进阶

参考博客:http://blog.csdn.net/php_897721669/article/details/7054841

初级:

  • iInsert 模式,按ESC回到Normal模式.
  • x → 删当前光标所在的一个字符。
  • :wq → 存盘+退出(:w存盘:q退出)(注::w后可以跟文件名)
  • dd →删除当前行,并把删除的行存到剪贴板里
  • p →粘贴剪贴板
  • hjkl移动光标命令
  • :help <command>→显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(注:退出帮助需要输入:q)

入门级:

1.各种插入模式

  • a → 在光标后插入
  • o → 在当前行后插入一个新行
  • O → 在当前行前插入一个新行
  • cw → 替换光标所在位置的一个单词

2.简单的移动光标

  • 0 → 数字零,到行头
  • ^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
  • $ → 到本行行尾
  • g_ → 到本行最后一个不是blank字符的位置。
  • /pattern → 搜索 pattern 的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)

 

3.拷贝/粘贴 (陈皓注:下面的P应该不分大小写)

  • P → 粘贴
  • yy → 拷贝当前行当行于 ddP

4.Undo/Redo

  • u → undo
  • <C-r> → redo

5.打开/保存/退出/改变文件(Buffer)

  • :e <path/to/file>→打开一个文件
  • :w →存盘
  • :saveas <path/to/file>→另存为 <path/to/file>
  • :x, ZZ 或 :wq→保存并退出(:x表示仅在需要时保存,ZZ不需要输入冒号并回车)
  • :q! → 退出不保存 :qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。
  • :bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)

中级:

  • . →(小数点)可以重复上一次的命令
  • N<command>→重复某个命令N次
  • NG→到第N行(注:注意命令中的G是大写的,另我一般使用:N到第N行,如:137到第137行)
  • gg→到第一行。(注:相当于1G,或:1)
  • G→到最后一行。
  • 按单词移动:
  • w →到下一个单词的开头。
  • e →到下一个单词的结尾。
  • Word moves example

光标移动:

  • % : 匹配括号移动,包括 (, {, [. (陈皓注:你需要把光标先移到括号上)
  • * 和 #:匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)

 

你一定要记住光标的移动,因为很多命令都可以和这些移动光标的命令连动。很多命令都可以如下来干:

<start position><command><end position>

例如 0y$ 命令意味着:

  • 0 → 先到行头
  • y → 从这里开始拷贝
  • $ → 拷贝到本行最后一个字符
  • 你可可以输入 ye,从当前位置拷贝到本单词的最后一个字符。

    你也可以输入 y2/foo 来拷贝2个“foo”之间的字符串。

    还有很多时间并不一定你就一定要按y才会拷贝,下面的命令也会被拷贝:

    • d (删除 )
    • v (可视化的选择)
    • gU (变大写)
    • gu (变小写)
    • 等等

专家级:

  • 0 →到行头
  • ^ →到本行的第一个非blank字符
  • $ →到行尾
  • g_ →到本行最后一个不是blank字符的位置。
  • fa →到下一个为a的字符处,你也可以fs到下一个为s的字符。
  • t, →逗号前的第一个字符。逗号可以变成其它字符。
  • 3fa →在当前行查找第三个出现的a。
  • F 和 T →和 f 和 t 一样,只不过是相反方向。
  • Line moves
  • dt" →删除所有的内容,直到遇到双引号—— "

区域选择<action>a<object><action>i<object>

在visual模式下,这些命令很强大,其命令格式为

<action>a<object><action>i<object>

  • action可以是任何的命令,如 d(删除), y (拷贝),v(可以视模式选择)。
  • object可能是: w一个单词, W一个以空格为分隔的单词, s一个句字, p一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]。

假设你有一个字符串 (map (+) ("foo")).而光标键在第一个 的位置。

  • vi" → 会选择 foo.
  • va" → 会选择 "foo".
  • vi) → 会选择 "foo".
  • va) → 会选择("foo").
  • v2i) → 会选择 map (+) ("foo")
  • v2a) → 会选择 (map (+) ("foo"))

Text objects selection

块操作: <C-v>

块操作,典型的操作: 0 <C-v> <C-d> I-- [ESC]

  • ^ →到行头
  • <C-v> →开始块操作
  • <C-d> →向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
  • I-- [ESC] →I是插入,插入“--”,按ESC键来为每一行生效。

Rectangular blocks

在Windows下的vim,你需要使用 <C-q>而不是 <C-v> ,<C-v> 是拷贝剪贴板。

自动提示: <C-n> 和 <C-p>

在Insert模式下,你可以输入一个词的开头,然后按 <C-p>或是<C-n>,自动补齐功能就出现了……

Completion

宏录制:qa操作序列 q, @a, @@

  • qa把你的操作记录在寄存器 a。
  • 于是 @a 会replay被录制的宏。
  • @@是一个快捷键用来replay最新录制的宏。

示例

在一个只有一行且这一行只有“1”的文本中,键入如下命令:

  • qaYp<C-a>q
    • qa开始录制
    • Yp复制行.
    • <C-a>增加1.
    • q停止录制.
  • @a →在1下面写下 2
  • @@ →在2 正面写下3
  • 现在做 100@@ 会创建新的100行,并把数据增加到 103.

Macros

可视化选择: v,V,<C-v>

前面,我们看到了 <C-v>的示例(在Windows下应该是<C-q>),我们可以使用 vV。一但被选了,你可以做下面的事:

Once the selection made, you can:

  • J→把所有的行连接起来(变成一行)
  • <>→左右缩进
  • = →自动给缩进(注:这个功能相当强大,我太喜欢了)

Autoindent

在所有被选择的行后加上点东西:

  • <C-v>
  • 选中相关的行(可使用 j 或 <C-d> 或是 /pattern 或是 % 等……)
  • $到行最后
  • A,输入字符串,按ESC。

Append to many lines

分屏::splitvsplit.

下面是主要的命令,你可以使用VIM的帮助 :help split. 你可以参考本站以前的一篇文章VIM分屏

  • :split → 创建分屏 (:vsplit创建垂直分屏)
  • <C-w><dir> : dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一个,其用来切换分屏。
  • <C-w>_ (或 <C-w>|) :最大化尺寸 (<C-w>| 垂直分屏)
  • <C-w>+ (或 <C-w>-):增加尺寸

Split

米勒效应

MOSFET的栅极驱动过程,可以简单的理解为驱动源对MOSFET的输入电容(主要是栅源极电容Cgs)的充放电过程;当Cgs达到门槛电压之后, MOSFET就会进入开通状态;当MOSFET开通后,Vds开始下降,Id开始上升,此时MOSFET进入饱和区;但由于米勒效应,Vgs会持续一段时间不再上升,此时Id已经达到最大,而Vds还在继续下降,直到米勒电容充满电,Vgs又上升到驱动电压的值,此时MOSFET进入电阻区,此时Vds彻底降下来,开通结束。 由于米勒电容阻止了Vgs的上升,从而也就阻止了Vds的下降,这样就会使损耗的时间加长。(Vgs上升,则导通电阻下降,从而Vds下降)。

米勒效应在MOS驱动中臭名昭著,他是由MOS管的米勒电容引发的米勒效应,在MOS管开通过程中,GS电压上升到某一电压值后GS电压有一段稳定值,过后GS电压又开始上升直至完全导通。为什么会有稳定值这段呢?因为,在MOS开通前,D极电压大于G极电压,MOS寄生电容Cgd储存的电量需要在其导通时注入G

极与其中的电荷中和,因MOS完全导通后G极电压大于D极电压。米勒效应会严重增加MOS的开通损耗。(MOS管不能很快得进入开关状态) 所以就出现了所谓的图腾驱动!选择MOS时,Cgd越小开通损耗就越小。米勒效应不可能完全消失。MOSFET中的米勒平台实际上就是MOSFET处于“放大区”的典型标志,用示波器测量GS电压,可以看到在电压上升过程中有一个平台或凹坑,这就是米勒平台。

Ciss=Cgs+Cgd

Coss=Cds+Cgd

Crss=Cgd

一般推荐值加0.1Ciess的电容。

对于一般驱动电路来说,如下图。

简化模型如下。

振荡分析。

如果我们简化一下,用Rg代表所有栅极电阻阻值(RL较小,公式左边忽略),用Coss代表最小CL极限,则可以获得Rg的最小要求就是:

要使电路稳定,我们可以朝着增大Rg、减少RL、选取小Coss的器件、增大Ciss、减小传输线负载电容等方向去努力。