cameraEyePosition
: (x, y, z)
의 튜플cameraTargetPosition
: (x, y, z)
의 튜플cameraUpVector
: (x, y, z)
의 튜플입니다.computeViewMatrix
함수는 계산된 뷰 매트릭스를 나타내는 16개의 실수(float) 값으로 구성된 플랫(flatten)된 리스트를 반환반환 타입: List[float]
(길이가 16인 리스트)
import pybullet as pb
# 카메라의 위치, 타겟 위치, 업 벡터 정의
cameraEyePosition = (1, 1, 1)
cameraTargetPosition = (0, 0, 0)
cameraUpVector = (0, 0, 1)
# 뷰 매트릭스 계산
viewMatrix = pb.computeViewMatrix(cameraEyePosition, cameraTargetPosition, cameraUpVector)
print("뷰 매트릭스:", viewMatrix)
(1, 1, 1)
위치에 있고, (0, 0, 0)
을 바라보며, 카메라의 '위' 방향이 z축 방향인 상황에서 뷰 매트릭스를 계산합니다. 반환된 뷰 매트릭스는 3D 씬을 2D 이미지로 투영하는 데 사용할 수 있습니다.cameraTargetPosition
(tuple(float, float, float)): distance
(float): yaw
(float): pitch
(float): 카메라의 피치(pitch) 각도입니다. 이는 수직 회전을 나타냄roll
(float): 카메라의 롤(roll) 각도입니다. 이는 카메라가 자신의 축을 중심으로 회전하는 것을 나타냄upAxisIndex
(int):계산된 뷰 매트릭스를 나타내는 16개의 값을 포함하는 리스트를 반환
이 뷰 매트릭스는 OpenGL 스타일로 구성되어 있으며,
이를 통해 3D 월드 -> 카메라 관점 (Extrinsic)
fov
(float): 카메라의 시야각(Field of View)입니다. 이는 카메라가 한 번에 볼 수 있는 범위를 결정하며, 각도는 도(degree) 단위로 측정aspect
(float): 카메라의 종횡비(aspect ratio)입니다. 이는 이미지의 가로 세로 비율을 나타내며, 일반적으로 화면의 가로 길이를 세로 길이로 나눈 값nearPlane
(float): 근접 평면(near plane)의 거리입니다. 이는 카메라로부터 얼마나 가까운 지점부터 장면을 렌더링할지 결정합니다. 이 값은 양수farPlane
(float): 원거리 평면(far plane)의 거리입니다. 이는 카메라로부터 얼마나 먼 지점까지 장면을 렌더링할지 결정합니다. 근접 평면보다 커야 하며, 이 값에 따라 렌더링할 수 있는 장면의 최대 깊이가 결정getCameraImage
메서드는 PyBullet에서 시뮬레이션된 3D 환경의 이미지를 캡처하는 데 사용width
(int): 이미지의 너비(픽셀 단위).height
(int): 이미지의 높이(픽셀 단위).viewMatrix
([float]): 카메라의 뷰 매트릭스. 이 매트릭스는 카메라의 위치와 방향을 결정합니다. computeViewMatrixFromYawPitchRoll
함수를 사용하여 생성할 수 있습니다.projectionMatrix
([float]): 카메라의 프로젝션 매트릭스. 이 매트릭스는 3D 장면을 2D 이미지로 투영하는 방법을 결정합니다. computeProjectionMatrixFOV
함수를 사용하여 생성할 수 있습니다.lightDirection
([float], optional): 조명의 방향을 결정하는 3개의 값으로 구성된 리스트. 기본값은 [0, 0, 1]
입니다.lightColor
([float], optional): 조명의 색상과 강도를 결정하는 3개의 값으로 구성된 리스트. 기본값은 [1, 1, 1]
으로 백색 조명입니다.shadow
(bool, optional): 그림자 효과를 활성화할지 여부를 결정합니다. 기본값은 False
입니다.renderer
(int, optional): 사용할 렌더러를 지정합니다. p.ER_TINY_RENDERER
(기본값) 또는 p.ER_BULLET_HARDWARE_OPENGL
중 선택할 수 있습니다.getCameraImage
메서드는 다음을 포함하는 튜플을 반환합니다:
width
(int): 이미지의 너비.height
(int): 이미지의 높이.rgbPixels
([int]): RGB 컬러 이미지 데이터를 포함하는 배열. 배열의 크기는 [높이, 너비, 4]이며, 마지막 차원은 RGBA 값입니다.depthPixels
([float]): 깊이 이미지 데이터를 포함하는 배열. 각 픽셀 값은 카메라로부터의 상대적 거리를 나타냅니다. 배열의 크기는 [높이, 너비]입니다.segmentationMaskBuffer
([int]): 각 픽셀의 세그멘테이션 마스크 데이터를 포함하는 배열. 이 값은 해당 픽셀에서 보이는 객체의 고유 ID를 나타냅니다. 배열의 크기는 [높이, 너비]입니다.이 메서드를 사용하면 시뮬레이션 환경 내의 다양한 시점에서 캡처한 컬러, 깊이, 그리고 세그멘테이션 이미지를 얻을 수 있으며, 이를 통해 시뮬레이션된 환경의 시각적 분석이나 로봇 비전 시스템의 개발에 활용할 수 있습니다.
loadURDF
메서드는 PyBullet 시뮬레이션에 Unified Robot Description Format (URDF) 파일을 이용하여 로봇이나 다른 객체를 로드하는 데 사용fileName
(str): 로드할 URDF 파일의 경로입니다. 이 파일은 basePosition
([float, float, float], optional): 객체의 월드 공간에서의 초기 위치입니다. 기본값은 [0, 0, 0]
입니다.baseOrientation
([float, float, float, float], optional): 객체의 월드 공간에서의 초기 방향(쿼터니언)입니다. 기본값은 [0, 0, 0, 1]
이며, 이는 회전 없음을 의미합니다.useFixedBase
(bool, optional): 객체가 움직이지 않고 고정되어 있어야 하는 경우 True
로 설정합니다. 기본값은 False
입니다. 예를 들어, 환경에 고정된 구조물을 나타낼 때 유용합니다.globalScaling
(float, optional): 객체의 전체 크기를 조정하는 스케일 인자입니다. 기본값은 1.0
이며, 이는 원본 크기를 의미합니다.physicsClientId
(int, optional): 여러 PyBullet 인스턴스를 사용하는 경우, 특정 시뮬레이션 인스턴스를 지정하는 데 사용됩니다. 기본값은 0
입니다.float
): float
): float
): [float, float, float]
): resetDebugVisualizerCamera
메서드는 특별한 반환 값이 없습니다(None
을 반환)
import pybullet as p
# PyBullet 연결을 시작합니다.
physicsClient = p.connect(p.GUI)
# 카메라를 초기화하고, 특정 지점을 바라보도록 설정합니다.
# 여기서, 카메라는 (0, 0, 0)을 바라보며, 거리는 10, Yaw는 45도, Pitch는 -30도로 설정됩니다.
p.resetDebugVisualizerCamera(cameraDistance=10, cameraYaw=45, cameraPitch=-30, cameraTargetPosition=[0, 0, 0])
import pybullet as pb
pb.connect(pb.GUI) # 시뮬레이션을 시작하고 GUI 모드로 연결
# configureDebugVisualizer를 사용하여 디버그 시각화 설정을 구성
pb.configureDebugVisualizer(flag=pb.COV_ENABLE_GUI, value=0) # 예: GUI 를 비활성화
flag
: 설정하려는 시각화 구성의 유형을 지정합니다. 예를 들어, COV_ENABLE_SHADOWS
는 그림자 활성화/비활성화를, COV_ENABLE_GUI
는 GUI 활성화/비활성화를 제어합니다.value
: 지정된 flag
에 대한 값입니다. 0
(비활성화) 또는 1
(활성화)COV_ENABLE_SHADOWS
: 그림자
COV_ENABLE_WIREFRAME
: 와이어프레임 모드
COV_ENABLE_GUI
: 내장된 GUI 모드
COV_ENABLE_TINY_RENDERER
: Tiny Renderer를 사용하는 시각화
COV_ENABLE_RGB_BUFFER_PREVIEW
: RGB 버퍼 미리보기
COV_ENABLE_DEPTH_BUFFER_PREVIEW
: 깊이 버퍼 미리보기
COV_ENABLE_SEGMENTATION_MARK_PREVIEW
: segmentation mask 미리보기
COV_ENABLE_MOUSE_PICKING
: 사용자는 마우스로 객체를 선택하고 조작할 수 있음.COV_ENABLE_KEYBOARD_SHORTCUTS
: 디버그 시각화에서 제공하는 키보드 단축키 기능COV_ENABLE_RENDERING
: 렌더링 프로세스를 활성화하거나 비활성화하는 데 사용
rayFromPositions
: 광선이 시작하는 위치
의 리스트. 각 위치는 (x, y, z)
형태의 3차원 벡터로 표현됩니다.rayToPositions
: 광선이 도달하는 목표 위치
의 리스트. rayFromPositions
과 마찬가지로, 각 목표 위치는 (x, y, z)
형태의 3차원 벡터입니다.numThreads
: parentObjectUniqueId
: parentLinkIndex
: parentObjectUniqueId
로 지정된 객체의 특정 링크를 광선 테스트에서 제외하고자 할 때 사용rayTestBatch
함수는 충돌 테스트의 결과를 나타내는 튜플의 리스트를 반환
: RayTestResult = Tuple[
int,
int,
float,
Tuple[float, float, float],
Tuple[float, float, float]
]
RayTestBatchResults = List[RayTestResult]
각 튜플은 다음과 같은 정보를 포함합니다:
objectUniqueId
: linkIndex
: hitFraction
: hitPosition
: 광선이 충돌한 위치의 좌표입니다.hitNormal
: 충돌 지점에서의 표면의 노멀 벡터입니다.이 함수를 사용하여 복잡한 시뮬레이션 환경에서 여러 광선을 효율적으로 처리할 수 있으며, 다양한 물리적 상호작용의 검사나 분석에 활용될 수 있습니다.
positionA
, orientationA
: positionA
는 위치(3차원 벡터), orientationA
는 회전(쿼터니언)positionB
, orientationB
: positionB
도 위치(3차원 벡터), orientationB
도 회전(쿼터니언)두 변환의 곱셈 결과로 얻어진 최종 위치와 회전을 반환
반환 값은 다음과 같은 두 부분으로 구성
최종 위치(Tuple[float, float, float]
):
최종 회전(Tuple[float, float, float, float]
):
import pybullet as pb
# 첫 번째 변환 (예: 객체 A)
positionA = (1, 0, 0)
orientationA = pb.getQuaternionFromEuler([0, 0, 0])
# 두 번째 변환 (예: 객체 B)
positionB = (0, 1, 0)
orientationB = pb.getQuaternionFromEuler([0, 0, 90])
# 두 변환 곱하기
finalPosition, finalOrientation = pb.multiplyTransforms(positionA, orientationA, positionB, orientationB)
print("최종 위치:", finalPosition)
print("최종 회전:", finalOrientation)