pybullet API学习笔记-仿真时间、力矩控制、位置控制

bullet 仿真时间、力矩控制、位置控制

​ 参考文献: https://pybullet.org/wordpress/index.php/forum-2/

​ 参考代码: https://github.com/unitreerobotics/unitree_pybullet

  • 前言

    ​ 该学习笔记主要对笔者项目所需的API进行学习记录,不会对Bullet进行系统介绍,目前介绍内容主要包括:仿真时间、力矩控制、位置控制、(状态反馈)。另外,笔者水平有限,大家有认为不对的地方,欢迎批评指正。一起学习,快乐无限~

    ​ bullet的GUI连接模式是双核的,物理仿真引擎计算占一个线程,GUI界面显示占一个线程。一个进行数值上的计算,一个将计算的结果用图形化的方式展示出来。但是物理仿真引擎计算会按照用户设置的时间进行计算,而GUI界面只会按照固定频率刷新。

在这里插入图片描述

通俗理解就是:

  1. stepSimulation(delta_t), delta_t < 0.01666,则bullet只在后台计算物体世界坐标变化,GUI界面不显示该变化,只有在0.01666s以后才更新该变化。

  2. stepSimulation(delta_t), delta_t > 0.01666),则bullet在一个仿真时间步内会多次更新GUI界面。

注意:delta_t 的变化不会影响仿真结果,但是如果添加了控制命令,就有可能影响仿真结果了。那么接下来就看加上控制的区别。

力矩控制

  • 用速度模式模拟力矩控制(模式1)
# 该控制方法比较接近真实的物理环境。
maxForce = 0
mode = p.VELOCITY_CONTROL
p.setJointMotorControl2(objUid, jointIndex, controlMode=mode, force=maxForce)

​ 1. 仿真时间设置:stepSimulation(delta)

运行到congtrol函数时会在delta时间步内都对关节施加力矩。delta越长,力矩持续时间越长。

time.sleep(t) 连用时:仿真引擎暂停 t 秒,然后再让仿真引擎进入下一个时间步。t 变化不影响仿真结果。

​ 2. 仿真时间设置:setRealTimeSimulation()

按照RTC(Real-Time Colck)进行控制,类似与stepSimulation(delta)模式,频率为10000HZ的样子。

time.sleep(t) 连用时:仿真引擎每 t 秒采样一次控制命令,然后按照RTC进行控制直到下一次采样。t 变化影响仿真结果。

  • 力矩控制模式(模式2)
# 使用该控制模式时,控制指令相当与施加给关节的外力,只有施加外部力矩足够关节抵抗惯性矩阵产生加速度时,关节才会转动。否则关节静止。肢体重力产生的力矩并不会让关节转动。
p.setJointMotorControlArray(quadruped, jointIds, p.TORQUE_CONTROL, forces=torque_value)

​ 1. 仿真时间设置:stepSimulation() (当控推荐使用)

同上。运行到congtrol函数时:会在delta时间步内都对关节施加力矩。delta越长,力矩持续时间越长。

同上。与time.sleep(t) 连用时:仿真引擎暂停 t 秒,然后再让仿真引擎进入下一个时间步。t 变化不影响仿真结果。

​ 2. 仿真时间设置:setRealTimeSimulation()

单独使用时:同上。按照RTC(Real-Time Colck)进行控制,类似与stepSimulation(delta)模式,频率为10000HZ的样子。

time.sleep(t) 连用时:仿真引擎每 t 秒采样一次控制命令,然后按照RTC进行控制直到下一次采样。

位置控制

p.setJointMotorControl2(quadruped, jointIds[j], p.POSITION_CONTROL, targetPos, force=maxForce)

​ 1. 仿真时间设置:stepSimulation()

即使当前时间步内没有到达需要的位置,也会继续执行下一步仿真。如果在该时间步内达到位置,则等待时间步结束,然后开始下一个时间步仿真。

