一、前言与在线资料
与Gazebo相比,Webots的中文入门资料相对较少,且基本上都是从Webots官方入门教程中摘取部分翻译出来的。要想了解Webots的全貌,还得从Webots官方文档出发。
Webots官方文档中,核心文档主要有三份,建议的学习或阅读顺序依次是:
(1)入门教程:https://www.cyberbotics.com/doc/guide/index
(2)参考手册:https://www.cyberbotics.com/doc/reference/index
(3)自动驾驶专题:https://www.cyberbotics.com/doc/automobile/index
另外,还有两份文档,一份是关于最新动态的(主要是版本更新日志和最新功能介绍),另一份是关于技术问答的。
(1)最新动态:https://www.cyberbotics.com/doc/blog/index
(2)技术问答:https://www.cyberbotics.com/doc/discord/index
同时,官方还提供了云端仿真环境,供研究者或兴趣者测试相关算法,并在测试结束后生成排名。
(1)云端服务:https://robotbenchmark.net/
二、本文目的与离线文档
第一次学习Webots时就全面阅读了两三遍《入门教程》和《参考手册》,并结合实际操作做了详细的笔记,但所作笔记都是浓缩的要点且某些要点从不同的章节总结而来,也有一些当时认为不重要点没记录。当过了较长一段时间没使用Webots,希望看笔记快速回忆时,发现不能确切地将某些知识点映射到《入门教程》或《参考手册》对应的章节。于是又重新浏览一遍《入门教程》,浏览过程中发现的确很多知识点都是熟悉的或目前不关注的,如果能直接定位到自己期望的知识点,那将节省不少的时间。
基于以上目的,决定用中文提炼出《入门教程》各个章节的要点,以供后续快速定位参考。同时,对一些我认为较基础或较重要的内容作详细说明。由于我主要的编程语言是C/C++和Python,所以涉及到编程语言相关的知识点,首先聚焦在C/C++,其次是Python,Java&Matlab将忽略。
不知道是不是墙的原因,国内网打开Webots在线官方文档很慢,甚至很多时候打不开(外网则很顺畅)。然而,其实Webots安装后,官方文档也相应的安装了,位于WEBOTS_HOME/docs下。直接用浏览器打开index.html是不可行的,需要按README.md操作。
首先,在WEBOTS_HOME/docs打开终端运行python -m http.server 8000。
然后,在浏览器中输入链接即可。
http://localhost:8000/?url=&book=guide
http://localhost:8000/?url=&book=reference
http://localhost:8000/?url=&book=automobile
http://localhost:8000/?url=&book=blog
或者直接单击MainGUI->Help->Offline document在MainGUI中查看,但不如浏览器中阅读得劲。
三、入门教程各章节要点
本文内容是基于Webots2020-rev2-doc撰写。
前言(Foreword):知道Webots于2018年基于Apache2.0开源。
致谢(Thanks):略
1.直接安装(Installing Webots)
1.1系统要求(System Requirements):主机不要是10年前的就行、系统选Ubuntu长期支持版或Win8.1X64或Win10
1.2显卡要求(Verifying Your Graphics Driver Installation):选NVIDIA或AMD就对啦、安装或更新到最新驱动准没错
1.3如何安装(Installation Procedure)
官网说了多种方法,我自己总结了两种简单易行的安装方式。
(1)对于Ubuntu:下载deb包执行apt-get install ./webots_2020b-rev1_amd64.deb,ubunut20.04默认安装到/usr/local/webots。
(2)对于Windows:下载exe包直接双击安装即可。
1.4关于许可证(Webots license agreement):主体是Apache2.0协议,部分插件是Webots Assets协议,部分社区贡献的插件提供了独立的使用许可证。
1.5用户数据收集(Telemetry):详细注明要收集客户端的哪些数据、可在MainGUI->Tools->Preference相应处禁用。
1.6帮助翻译文档(Translating Webots to Your Own Language):希望你帮助把Webots文档翻译成自己国家的语言,并告诉你如何呈交给Webots官方。
2.编译安装(Building Webots):略
3.基础知识(Getting Started with Webots)
3.1Webots简介(Introduction to Webots)
介绍什么是Webots、可以用Webots做什么、一个Webots工程的组成、什么是World、什么是Controller、什么是Supervisor Controller,具体可参见官方文档。以下是我认为时间久了容易忘记的点,这些点不一定是核心但得知道。
(1)Webots提供了许多机器人模型和控制代码,可以帮助使用者快速开始。
(2)Webots提供了许多与实际机器人(如EPuck、Nao)相同的API,使得控制程序可以无缝应用到真实的机器人。
(3)Supervisor是属性supervisor为TRUE的Robot。
3.2启动Webots(Starting Webots)
Ubuntu和Windows直接单击应用图标都能启动,这里不多说明。首重说明以下三点。
(1)root账户启动问题:我习惯于直接使用root账户,如果是在root账户下使用webots,每次启动需要附加参数--no-sandbox,稍显不便,更关键的是后续与ROS2结合使用Launch启动时,无处输入--no-sandbox参数,导致无法启动。解决方案是在/usr/local/webots相应处添加--no-sandbox参数。具体修改如下:
if command -v primusrun >/dev/null 2>&1; then
primusrun "$webots_home/bin/webots-bin" "$@" "--no-sandbox" &
else
"$webots_home/bin/webots-bin" "$@" "--no-sandbox" &
fi
(2)终端启动命令:webots [options] [worldfile]。以下是常用选项。
--fullscreen:全屏启动
--minimize:最小窗口启动
--mode=pasue/realtime/run/fast
--stdout:重定向输出到终端(默认输出到GUI终端)
--stderr:重定向错误到终端(默认输出到GUI终端)
(3)安全启动模式:Webots默认打开上次关闭的World,打开这个World,可能会因为其依赖的OpenGL存在问题一直卡在启动界面,若出现这种问题,可新增环境变量WEBOTS_SAFE_MODE并设为true,此时启动Webots就会打开一个空World。若想每次启动Webots不打开上次关闭的World或想打开一个空的World,也可以这么操作。
3.3主界面介绍(The User Interface):略
3.4三维窗口介绍(The 3D Window)
介绍如何选择部件及其子部件、如何操作相机、如何操作部件、如何使用叠层窗,总结如下。
(1)操作相机
旋转相机:按下鼠标左键并拖动(若选中对象则以其为旋转中心否则以相机自身为旋转心)
平移相机:按下鼠标右键并拖动
缩放相机:按下鼠标中键并拖动
复合操作:按下鼠标双键并拖动(水平拖动为旋转、垂直拖动为缩放、斜拖动则旋转并缩放)
(2)操作对象
旋转对象:选中对象平移轴并按下鼠标左键拖动
平移对象:选中对象旋转轴并按下鼠标左键拖动
缩放对象:Ctrl
平行地面平移:选中对象并按下Shift和鼠标左键拖动
环绕地轴旋转:选中对象并按下Shift和鼠标右键拖动
平行地轴平移:选中对象并按下Shift和鼠标中键或左右键拖动
作用力到对象:指向作用点并按下Alt和鼠标左键拖动
作用转矩到对象:指向作用点并按下Alt和鼠标右键拖动
(3)叠层窗口
共有在类叠窗:相机设备、深度设备、显示设备
叠窗可以*缩放尺寸、可以隐藏、双击转换为独立窗口
3.5场景树介绍(The Scene Tree):常用界面、不易遗忘、不强调。
3.6终端介绍(The Console):可并存多个终端、每个终端可绑定指定控制器、每个终端可绑定指定日志类型
3.7首选项介绍(Preferences)
详见文档或打开软件查看。这里重点阐述两点。
(1)General选项卡可设置:默认界面语言、默认启动模式(pasue/realtime/run/fast)、默认Python版本
(2)OpenGL选项卡最佳渲染配置:AmbientOcclusion=Ultra、TextureQuality=High、MaxTextureFiltering=5、DisableShadows=False、DisableAntiAliasing=False。最佳性能配置则配置为相反的值。
3.8引用Webots(Citing Webots):略
3.9外设支持(Computer Peripherals):知道支持游戏手柄和虚拟现实头盔、且有手柄编程接口Joystick,详见文档。