前言:
自从webots2019开源后,我也决定去学习这个机器人仿真软件,总体来说非常令人满意。同僚刘福强和我是我们这片率先去自学这个仿真软件的。过程中,有许多艰辛。这个软件的教程在 络上只有这里说的非常详细,但是涉及的版本比较老,且有些地方可以用新的组件去替代。在此为大家介绍一些组件的使用,并去实现一个工程案例,以供后面的学弟们有所依据。这个案例是我和杨浩同学在学习中完成的。
由于Robocon近年来比赛都趋向于是用舵轮底盘,其可以实现更好的机动性能,在此建立一个仿真项目,可以在物理环境中验证自己的系统和算法。以下为总体实现:
图中红色部分为旋转电机,绿色为轮毂,蓝色为身体。
创建工程:
点击上方 Wizards -》 new project directory ,定义自己工作目录,命名自己的工程
建立好项目后,首先需要添加地面,右击左边空白地方,点击 Add New ,添加floor,具体如下:
在右栏可修改下面的相关参数,比如flooeSize,单位为m。
接下来最重要的就是添加机器人,右击左边空白地方,点击 Add New ,添加 Robot 如下:
参数设定如下:
translation表示的是平移机器人位置,定义name使我们在设定控制器时有所依据。boundingObject设定碰撞边界这与你的shape和transform有关。physics表示设定物理效果,里面可以设定密度和质量,由于形状固定,所以两者不可以同时设定。controller表示你的主要运行文件是什么,如果C或者C++则是编译好的exe文件,如果是python则是一个主要.py文件。此处以python为例。
首先需要给机器人添加一个身体,右击children属性,Add new,添加一个Shape,
DEF表示定义工程组件的名字,此处供开发人员辨识关系。可以看出主要定义的就是外观和形状,由于身体是长方体所以右击 geometry Add New在Base nodes中找到 Box,其他形状同理。然后设置参数。外观设置 为 右击 appearance Add New,添加Appearance ,此后双击Material,更改里面的diffuseColor即可。
给身体添加碰撞边界,右击boundingObject,添加在USE中寻找你所定义的Shape或者Transform,OK后你会发现物体边界出现白线。最后添加physics,设置相关质量或者密度参数。
身体定义后,此时需要定义lf_dir_motor(左前转向电机)关节位置。这里可以使用Servo方式,这种方法比较简单,但是但来的问题是没有办法获得角度反馈。此处我们使用HingeJoint组件。
由于和身体是父子坐标关系所以,HingeJoint需要添加在Body的children下面,和body_shape并行,鼠标点击body_shape,右击后Add New ,Base nodes中找到HingeJoint。以下是四个转向电机的构造
以 lf_dir为例,
设置左前轮转向机构的铰链轴 在左上方的位置,旋转轴为y轴正向。在device中添加motor,加速度,扭矩,最大速度可以依据需要设定,其自带了PID控制,所以只需要设定相关参数,从左到右为P,I,D,其是位置控制模式。name设置为 lf_dir_motor,这里为程序中寻找控制组件为依据。PositionSensor其实就是角度传感器,也是在程序中调用即可,其可以依据需要添加noise。
在endPoint中添加Solid组件,注意此处的坐标在body上,所以需要进行平移,设置如translation,在children中添加Shape,参数配置过程如Body。同理设置boundingObject和physics。
左前轮转向机构至此设置完成。此时需要添加左前轮轮毂。有轮毂和转向轮为串级坐标关系,所以接下来的组件需要在转向机构的children下面配置,具体可以参见上图。同理Add New,添加HingeJoint。同理配置相关的驱动参数,即可。这里电机定义为 lf_run_motor。
以上为具体的配置过程,需要注意的是,由于轮毂旋转绕中心轴所以定义jointParamenters axis为Z轴正方向,anchor在旋转机构坐标系Y轴偏下0.07m,同理 lf_run_Solid需要Y轴偏下0.07m,保证旋转中心重合。同时需要调整Cylinder绕X轴旋转90度作为轮子的模式,如lf_run_Solid rotation配置。同理其他添加boundingObject和physics。电机参数依据需要设定,配置过程如之前所述。
以上述流程设置四个舵轮系统就可以完成整个过程。
创建控制器:
点击上方 Wizards -》 New Robot Controller,具体如下:
选择非常多,这里我是用python,其要求环境为python3.7。创建的控制器会自动保存到文件系统的controller下面
但是有可能建立的机器人属性
controller.py 和 vehicle.py 是webots python的库,组件函数可以在里面寻找,非常方便,你可以在webots软件目录下找到,复制粘贴即可。
以上为简单的控制代码实现,底盘原地旋转过程。
最后,总的工程已经放在了我的Github上。
如果你觉得对你有很大的帮助,欢迎微信赞助,可以继续我的工作。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!