Webots+ROS学习记录(5)——用Webots仿真六轮山地车
Webots+ROS学习记录(5)——用Webots仿真六轮山地车
之前潦草记录了6轮全地形山地车得仿真过程,自己又自学了几天Webots,更改了一下模型,仔细修改了一下物理参数,现在重新写一篇文章来记录此山地车得仿真过程。与此同时,我也在学习ROS和Webots的通信,其中又很多service上的内容我不太熟悉,熟悉后会继续写ROS联合仿真相关的。
山地车情况
准备搭建的小车整车长约4.4米,宽约2米,高约1.4米,重量约2000Kg,如图所示。整车轮距约1.6米,轴距约1.6米。
设计思路
山地车要满足跨越障碍、跨越沟壑的山地使用条件,所以对其进行受力分析后,采取最简单的每个*都有悬架,都为轮毂电机驱动的方案。当山地车跨越障碍时,前轮靠后轮的正向压力产生的驱动力可以向上爬坡。
对每个*单独的控制可以更加精确的控制车速、方向,以适应在沙石底面的行走。
车体
首先搭建山地车的车体,长方体。要注意,和学习记录(3)不同的是,这里我们选用的是Transform而非Shape,有它作为基坐标,对后续的车轮、车腿的位置的确定有很大的便利。
- Geometry-box-size (4.4 1.4 2)
- PBRAppearance中可以调整仿真的材质、颜色等,我选了一个自己认为比较好看的url,为textures/steel_floor.jpg。
左前轮
左前轮分为两个部分,一个是用于悬架的HingeJoint,一个是用于轮胎的HingeJoint,中间用摇臂连接。
- 用于悬架的Front_Left_Joint
当HingeJoint用于非电机的设备(单纯的旋转部件)时,应该把device设置为空缺。
- JointParameters是对该旋转部件的参数设置
其中axis是是该旋转部件绕哪个轴旋转,anchor是只该旋转部件的旋转原点位置mim/max stop是最大旋转量,springConstant是绕旋转轴的弹性系数,dampingConstant是绕旋转轴的阻尼系数。SuspensionSpringConstant和SuspensiondampingConstant是在suspensionAxis上的悬架的弹性系数和阻尼系数。
我们是要让这个旋转部件做一个悬架,所以应该设置springConstant和dampingConstant两个参数为合适值,然后订好最大最小形变量。Anchor一会儿再设置。
- 接下来将endPoint设置为solid,这就是旋转部件的实体。
将旋转部件的实体的translation设置在合适的位置,与此同时这个值(0.8 -0.3 -1.1)设置为上面JointParameters中anchor的值。
- 子节点
这个实体节点包含两个子节点,一个是它的形状,一个是它末端的轮胎的hingeJoint节点,先说形状。
形状我们先用transform来构建,因为设计到旋转,所以选用transform。这里的构建方法和车体的方法一样,要注意坐标的相对关系。
- 用于轮胎的Front_Left_Wheel_Joint
HingeJoint轮胎的参数和学习记录(3)的设置过程一样,这里把截图贴上来。
在device里面首先要注意name字段的填写,填写name字段才能在控制器里面调用。其次是最大速度,要保证最大速度大于控制器里面的速度。然后是最大扭矩。这些都是和车轮旋转相关的参数。
前后四轮的搭建方式都差不多,就不再列出来了
中轮
中轮也是由两个部件组成,一个构成悬架,一个构成轮胎,中间由刚体腿连接。
- 在这里我把中间轮腿当作一个刚体,所以用了solid节点。
Solid节点包含两个子节点,一个是leg的形状,一个是*的电机。形状节点就不再赘述了。
- *HingeJoint节点
*HingeJoint节点要注意的是,在webots里HingeJoint可以选择是一个悬架,只需要修改SuspensionSpringConstant和SuspensiondampingConstant以及suspensionAxis三个参数就行。
suspensionAxis设置为(0 0.15 0),意思是悬架在Y轴的行程为0.15m。
两个中间轮都是差不多的搭建方法。
boundingObject的设置
boundingObject是实体的边界定义,一般来说,在仿真里面,边界不应该定义得太过复杂,以避免计算出错。在我的模型中,都是以给对应形体的transform填入DEF,然后再boundingObject里面使用USE选择。
遇到的问题
- 车体陷下地面
不知道大家在仿真的时候有没有遇见过车体陷下地面的情况。这是由于Webots的world设置问题。
在worldInfo里面,有一个CFM参数,这个参数和物体的柔软度相关。将其改小,就能修改减少物体下陷的情况。
- 车头上扬
起步的时候,会有车头上扬的情况,这是由于汽车加速时,作用于悬架的向前的力的作用点比车的重心低。所以,不管前驱后驱,加速时车头都会上扬。相反,制动时车会点头。这问题是不分驱动形式的。悬架越软,重心越高的车这种现象越明显。至于轴荷转移是这种现象的结果。
我的处理方式是将车的重心调低。
控制器的编写
控制器大概用到了三个函数
wb_motor_set_position(wheels[i], INFINITY);
wb_motor_set_velocity(wheels[i],
SPEED);
wb_keyboard_get_key()
之后会总结更多的函数用法,专门写一篇文章出来。