manipulatorCollisionBodyValidator

Подтвердите состояния для тел столкновения дерева твердого тела

    Описание

    manipulatorCollisionBodyValidator объект выполняет состояние и проверки достоверности движения для модели робота дерева твердого тела. Чтобы проверять, сталкиваются ли тела столкновения или с другими телами (самостолкновения) или со средой, используйте isStateValid объектная функция. Чтобы проверять, допустимо ли движение между двумя состояниями, используйте isMotionValid объектная функция.

    Создание

    Описание

    manipSV = manipulatorCollisionBodyValidator создает блок проверки допустимости состояния со значениями по умолчанию для manipulatorStateSpace объект.

    пример

    manipSV = manipulatorCollisionBodyValidator(ss) создает блок проверки допустимости состояния для manipulatorStateSpace объект, который представляет пространство состояний модели робота и содержит тела столкновения для элементов твердого тела. Задайте ss как manipulatorStateSpace объект.

    manipSV = manipulatorCollisionBodyValidator(ss,Name=Value) задает Свойства как аргументы name-value

    Свойства

    развернуть все

    Разрешающая способность по дальности для валидации движения в виде положительной скалярной величины. Расстояние валидации определяет количество интерполированных состояний между состояниями, заданными к isMotionValid объектная функция. Объектная функция подтверждает каждое интерполированное состояние путем проверки на столкновения с роботом и средой.

    Типы данных: double

    Проигнорируйте сам переключатель столкновений в виде логического. Если это свойство установлено в true, isMotionValid возразите функциональной проверке пропусков между телами для столкновений, и только сравнивает тела со средой. Не проверка самостолкновения может улучшить скорость стадии планирования, но ваше пространство состояний должно содержать объединенные пределы, которые гарантируют, что самостолкновения не возможны.

    Типы данных: логический

    Столкновение возражает в среде робота в виде массива ячеек объектов столкновения этих типов:

    box = collisionBox(0.1,0.1,0.5); % XYZ Lengths
    box.Pose = trvec2tform([0.2 0.2 0.5]); % XYZ Position
    sphere = collisionSphere(0.25); % Radius
    sphere.Pose = trvec2tform([-0.2 -0.2 0.5]); % XYZ Position
    env = {box sphere};
    manipSS = manipulatorCollisionBodyValidator(ss,Environment=env);

    Типы данных: логический

    Пространство состояний манипулятора в виде manipulatorStateSpace объект, который является подклассом nav.StateSpace (Navigation Toolbox).

    Функции объекта

    isStateValidПроверяйте, допустимо ли состояние
    isMotionValidПроверяйте, допустим ли путь между состояниями

    Примеры

    свернуть все

    Сгенерируйте состояния, чтобы сформировать путь, подтвердить движение между состояниями и проверку на самостолкновения и экологические столкновения с объектами в вашем мире. manipulatorStateSpace объект представляет объединенный пробел настройки вашей модели робота дерева твердого тела, и может произвести состояния, вычислить расстояния и осуществить границы состояния. manipulatorCollisionBodyValidator объект подтверждает состояние и движение на основе тел столкновения в вашей модели робота и любых препятствий в вашей среде.

    Загрузите модель робота

    Используйте loadrobot функционируйте, чтобы получить доступ к предопределенным моделям робота. Этот пример использует робота Quanser QArm™, и объединенные настройки заданы как векторы-строки.

    robot = loadrobot("quanserQArm",DataFormat="row");
    figure(Visible="on")
    show(robot);
    xlim([-0.5 0.5])
    ylim([-0.5 0.5])
    zlim([-0.25 0.75])
    hold on

    Figure contains an axes object. The axes object contains 16 objects of type patch, line. These objects represent world, base_link, YAW, BICEP, FOREARM, END-EFFECTOR, base_link_mesh, YAW_mesh, BICEP_mesh, FOREARM_mesh, END-EFFECTOR_mesh.

    Сконфигурируйте пространство состояний и валидацию состояния

    Создайте пространство состояний и утвердите блок проверки допустимости из модели робота.

    ss = manipulatorStateSpace(robot);
    sv = manipulatorCollisionBodyValidator(ss);

    Установите расстояние валидации до 0.05, который основан на расстоянии, нормальном между двумя состояниями. Вы можете сконфигурировать блок проверки допустимости, чтобы проигнорировать сам столкновения, чтобы улучшить скорость валидации, но должны рассмотреть, имеет ли ваша модель робота соответствующий объединенный предельный набор настроек, чтобы гарантировать, что это не сталкивается с собой.

    sv.ValidationDistance = 0.05;
    sv.IgnoreSelfCollision = true;

    Поместите объекты столкновения в среду робота. Установите Environment свойство объекта блока проверки допустимости столкновения использование массива ячеек объектов.

    box = collisionBox(0.1,0.1,0.5); % XYZ Lengths
    box.Pose = trvec2tform([0.2 0.2 0.5]); % XYZ Position
    sphere = collisionSphere(0.25); % Radius
    sphere.Pose = trvec2tform([-0.2 -0.2 0.5]); % XYZ Position
    env = {box sphere};
    sv.Environment = env;

    Визуализируйте среду.

    for i = 1:length(env)
        show(env{i})
    end
    view(60,10)

    Figure contains an axes object. The axes object contains 18 objects of type patch, line. These objects represent world, base_link, YAW, BICEP, FOREARM, END-EFFECTOR, base_link_mesh, YAW_mesh, BICEP_mesh, FOREARM_mesh, END-EFFECTOR_mesh.

    Запланируйте путь

    Начните с домашней настройки как первая точка на пути.

    rng(0); % Repeatable results
    start = homeConfiguration(robot);
    path = start;
    idx = 1;

    Запланируйте путь с помощью этих шагов в цикле:

    • Произведите соседнюю целевую настройку, с помощью Распределения Гаусса, путем определения стандартного отклонения для каждого угла поворота шарнира.

    • Проверяйте, допустимо ли произведенное целевое состояние.

    • Если произведенное целевое состояние допустимо, проверяйте, допустимо ли движение между состояниями и, если так, добавьте его в путь.

    for i = 2:25
        goal = sampleGaussian(ss,start,0.25*ones(4,1));
        validState = isStateValid(sv,goal);
        
        if validState % If state is valid, check motion between states.
            [validMotion,~] = isMotionValid(sv,path(idx,:),goal);
    
            if validMotion % If motion is valid, add to path.
                path = [path; goal];
                idx = idx + 1;
            end
        end
    end

    Визуализируйте путь

    После генерации пути допустимых движений визуализируйте движение робота. Поскольку вы произвели случайные состояния около домашней настройки, необходимо видеть, что рука перемещает ту начальную настройку.

    Чтобы визуализировать путь исполнительного элемента конца в 3-D, получите преобразование относительно основной мировой системы координат в каждой точке. Сохраните точки как xyz вектор сдвига. Постройте путь исполнительного элемента конца.

    eePose = nan(3,size(path,1));
    
    for i = 1:size(path,1)
        show(robot,path(i,:),PreservePlot=false);
        eePos(i,:) = tform2trvec(getTransform(robot,path(i,:),"END-EFFECTOR")); % XYZ translation vector
        plot3(eePos(:,1),eePos(:,2),eePos(:,3),"-b",LineWidth=2)
        drawnow
    end

    Figure contains an axes object. The axes object contains 28 objects of type patch, line. These objects represent world, base_link, YAW, BICEP, FOREARM, END-EFFECTOR, base_link_mesh, YAW_mesh, BICEP_mesh, FOREARM_mesh, END-EFFECTOR_mesh.

    Введенный в R2021b