前言
目前AGV小车主要是使用舵轮来进行行走,灵活性高,驱动轮能量利用率高。我们在webots中简单模拟一下舵轮,并用纯追踪算法对其路径点进行追踪。舵轮创建流程
首先需要在webots中创建一个地板,点击Add New按钮或者ctrl+shift+A,PROTO nodes(Webots Projects) -> objects -> floors -> UnevenTerrain(Solid)创建一个地板,然后将size修改为 50 0 50。 创建机器人主体,点击Add New按钮,Base nodes -> Robot。在Robot的children下面新加一个Shape节点。
将Shape节点进行命名Body,以便后续设置boundingObject。将translation设置为0 0.2 0,将坐标系在y方向提升0.2m。然后设置physics跟boundingObject。设置boundingObject时双击然后点击Use -> Body(Shape)。
有appearance NULL和geometry NULL两个选项,双击appearance NULL选择Base nodes -> PBRAppearance,小车的底盘是一个长方体,因此geometry NULL我们选择Base nodes -> Box,并将size修改为0.6 0.1 0.6。添加完boundingObject之后,点击小车底盘,出现白色线条表示碰撞边界已经添加成功。
接下来添加舵轮的旋转电机和驱动电机。我们需要添加HingeJoint节点,HingeJoint节点可以用来模拟旋转运动。我们需要在children下边新加HingeJoint节点,使HingeJoint与Body节点保持在同一节点下。将HingeJoint节点命名为left_dir_wheel。HingeJoint节点下有JointParameters NULL、device、endPoint NULL三个节点。
双击JointParameters NULL节点,选择Base nodes -> HingeJointParameters;双击device节点,选择Base nodes -> RotationalMotor,机器人控制器程序可以使用RotationalMotor节点生成围绕其铰链轴的旋转运动;双击endPoint NULL节点,选择Base nodes -> Solid。
以上三个节点的参数设置如下所示。
jointParameters:旋转电机是绕y轴旋转,因此需要将axis修改为0 1 0;锚点为矩形体的左前方,因此需要将anchor修改为0. 3 0 0.3。
RotatioalMotor:电机名称改为lf_dir_motor,以便后续控制模块调用。
endPoint Solid:旋转结构的中心位于矩形体的左前方,因此translation修改为0.3 0 0.3;children下设置一个Shape,命名为lf_dir_wheel;然后设置physics和boundingObject,boundingObject选择Use -> lf_dir_wheel(Shape)。
DEF lf_dir_wheel Shape下边有appearance NULL和geometry NULL两个选项,双击appearance NULL选择Base nodes -> PBRAppearance,旋转部分设置为一个圆柱体,因此geometry NULL我们选择Base nodes -> Cylinder,并将radius设置为0.06,height设置为0.1。
然后在该级节点下创建HingeJoint节点,与DEF lf_dir_wheel Shape节点同级,命名为lf_run_wheel。该HingeJoint节点下同样有JointParameters NULL、device、endPoint NULL三个节点。
双击JointParameters NULL节点,选择Base nodes -> HingeJointParameters;双击device节点,选择Base nodes -> RotationalMotor,机器人控制器程序可以使用RotationalMotor节点生成围绕其铰链轴的旋转运动;双击endPoint NULL节点,选择Base nodes -> Solid。
以上三个节点的参数设置如下所示。
jointParameters:旋转电机是绕x轴旋转,axis默认为1 0 0,不需要修改;锚点在当前坐标系的下方轮中心位置,因此将anchor修改为0 -0.1 0。
RotatioalMotor:电机名称改为lf_run_motor,以便后续控制模块调用。
endPoint Solid:旋转结构的中心位于当前坐标系下方轮中心位置,因此translation修改为0 -0.1 0;驱动轮需要绕z轴旋转90°,因此rotation修改为00 0 1 1.5708;children下设置一个Shape,命名为lf_run_wheel;然后设置physics和boundingObject,boundingObject选择Use -> lf_run_wheel(Shape)。
DEF lf_run_wheel Shape下边有appearance NULL和geometry NULL两个选项,双击appearance NULL选择Base nodes -> PBRAppearance,旋转部分设置为一个圆柱体,因此geometry NULL我们选择Base nodes -> Cylinder,并将radius设置为0.05,height设置为0.03。
至此,一个舵轮已经完成,复制其余三个修改translation、anchor以及电机的名称即可。可以通过修改电机的PID参数、速度、加速度等参数使小车的运动更符合实际。
更多内容关注微信公众号:深度学习与路径规划