造车日记 第六篇
第二阶段alpha
下面准备整合毫米波雷达。
不过在这之前,需要先把ROS搞定,因为我已经快要受不了“裸奔”的状态了。
然而在整合ROS之前,我又看了一眼仿真器。
机器人仿真软件
维基百科中有一篇对目前主流的机器人仿真软件进行了详细的比对
我目前选择了webots
这货原本是个商业软件,但是2018年后拥抱了开源。
几番学习和试用之后,感觉蛮好玩的,在此介绍一下。
概念
安装配置什么的就不用说了,Linux下面都是一条命令的事儿。
先介绍几个概念
开发步骤
从全局来看,使用模拟器进行机器人开发的步骤包含:
- 建立和导入 环境、机械、传感器等模型
- 编写控制程序
- 进行仿真
- 放到真机中实测
世界(World)
在一个webots项目中,有一个唯一的 *.wbt 文件。
这个文件就是当前的“世界”,包含了机器人(群)和它(们)所处环境的三维描述。
所有对象的位置、方向、几何形状、外观、物理属性等一切信息都包含其中。
wbt使用结构化存储,可以包含其他文件(例如用CAD软件生成的模型)。
但是wbt不包含任何可执行代码。
控制器(Controller)
webots中的控制器,就是一段计算机代码,它实际控制世界中的机器人行为。webots支持的语言有:
- C/ C++
- Python
- 其它(Java/ Matlab)
当模拟器运行的时候,webots启动对应的控制器,每一个控制器对应一个操作系统进程。
超级控制器(Supervisor Controller)
在wbt中定义的机器人Robot会有很多属性,当其中的”supervisor”域被置位”TRUE”的时候,这个机器人的控制器将会有额外的权限,通常是控制模拟器本身的行为,例如将机器人瞬间移动到一个位置,或者进行模拟的视频录制等等。
一个例子
随便打开一个webots自带的例子
当模拟器进入工作状态后,显卡将一直出于工作状态,在我的笔记本上(thinkpad T480s), 如果用intel 集成显卡,复杂一点儿3D界面会有卡顿,甚至会影响到其它GUI程序的流畅度,如果切换成让mx150去渲染的话,整个过程会丝滑很多。
从头创建一个真正的例子
创世纪
新建一个项目,选上默认的场景和灯光。。
完了之后,左侧的节点树中会增加一些东西。
零号号机器人
在世界里添加一个机器人。
e-puck 是一个mini机器人,使用一对差速轮控制。
修改行为
正如前文所述,每个机器人都一个控制器选项,默认的控制器代码,是一个简单的防止碰撞代码。
现在把它改掉,改成”extern”
代码
现在来编写一个ros node, 同时导入webots的模块,成为ROS和 webots的中介。
打开iPython, 键入如下代码
当最后一行输入的时候,注意webots已经受到程序控制。
同时,一个新的ros 节点也会被创建出来, 像这样
继续输入代码
- 分别获取左右电机的控制描述符
- 设置成速度控制模式,并让左右轮相反转动
- 让ROS节点运行起来
最后就能看到webots里的机器人,被这个ipython里的脚本控制得团团转。
to be continued…