【问题标题】:Create multiple instances of pybullet client within a python class在 python 类中创建多个 pybullet 客户端实例
【发布时间】:2020-08-13 17:14:17
【问题描述】:

我在 python 类中使用 pybullet。我将其导入为import pybullet as p。 当我有几个使用 pybullet 的类实例时,每个实例的类 p 是相同的,还是每个实例的“变量”p 是唯一的?

foo.py

import pybullet as p

class Foo:
    def __init__(self, counter):
        physicsClient = p.connect(p.DIRECT)
    def setGravity(self):
        p.setGravity(0, 0, -9.81)
(more code)

和 main.py

from foo import Foo

foo1 = Foo(1)
foo2 = Foo(2)
foo1.setGravity()

setGravity() 会影响 foo1 和 foo2 中的 p 还是只影响 foo1?

【问题讨论】:

  • p 不是传统意义上的变量;它是一个模块,因此对于每个 Foo 实例都是相同的。
  • 当您尝试您所描述的内容时,您观察到了什么行为?
  • “影响 foo1 和 foo2 中的 p 还是仅影响 foo1”是什么意思? ?你的意思是如果你在 foo1 上调用 setGravity() 会影响 foo2 的重力吗?
  • 顺便说一句:在“setGravity”方法中,你忘记写self像这样:def setGravity(self)
  • @yAzou 是的,如果我在一个 foo[x] 中调用它会影响每个 foo[_] @afghanimah 的重力有没有办法让它特定于一个实例?

标签: python python-3.7 bullet python-class


【解决方案1】:

您可以使用 bullet_client 获取两个不同的实例。像这样:

import pybullet as p
import pybullet_utils.bullet_client as bc


class Foo:
    def __init__(self, counter):
        self.physicsClient = bc.BulletClient(connection_mode=p.DIRECT)

    def setGravity(self):
        self.physicsClient.setGravity(0, 0, -9.81)


foo1 = Foo(1)
foo2 = Foo(2)
foo1.setGravity()
foo2.setGravity()

print("Adress of  foo1 bullet client 1 : " + str(foo1.physicsClient))
print("Adress of foo2 bullet client 2  : " + str(foo2.physicsClient))

输出:

Adress of  foo1 bullet client 1 : 
<pybullet_utils.bullet_client.BulletClient object at 0x7f8c25f12460>
Adress of foo2 bullet client 2  : 
<pybullet_utils.bullet_client.BulletClient object at 0x7f8c0ed5a4c0>

正如您在此处看到的:您有两个不同的实例,每个实例都存储在不同的地址中

请参阅官方存储库中的以下示例: https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/gym/pybullet_utils/examples/multipleScenes.py

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    相关资源
    最近更新 更多