1.加重仿真计算复杂度的操作

1.1.定义两个地板

在创建地图的时候,导入机械的图纸。由于直接定义一个shape的碰撞节点作为地板,小车在路上走的时候会颠簸。最好的办法是碰撞边界定义为一个地板,走的时候会好很多。但是一开始由于觉得要分开红蓝两边地图,于是定义了两边地板。仿真的时候就报警告,说计算不过来。于是把地面的Solid全部放在一个Transform里,之后只定义一个地板节点(不能添加physic节点),仿真时就不会报警告了。

1.2.没有碰撞边界Solid接触

任何Solid节点接触位置一定要有碰撞边界,要是没有设置碰撞边界,也会导致仿真变卡,报警告。

例如:Solidworks的传过来的地板是有厚度的,但是当我们定义一个地板节点的时候,要是地板平面移动得不够高,地板上的物体就会发生穿模,仿真会报警告和变卡。

2.小车速度快了爆裂

原因:这是因为仿真步长太长,计算不够多,导致仿真出错,整个东西直接爆点。

解决方法:更改 WorldInfo 節點的欄位值。

              BasicTimeStep:將預設值降低到 16 (甚至 8 )(代码也要改)

3.添加了碰撞边界也会往下掉

機器人可能太重了物理結構。

您可以透過更改 WorldInfo 節點的欄位值( https://www.cyberbotics.com/doc/reference/worldinfo )來解決這個問題。 以下是重要領域:

4.电机角度值问题

在我得到一台完整步兵时,想按照RM的跟随代码仿真底盘跟随云台,但是后面发现,事情并没有这么简单。

我刚开始的设想是用 wb_motor_get_target_position 函数获取 YAW 轴电机的角度值,底盘跟随 PID 闭环,然后使用陀螺仪读取角度值,作为 YAW 轴电机的角度值,从而实现底盘跟随。但是后来发现,YAW 轴电机PID算出来后通过 wb_motor_set_velocity 函数给电机速度,这样就会导致一个问题,wb_motor_get_target_position 函数只能返回 0 值,除非使用 wb_motor_set_position 直接给目标角度给电机才能读到值,也就是 YAW 轴只能使用电机环,那就无法跟随。除非底盘也使用一个陀螺仪,与云台的陀螺仪作差值,但是这样与实际不符合,所以不可行。也就是说并没有什么意义。淦!!!!!