time.sleep(t) 连用时:仿真引擎暂停 t 秒,然后再让仿真引擎进入下一个时间步。t 变化不影响仿真结果。

​ 2. 仿真时间设置:setRealTimeSimulation()

单独使用时:不建议使用,该模式要求尽可能快的到达指定位置。如果没有到达,则继续开始下一个指令

time.sleep(t) 连用时:仿真引擎每 t 秒采样一次控制命令,然后按照RTC进行控制直到下一次采样。

仿真时间

  • stepSimulation()
  1. 单独使用

该API用来完成一步仿真,默认仿真步长为 1/ 240s。只有运行该函数时,仿真引擎才会运行。

力矩控制模式:会在整个仿真时间步都施加相应的力矩。仿真时间步越长,力矩持续时间越长。

位置控制模式:即使当前时间步内没有到达需要的位置,也会继续执行下一步仿真。如果在该时间步内达到位置,则等待时间步结束,开始下一个时间步仿真。

  1. 与*p.setTimeStep(1/240)*连用 :

用来设置仿真时间步长,即设置仿真引擎在 1/240s 内运行一次。

  1. 与*time.sleep(10)*连用 :

该函数与 stepSimulation() API一起连用时,无论是力控模式还是位控模式都不影响仿真结果, 只是方便观察

作用:仿真引擎暂停 10s 然后再让仿真引擎进入下一个时间步。

  • setRealTimeSimulation()

setRealTimeSimulation() 对 DIRECT 模式没有影响。

1. 单独使用

力矩控制模式1:推荐使用。物理引擎会尽快的采样控制命令,然后一直执行直到下一次采样。

位置控制模式:不建议使用,该模式要求尽可能快的到达指定位置。但是仿真引擎达不到那么快的响应。

2. 与 time.sleep(10) 连用

该函数会影响仿真结果,在该10秒内仿真引擎会继续运行。

力矩控制模式1(p.VELOCITY_CONTROL):仿真引擎每 10秒 采样一次控制命令,然后一直执行该命令直到下一次采样。

力矩控制模式2(p.TORQUE_CONTROL) : 关节控制指令会暂停10秒,10秒后再执行下一个控制指令。

位置控制模式:同力矩控制模式2。

  • 注意:

不能将 p.setRealTimeSimulation()p.stepSimulation() 一同使用

一同使用时,仅运行p.stepSimulation()的相应模式,不会运行p.setRealTimeSimulation()

状态反馈

  • getBasePositionAndOrientation

作用:获得笛卡尔世界坐标系下的机身当前位置和姿态,其中姿态为四元数的表达形式。
输入参数:机身ID
输出参数:位置向量[x,y,z], 姿态向量[x, y, z, w]

  • getEulerFromQuaternion

作用:将四元数格式转化为欧拉角格式
输入参数:四元数格式[x, y, z, w]
输出参数:欧拉角RPY格式[roll, pitch, yaw]

  • invertTransform

作用:

  • multiplyTransforms

作用:转换一种坐标系到另一种坐标系系统
输入参数:A的位姿,B的位姿(位姿代表位置和姿态)
输出参数:位置向量,姿态向量[x, y, z, w]

状态估计器用到的API

  • getBaseVelocity

作用:获得笛卡尔世界坐标系下的机身的线速度和角速度
输入参数:机身ID
输出参数:线速度[x, y, z], 角速度[wx, wy, wz]。

摆动相轨迹用到的API

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Carsim是一种车辆动力学模拟软件,用于模拟车辆的运动行为和动力学特性。转向力矩控制是Carsim中的一项功能,用于控制车辆的转向动作。 转向力矩控制是通过对车辆的转向系统施加特定的力矩来实现车辆转向的过程。该控制方法通常通过车辆操纵系统中的转向机构传递力矩到车轮,从而产生转向动作。 在Carsim中,转向力矩控制可以通过多种方式实现。一种常见的方法是使用电动助力转向系统,该系统通过电机产生力矩来辅助驾驶员的转向操作。另一种方法是使用液压助力转向系统,该系统通过液压力矩转换器产生力矩来辅助转向。 在Carsim中,转向力矩控制可以通过调整控制参数来实现,例如调整助力转向系统中的助力系数或液压助力转向系统中的液压阻尼系数。通过调整这些参数,可以改变转向系统的灵敏度和转向力矩响应速度,从而影响整个车辆的操控性能。 转向力矩控制对车辆的操控性能具有重要影响。合理地调整转向力矩可提高车辆的操控稳定性、转向精度和驾驶员的操控感受。因此,在使用Carsim进行车辆动力学模拟时,合理地设定转向力矩控制参数是非常重要的。 综上所述,Carsim中的转向力矩控制是通过施加特定的力矩来实现车辆的转向动作。通过调整控制参数,可以改变转向系统的灵敏度和响应速度,从而影响整个车辆的操控性能。 ### 回答2: CARSim转向力矩控制是一种用于汽车动态控制的技术。转向力矩控制是指通过调节汽车的转向力矩,来改变汽车的转向响应和稳定性。 在CARSim中,转向力矩控制是通过控制转向系统中的电动助力转向(Electric Power Steering, EPS)系统实现的。EPS系统通过操纵转向机构,为驾驶员提供较佳的转向操纵感觉和车辆稳定性。 转向力矩是驾驶员在转向操作中需要施加的力量,它影响汽车的转向速度和转向角度。转向力矩控制的目标是在满足驾驶员的操纵意图的同时,使车辆的转向响应平稳和稳定。 在CARSim中,转向力矩控制的实现通常采用车辆动力学模型和控制算法。首先,通过建立车辆动力学模型,可以获取车辆的转向特性和操纵性能。然后,通过控制算法计算出实现期望转向响应的转向力矩指令。最后,将转向力矩指令传递给EPS系统,使其调节转向系统的输出力矩。 通过转向力矩控制,可以改善车辆的转向稳定性和操纵性能。例如,可以减小车辆的转向迟滞和转向过程中的震动,提升车辆的操纵舒适性。此外,转向力矩控制还可以根据不同的驾驶条件和路面状态,自动调节转向系统的输出力矩,提升车辆的安全性和稳定性。 总而言之,CARSim转向力矩控制是一种用于调节汽车转向响应和稳定性的技术。通过控制EPS系统中的转向力矩,可以提升车辆的操纵性能和安全性。这一技术对汽车制造商和驾驶员来说具有重要意义。 ### 回答3: Carsim转向力矩控制是指通过控制车辆的转向力矩来实现车辆的转向动作。转向力矩是指施加在车轮上的力矩,用于改变车轮的方向和角度。在Carsim中,通过控制转向力矩来调整车辆的转弯半径和稳定性以及改善车辆操控性能。 转向力矩控制通常应用于电子稳定控制系统(ESC)中,通过传感器监测车辆的行驶状态来实时调整转向力矩,确保车辆在转弯时的稳定性和安全性。 具体的转向力矩控制策略可以根据车辆的操控需求和驾驶情况来设计。一种常见的控制策略是根据车辆的侧滑角(即车辆横向滑移角)来调整转向力矩。当车辆出现侧滑时,控制系统会增大转向力矩来改变车轮的方向,使车辆重新稳定。 此外,转向力矩控制还可以与其他系统结合使用,例如牵引力控制系统(TCS)和制动力控制系统(ABS)。通过综合利用这些系统的信息和控制策略,可以更精确地调整转向力矩,提升车辆的操控性能和安全性。 总之,Carsim转向力矩控制是通过调整车辆的转向力矩来实现转向动作,并提升车辆的操控性能和安全性。这一控制策略可以应用于电子稳定控制系统中,并结合其他系统来实现车辆的稳定转弯和行驶安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值