【pybullet教程5】环绕视角

1、resetDebugVisualizerCamera

我们要用到resetDebugVisualizerCamera这个api。您可以设置3D OpenGL调试可视化程序相机距离(在眼睛和相机目标位置之间),相机偏航和俯仰
以及相机目标位置。它的参数如下:

需要cameraDistancefloat眼睛到相机目标位置的距离
需要cameraYawfloat相机偏航角(度)左/右
需要cameraPitchfloat相机俯仰角(度)上/下
需要cameraTargetPositionvec3cameraTargetPosition是相机焦点
可选的physicsClientIdint如果您连接到多台服务器,则可以选择一台

示例:

pybullet.resetDebugVisualizerCamera(cameraDistance = 3,cameraYaw = 30,cameraPitch = 52,cameraTargetPosition = [0,0,0])

2、原理

在这里插入图片描述
如图,根据几何关系我们有以下结论:
{ x = r sin ⁡ α y = r cos ⁡ α \left\{\begin{matrix} x = r\sin\alpha\\ y = r\cos\alpha\\ \end{matrix}\right. {x=rsinαy=rcosα

因此,我们可以给定角速度 ω \omega ω,计算相机位置[x, y],让其实现指定半径的圆周运动。然后根据与x轴的夹角调整相机角度。根据几何关系我们可以知道 r o l l = α roll = \alpha roll=α

3、程序

思路:

  • 导入相关库
  • 连接物理引擎
  • 设置文件路径
  • 主循环,更新相加位置
import pybullet as p
import pybullet_data as pd
import numpy as np

p.connect(p.GUI)
p.setAdditionalSearchPath(pd.getDataPath())
plane = p.loadURDF("plane.urdf")

roll = 0
radius = 1
speed = 0.001
while 1:
    # 当完成一个周期后roll值归0,避免数值过大
    if roll > 360:
        roll = 0
    roll += speed
    # 根据起始位置不同需要调整相位,这里是[1, 0],注意单位转换
    x = radius*np.cos(roll * np.pi / 180)
    y = radius*np.sin(roll * np.pi / 180)
    # 设置相机位置
    p.resetDebugVisualizerCamera(radius, roll+90, -30, [x, y, 1])
    p.stepSimulation()
 

效果:
在这里插入图片描述


如果觉得ok,点个赞,点个关注,也欢迎给个打赏支持一下编者的工作
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页