Source code for blenderproc.python.modules.object.ObjectPoseSamplerModule

from blenderproc.python.modules.main.Module import Module
from blenderproc.python.utility.BlenderUtility import get_all_blender_mesh_objects
from blenderproc.python.types.MeshObjectUtility import MeshObject, convert_to_meshes
from blenderproc.python.object.ObjectPoseSampler import sample_poses


[docs]class ObjectPoseSamplerModule(Module): """ Samples positions and rotations of selected object inside the sampling volume while performing mesh and bounding box collision checks. Example 1: Sample poses (locations and rotations) for objects with a suctom property `sample_pose` set to True. .. code-block:: yaml { "module": "object.ObjectPoseSampler", "config":{ "max_iterations": 1000, "objects_to_sample": { "provider": "getter.Entity", "condition": { "cp_sample_pose": True } }, "pos_sampler":{ "provider": "sampler.Uniform3d", "max": [5,5,5], "min": [-5,-5,-5] }, "rot_sampler": { "provider": "sampler.Uniform3d", "max": [0,0,0], "min": [6.28,6.28,6.28] } } } .. list-table:: :widths: 25 100 10 :header-rows: 1 * - Parameter - Description - Type * - objects_to_sample - Here call an appropriate Provider (Getter) in order to select objects. Default: all mesh objects. - Provider * - objects_to_check_collisions - Here call an appropriate Provider (Getter) in order to select objects that you want to check collisions with. Default: all mesh objects. - Provider * - max_iterations - Amount of tries before giving up on an object and moving to the next one. Default: 1000. - int * - pos_sampler - Here call an appropriate Provider (Sampler) in order to sample position (XYZ 3d vector) for each object. - Provider * - rot_sampler - Here call an appropriate Provider (Sampler) in order to sample rotation (Euler angles 3d vector) for each object. - Provider """ def __init__(self, config): Module.__init__(self, config)
[docs] def run(self): """ Samples positions and rotations of selected object inside the sampling volume while performing mesh and bounding box collision checks in the following steps: 1. While we have objects remaining and have not run out of tries - sample a point. 2. If no collisions are found keep the point. """ objects_to_sample = self.config.get_list("objects_to_sample", get_all_blender_mesh_objects()) objects_to_check_collisions = self.config.get_list("objects_to_check_collisions", get_all_blender_mesh_objects()) max_tries = self.config.get_int("max_iterations", 1000) def sample_pose(obj: MeshObject): obj.set_location(self.config.get_vector3d("pos_sampler")) obj.set_rotation_euler(self.config.get_vector3d("rot_sampler")) sample_poses( objects_to_sample=convert_to_meshes(objects_to_sample), sample_pose_func=sample_pose, objects_to_check_collisions=convert_to_meshes(objects_to_check_collisions), max_tries=max_tries )