
\qquad ① 创建模型目录
mkdir -p ~/.gazebo/models/my_robot
\qquad ② 创建模型配置文件
gedit ~/.gazebo/models/my_robot/model.config
\qquad 元数据(config)内容如下:
<model>
<name>My Robotname>
<version>1.0version>
<sdf version='1.4'>model.sdfsdf>
<author>
<name>My Namename>
<email>me@my.emailemail>
author>
<description>
My awesome robot.
description>
model>
\qquad ② 创建模型配置文件
gedit ~/.gazebo/models/my_robot/model.sdf
\qquad 必要标记(sdf)内容如下:
<sdf version='1.4'>
<model name="my_robot">
model>
sdf>
\qquad ① 令机器人模型静态
注意:在static标签后将会在link标签下生成对应部件,通过collision的name隔开,故在后代码展示中则会忽略一部分,请自行补充
<sdf version='1.4'>
<model name="my_robot">
<static>truestatic>
model>
sdf>
\qquad ② 创建长方体的底座
代码解释:
- box 标签,用于产生对应尺寸的长方体
- collision 标签,指定碰撞尺寸
- visual 标签,指定视觉尺寸,常见情况下与collision相同
<sdf version='1.4'>
<model name="my_robot">
<static>truestatic>
<link name='chassis'>
<pose>0 0 .1 0 0 0pose>
<collision name='collision'>
<geometry>
<box>
<size>.4 .2 .1size>
box>
geometry>
collision>
<visual name='visual'>
<geometry>
<box>
<size>.4 .2 .1size>
box>
geometry>
visual>
link>
model>
sdf>
\qquad ③ 创建脚轮(万向轮)
注意:脚轮固定在底座上,故二者同属一个link
<collision name='caster_collision'>
<pose>-0.15 0 -0.05 0 0 0pose>
<geometry>
<sphere>
<radius>.05radius>
sphere>
geometry>
<surface>
<friction>
<ode>
<mu>0mu>
<mu2>0mu2>
<slip1>1.0slip1>
<slip2>1.0slip2>
ode>
friction>
surface>
collision>
<visual name='caster_visual'>
<pose>-0.15 0 -0.05 0 0 0pose>
<geometry>
<sphere>
<radius>.05radius>
sphere>
geometry>
visual>
link>
\qquad ④ 创建前轮和后轮
注意:前轮和后轮分别创建了新的link
<link name="left_wheel">
<pose>0.1 0.13 0.1 0 1.5707 1.5707pose>
<collision name="collision">
<geometry>
<cylinder>
<radius>.1radius>
<length>.05length>
cylinder>
geometry>
collision>
<visual name="visual">
<geometry>
<cylinder>
<radius>.1radius>
<length>.05length>
cylinder>
geometry>
visual>
link>
<link name="right_wheel">
<pose>0.1 -0.13 0.1 0 1.5707 1.5707pose>
<collision name="collision">
<geometry>
<cylinder>
<radius>.1radius>
<length>.05length>
cylinder>
geometry>
collision>
<visual name="visual">
<geometry>
<cylinder>
<radius>.1radius>
<length>.05length>
cylinder>
geometry>
visual>
link>
\qquad ⑤ 导入Gazebo可视化模型

注意:修改SDF文件后,只需要删除原有模型重新插入就会更新模型
<static>falsestatic>
<joint type="revolute" name="left_wheel_hinge">
<pose>0 0 -0.03 0 0 0pose>
<child>left_wheelchild>
<parent>chassisparent>
<axis>
<xyz>0 1 0xyz>
axis>
joint>
<joint type="revolute" name="right_wheel_hinge">
<pose>0 0 0.03 0 0 0pose>
<child>right_wheelchild>
<parent>chassisparent>
<axis>
<xyz>0 1 0xyz>
axis>
joint>

.world文件: gedit velodyne.world
<sdf version="1.5">
<world name="default">
<include>
<uri>model://sunuri>
include>
<include>
<uri>model://ground_planeuri>
include>
world>
sdf>

<model name="velodyne_hdl-32">
<link name="base">
<pose>0 0 0.029335 0 0 0pose>
<collision name="base_collision">
<geometry>
<cylinder>
<radius>.04267radius>
<length>.05867length>
cylinder>
geometry>
collision>
<visual name="base_visual">
<geometry>
<cylinder>
<radius>.04267radius>
<length>.05867length>
cylinder>
geometry>
visual>
link>
<link name="top">
<pose>0 0 0.095455 0 0 0pose>
<collision name="top_collision">
<geometry>
<cylinder>
<radius>0.04267radius>
<length>0.07357length>
cylinder>
geometry>
collision>
<visual name="top_visual">
<geometry>
<cylinder>
<radius>0.04267radius>
<length>0.07357length>
cylinder>
geometry>
visual>
link>
model>
cd ~/
gazebo velodyne.world -u



注意:紫色框对应关联的链接大小,此时模型没有惯性信息,故尺寸过大
在< link name=“base” >块中添加以下内容:
<link name="base">
<pose>0 0 0.029335 0 0 0pose>
<inertial>
<mass>1.2mass>
<inertia>
<ixx>0.001087473ixx>
<iyy>0.001087473iyy>
<izz>0.001092437izz>
<ixy>0ixy>
<ixz>0ixz>
<iyz>0iyz>
inertia>
inertial>
在< link name=“top” >块中添加以下内容:
<link name="top">
<pose>0 0 0.095455 0 0 0pose>
<inertial>
<mass>0.1mass>
<inertia>
<ixx>0.000090623ixx>
<iyy>0.000090623iyy>
<izz>0.000091036izz>
<ixy>0ixy>
<ixz>0ixz>
<iyz>0iyz>
inertia>
inertial>
最终效果如下:

<joint type="revolute" name="joint">
<pose>0 0 -0.036785 0 0 0pose>
<parent>baseparent>
<child>topchild>
<axis>
<xyz>0 0 1xyz>
<limit>
<lower>-10000000000000000lower>
<upper>10000000000000000upper>
limit>
axis>
joint>
1. 启动Gazebo,右键单击模型,选择View->Joints,View->Transparent

2. 打开右面板,选择Velodyne模型。使用Force选项卡向关节施加较小的,可看到关节旋转即可

激光传感器,可以发出一个或多个光束,光束产生距离和强度数据,对应SDF文件中的< scan >和< range >,分别对应波束的布局、数量和限定束的性质,其中< scan >中包含< horizontal >和< vertical >两个块。< horizontal >组件定义在水平平面中发出的光线,该< vertical >组件定义在垂直平面中发出的光线,Velodyne传感器需要垂直射线,然后旋转。我们将其模拟为旋转的水平扇面。
<sensor type="ray" name="sensor">
<pose>0 0 -0.004645 1.5707 0 0pose>
<visualize>truevisualize>
<update_rate>30update_rate>
<ray>
<scan>
<horizontal>
<samples>32samples>
<resolution>1resolution>
<min_angle>-0.53529248min_angle>
<max_angle>0.18622663max_angle>
horizontal>
scan>
<range>
<min>0.05min>
<max>70max>
<resolution>0.02resolution>
range>
ray>
sensor>

在< sensor >的子标签< ray >中添加如下代码:
<noise> <type>gaussiantype> <mean>0.0mean> <stddev>0.1stddev> noise>
- 1
- 2
- 3
- 4
- 5
- 6
效果如下:


