def load_robot(self, load_geometry=False, urdf_param_name='/robot_description', srdf_param_name='/robot_description_semantic', precision=None, local_cache_directory=None): """Load an entire robot instance -including model and semantics- directly from ROS. Parameters ---------- load_geometry : bool, optional ``True`` to load the robot's geometry, otherwise ``False`` to load only the model and semantics. urdf_param_name : str, optional Parameter name where the URDF is defined. If not defined, it will default to ``/robot_description``. srdf_param_name : str, optional Parameter name where the SRDF is defined. If not defined, it will default to ``/robot_description_semantic``. precision : float Defines precision for importing/loading meshes. Defaults to ``compas.PRECISION``. local_cache_directory : str, optional Directory where the robot description (URDF, SRDF and meshes) are stored. This differs from the directory taken as parameter by the :class:`RosFileServerLoader` in that it points directly to the specific robot package, not to a global workspace storage for all robots. If not assigned, the robot will not be cached locally. Examples -------- >>> from compas_fab.backends import RosClient >>> with RosClient() as client: ... robot = client.load_robot() ... print(robot.name) ur5 """ robot_name = None use_local_cache = False if local_cache_directory is not None: use_local_cache = True path_parts = local_cache_directory.strip(os.path.sep).split( os.path.sep) path_parts, robot_name = path_parts[:-1], path_parts[-1] local_cache_directory = os.path.sep.join(path_parts) loader = RosFileServerLoader(self, use_local_cache, local_cache_directory, precision) if robot_name: loader.robot_name = robot_name urdf = loader.load_urdf(urdf_param_name) srdf = loader.load_srdf(srdf_param_name) model = RobotModel.from_urdf_string(urdf) semantics = RobotSemantics.from_srdf_string(srdf, model) if load_geometry: model.load_geometry(loader) return Robot(model, semantics=semantics, client=self)
from compas.robots import RobotModel from compas_fab.backends import RosClient from compas_fab.backends import RosFileServerLoader from compas_fab.robots import Configuration from compas_fab.robots import Robot from compas_fab.robots import RobotSemantics with RosClient() as client: loader = RosFileServerLoader(client) urdf = loader.load_urdf() srdf = loader.load_srdf() model = RobotModel.from_urdf_string(urdf) semantics = RobotSemantics.from_srdf_string(srdf, model) robot = Robot(model, semantics=semantics, client=client) group = robot.main_group_name frame = Frame([0.4, 0.3, 0.4], [0, 1, 0], [0, 0, 1]) tolerance_position = 0.001 tolerance_axes = [math.radians(1)] * 3 start_configuration = Configuration.from_revolute_values( (0.667, -0.298, 0.336, -2.333, -1.787, 2.123, 0.571)) # create goal constraints from frame goal_constraints = robot.constraints_from_frame(frame, tolerance_position, tolerance_axes, group)