《Webots移动机器人仿真实例教程》全面介绍了Webots仿真软件的使用及其在各种机器人领域的应用。本书内容详尽,从Webots的基础入门到高级操作,既包括了软件安装、界面操作、节点编辑等基础知识,又涵盖了两轮差速机器人、四轮差速机器人、四足机器人、无人机、水下机器人、人形机器人等多种类型机器人的仿真案例。本书内容特色在于实用性和操作性,通过丰富的案例和详细的步骤指导,帮助读者快速掌握Webots的仿真技巧。此外,本书还提供了控制器编程环境的搭建和编程方法,让读者能够自主设计并实现复杂的机器人控制算法。
本书适合机器人专业的学生、科研工作者、工程师以及对机器人仿真感兴趣的读者阅读。无论是初学者还是有一定经验的用户,都能从本书中获得宝贵的指导和启示。通过阅读本书,读者能够更深入地理解Webots软件的功能和应用,提升自己在机器人仿真领域的技能和水平。
第1章 Webots入门
1.1 Webots简介 001
1.2 常用机器人仿真软件对比 002
1.3 Webots安装 003
1.3.1 Webots软件版本选择 003
1.3.2 Webots软件安装 005
1.3.3 GitHub网络安装 007
1.3.4 GitHub源文件下载安装 009
1.4 编译源文件中的控制器程序 011
1.5 初识机器人运动仿真 012
1.5.1 切换到中文界面 012
1.5.2 界面风格 012
1.5.3 软件自带的项目示例 013
1.5.4 认识仿真环境 014
1.5.5 编写一个简单的机器人仿真项目 015
1.5.6 Webots世界文件(.wbt) 023
1.5.7 节点描述文件(.proto) 024
1.5.8 控制器程序 028
1.6 Webots机器人运动仿真项目搭建思路 029
1.7 帮助文档及项目示例 029
1.7.1 在线帮助文档 031
1.7.2 及时查看在线帮助文档的方法 032
1.7.3 离线查看帮助文档 032
1.7.4 半离线查看帮助文档 033
1.7.5 项目示例文件 036
第2章 Webots基本操作
2.1 3D视图基本操作 037
2.1.1 调整视角 037
2.1.2 移动和旋转对象 037
2.1.3 恢复布局 037
2.2 人为施加力操作 038
2.3 工具栏 038
2.3.1 仿真时间及仿真速率 039
2.3.2 运行控制 039
2.3.3 渲染 039
2.3.4 录屏和声音 039
2.4 向导菜单 040
2.4.1 新建项目的主要步骤 040
2.4.2 新建项目目录向导 040
2.4.3 新建机器人控制器向导 041
2.4.4 Webots控制器程序运行原理分析 041
2.5 节点 042
2.5.1 添加节点 042
2.5.2 添加节点时无法看到缩略图 043
2.5.3 无法添加基础节点 044
2.6 对象的导出和导入 045
2.6.1 不同版本的Webots对文件格式导入和导出的支持 045
2.6.2 URDF文件的导入和导出 046
2.6.3 外部三维模型导入(stl、obj、dae)到Webots2022a 052
2.6.4 wbo模型的导入和导出 054
2.7 查看菜单 060
2.7.1 显示坐标系统 060
2.7.2 恢复视角 061
2.7.3 视角跟随机器人移动 061
2.7.4 移动视角到对象 062
2.7.5 显示摄像头视场 062
2.7.6 显示接触点 062
2.8 Overlays菜单 062
2.9 添加声音 063
2.9.1 添加电机旋转声音 063
2.9.2 添加碰撞声音 064
2.10 DEF和USE关键字 064
第3章 Webots的节点Node
3.1 世界、节点、节点属性 067
3.2 场景树 068
3.3 节点的通用属性 069
3.3.1 外观调整 069
3.3.2 位姿和缩放 074
3.3.3 DEF 和name属性 075
3.4 WorldInfo节点 076
3.4.1 基本属性 076
3.4.2 basicTimeStep基本仿真步长 077
3.4.3 接触属性contact- Properties 077
3.5 TexturedBackgroundLight光源节点 085
3.6 Viewpoint节点 086
3.7 RectangleArena地面节点 087
3.7.1 地面大小floorSize属性 087
3.7.2 地面外观floorAppearance Parquetry属性 088
3.7.3 地面外观appearance PBRAppearance属性 089
3.7.4 地面围墙 089
3.8 其他地面 090
3.9 实体Solid节点 090
3.9.1 基本属性 091
3.9.2 子节点children属性 091
3.9.3 物理physics属性 092
3.9.4 边界(周界)boundingObject属性 093
3.9.5 调整实体对象的大小和位姿 097
3.10 形状Shape节点 097
3.11 关节Joint节点 098
3.11.1 关节参数 099
3.11.2 设备device节点 102
3.12 旋转关节HingeJoint/Hinge2Joint节点 107
3.12.1 旋转关节 107
3.12.2 编程 109
3.12.3 示例1:简单旋转关节 109
3.12.4 示例2:关节的参数调节 110
3.13 滑动关节SliderJoint节点 111
3.13.1 滑动关节参数 111
3.13.2 示例1:简单滑动关节 111
3.13.3 示例2:滑动关节对比 113
3.13.4 示例3:滑动关节实现弹簧效果 114
3.14 球关节BallJoint节点 114
3.15 机器人Robot节点 115
3.15.1 机器人控制器controller 116
3.15.2 机器人控制器周期执行函数wb_robot_step() 116
3.15.3 机器人控制器与仿真器并行执行 118
3.15.4 同步与异步控制器synchronization 119
3.15.5 自碰撞检测selfCollision 119
3.15.6 显示机器人窗口 119
3.15.7 Controller属性 120
3.16 组Group节点 120
3.17 位姿变换Transform节点 121
3.18 发射器Emitter和接收器Receiver节点 122
3.18.1 发射器节点Emitter 123
3.18.2 接收器节点Receiver 124
3.18.3 函数及示例 125
3.19 LED节点 127
3.20 GPS节点 128
3.20.1 描述及属性 128
3.20.2 函数及示例 129
3.21 陀螺仪Gyro节点 130
3.21.1 描述及属性 130
3.21.2 函数及示例 131
3.22 罗盘Compass节点 132
3.22.1 描述及属性 132
3.22.2 函数及示例 133
3.23 惯性InertialUnit节点(IMU) 134
3.23.1 描述及属性 134
3.23.2 函数及示例 134
3.24 监控Supervisor节点 136
3.25 距离传感器DistanceSensor节点 136
3.25.1 属性 137
3.25.2 红外距离传感器 140
3.25.3 声呐传感器 140
3.25.4 编程 140
3.25.5 距离传感器示例 141
3.26 接触传感器TouchSensor节点 141
3.26.1 描述及属性 141
3.26.2 示例 142
3.27 螺旋桨Propeller节点 143
3.27.1 螺旋桨的推力和扭矩 143
3.27.2 螺旋桨的旋转方向和推力/扭矩方向 146
3.27.3 函数及示例 146
3.28 履带Track节点及履带轮TrackWheel节点 149
3.28.1 描述及属性 149
3.28.2 示例 152
3.29 流体Fluid节点及浸没属性immersionProperties节点 153
3.29.1 流体Fluid节点描述及属性 153
3.29.2 浸没属性immersionProperties节点 154
3.29.3 示例1:浮力 156
3.29.4 示例2:拖曳力之推动力 157
3.29.5 示例3:拖曳力之黏滞力 158
3.30 阻尼Damping节点 159
3.30.1 描述及属性 159
3.30.2 示例 159
3.31 摄像机Camera节点 160
3.31.1 描述及属性 160
3.31.2 相机的识别功能 161
3.31.3 保存相机图像到指定位置 163
3.32 顶点3D形状IndexedFaceSet节点 164
3.33 皮肤Skin节点 164
3.34 键盘输入 165
3.34.1 编程 166
3.34.2 键盘示例代码 166
3.35 仿真项目编辑流程 167
第4章 Webots控制器编程环境搭建
4.1 Python编程 168
4.1.1 Python和Webots联合仿真原理 168
4.1.2 Python环境设置 168
4.1.3 使用PyCharm运行Python控制器 169
4.1.4 使用Python解释器运行Python控制器 172
4.2 Matlab编程 174
4.2.1 Matlab和Webots联合仿真原理 174
4.2.2 Matlab环境设置 174
4.2.3 Matlab控制器程序使用 177
4.3 Visual Studio和Webots联合仿真 177
4.3.1 Visual Studio和Webots联合仿真原理 177
4.3.2 Webots设置 178
4.3.3 Visual Studio控制器程序使用 180
4.4 机器人窗口插件Robot Window Plugin 181
4.4.1 机器人窗口设置和使用 181
4.4.2 机器人窗口工作原理分析 182
4.4.3 机器人窗口补充说明 182
4.5 文件读写操作 183
第5章 Webots编程
5.1 控制器程序编程 184
5.1.1 编码格式与习惯 184
5.1.2 HelloWorld示例 185
5.1.3 读传感器示例 186
5.1.4 使用执行器示例 188
5.1.5 程序和场景对象的接口 189
5.1.6 仿真周期和控制周期 189
5.1.7 向控制器程序传递参数(C语言) 190
5.1.8 向控制器传递参数(Python) 191
5.1.9 多个机器人使用相同的控制器程序 192
5.1.10 控制器程序退出 193
5.1.11 Webots中的包含头文件 193
5.2 监控Supervisor节点编程 194
5.2.1 Supervisor节点工作原理 194
5.2.2 Supervisor节点示例1:基本操作 195
5.2.3 Supervisor节点示例2:为场景对象施加力和力矩 198
5.2.4 Supervisor节点常用函数和操作 200
5.3 C语言程序框架 209
5.4 Python语言程序框架 210
5.4.1 无监督的程序框架 210
5.4.2 有监督的程序框架 211
5.5 C语言与Python语言编程的运行差异 214
5.6 常用的库 215
5.7 常用函数 215
5.7.1 打印输出printf() 215
5.7.2 格式化输出ANSI_PRINTF_IN_BLACK() 216
5.7.3 返回仿真步长wb_robot_get_basic_time_step() 218
5.7.4 返回以秒为单位的系统仿真模拟时间wb_robot_get_time() 218
5.7.5 返回项目路径wb_robot_get_project_path() 219
5.7.6 C语言机器人初始化wb_robot_init()与清理环境wb_robot_cleanup() 219
5.7.7 获取对象句柄wb_robot_get_device() 219
5.7.8 设置电机位置wb_motor_set_position() 219
5.7.9 设置电机速度wb_motor_set_velocity() 220
5.7.10 获取电机速度wb_motor_get_velocity() 220
5.7.11 延时wb_robot_step()和自定义函数 221
第6章 两轮差速机器人仿真
6.1 搭建两轮差速机器人模型 222
6.1.1 添加机器人节点和车体 223
6.1.2 添加差速车轮 223
6.1.3 添加球轮 224
6.2 编写控制器程序 224
6.3 练习题:搭建两轮差速巡线机器人 225
第7章 四轮差速机器人仿真
7.1 搭建基本的四轮差速机器人 226
7.2 搭建具有基本避障功能的四轮差速机器人 230
7.3 练习题1:搭建四轮差速巡线机器人 232
7.4 练习题2:利用四轮差速机器人实现Bug2算法 232
第8章 机器人底盘仿真
8.1 全向轮的仿真 233
8.1.1 全向轮仿真结构 233
8.1.2 全向轮的控制 235
8.2 麦克纳姆轮的仿真 236
8.2.1 麦克纳姆轮仿真结构 236
8.2.2 设计自己的麦克纳姆轮小车 239
8.2.3 麦克纳姆轮小车的控制 240
8.3 练习题:RoboCup机器人大赛中型组仿真系统 242
第9章 四足机器人仿真
9.1 四足机器人模型的搭建 244
9.1.1 使用向导建立项目 245
9.1.2 添加机器人Robot节点 246
9.1.3 添加机器人身体 246
9.1.4 添加机器人头部 248
9.1.5 添加机器人右前腿 248
9.1.6 添加机器人另外三条腿 256
9.2 添加机器人控制器程序 258
9.2.1 单腿逆运动学分析 258
9.2.2 walk步态的说明 261
9.2.3 trot步态的说明 262
9.3 练习题:机器狗越障 263
第10章 无人机仿真
10.1 直升机仿真 264
10.2 四旋翼仿真 265
10.2.1 飞行原理 266
10.2.2 飞行控制系统 268
10.2.3 PID控制算法 268
10.2.4 仿真 268
10.3 练习题:四旋翼无人机群控 271
第11章 水下机器人仿真
11.1 水下螺旋桨推进机器人 272
11.2 水下仿生机器人 272
11.2.1 salamander仿真案例 272
11.2.2 animated_skin仿真案例 276
11.3 练习题:螺旋桨水下机器人仿真 277
第12章 人形机器人仿真
12.1 场景分析 279
12.1.1 机器人类型转换 279
12.1.2 机器人关节及连杆 279
12.2 程序分析 281
第13章 串联机器人仿真
13.1 使用Python的ikpy库 288
13.2 利用utils\motion.h播放关节角的动作序列 290
13.3 练习题:协作机器人抓取物体 291
第14章 轮椅机器人仿真
第15章 软件使用技巧
15.1 仿真软件中的对象大小 294
15.2 场景编辑的撤销功能 294
15.3 保存功能 294
15.4 软件的易用性操作 295
15.5 纹理、模型等资源文件的放置位置 296
15.6 360安全软件和杀毒软件 296
15.7 场景对象旋转90° 297
15.7.1 FLU、ENU和RUB、NUE坐标系统 298
15.7.2 解决办法 299
15.8 节点无法显示missing proto icon 301
15.9 地面似乎有弹性 302
15.10 从动轮的实现 303
15.11 移动机器人的控制 303
15.12 其他 304