【pybullet实践】环绕视角

1、resetDebugVisualizerCamera

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

需要 cameraDistance float 眼睛到相机目标位置的距离
需要 cameraYaw float 相机偏航角(度)左/右
需要 cameraPitch float 相机俯仰角(度)上/下
需要 cameraTargetPosition vec3 cameraTargetPosition是相机焦点
可选的 physicsClientId int 如果您连接到多台服务器,则可以选择一台

示例:

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.

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

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()
 

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

发布了42 篇原创文章 · 获赞 264 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_41045354/article/details/104837397