manipulatorStateSpace

Пространство состояний для моделей робота дерева твердого тела

Описание

manipulatorStateSpace объект представляет объединенное пространство состояний настройки модели робота дерева твердого тела. Для данного rigidBodyTree объект, нефиксированные соединения в модели дерева твердого тела формируют пространство состояний. При выборке состояния или определении границ, значения вектора состояния соответствуют объединенным положениям, которые задают joint configuration с размерностью, равной NumStateVariables свойство.

Как правило, пространство состояний манипулятора работает с основанными на выборке планировщиками пути как plannerRRT (Navigation Toolbox) и plannerBiRRT (Navigation Toolbox) объекты. Чтобы произвести и подтвердить пути для манипуляторов, объедините пространство состояний с блоком проверки допустимости состояния manipulatorCollisionBodyValidator объект. Поскольку manipulatorStateSpace объект выводит из nav.StateSpace (Navigation Toolbox) класс, и задан в StateSpace свойство планировщиков пути.

Чтобы запланировать пути манипуляторы с помощью только Robotics System Toolbox™, смотрите manipulatorRRT объект.

Создание

Описание

manipSS = manipulatorStateSpace создает пространство состояния по умолчанию для дерева твердого тела с двумя шарнирными соединениями.

пример

manipSS = manipulatorStateSpace(robot) создает пространство состояний для заданного rigidBodyTree объект, robot.

manipSS = manipulatorStateSpace(robot,numStateVariables) задает количество переменных состояния, которое является количеством нефиксированных соединений в модели робота. Необходимо использовать этот синтаксис для генерации кода.

Свойства

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

Модель робота дерева твердого тела в виде rigidBodyTree объект. После того, как вы создаете manipulatorStateSpace объект, это свойство только для чтения.

Это свойство доступно только для чтения.

Имя пространства состояний возражает в виде строкового скаляра или вектора символов.

Пример: "customManipulatorState"

Размерность пространства состояний в виде положительного числового целого числа. Это свойство является размерностью пространства состояний и должно совпадать с размером настройки соединения модели робота. Чтобы получить объединенную настройку, смотрите homeConfiguration или randomConfiguration функция.

После того, как вы создадите объект, это свойство только для чтения.

Min и макс. границы объединенных положений в виде n-by-2 матрица со строками формы [min max]. n является количеством переменных состояния на объединенном пробеле настройки, заданном в NumStateVariables свойство. Необходимо задать [min max] объединенные положения в метрах для призматических соединений и в радианах для шарнирных соединений.

Пример: [-10 10; -10 10; -pi pi]

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

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

distanceРасстояние между состояниями
enforceStateBoundsПредельное состояние к границам пространства состояний
sampleUniformДемонстрационное состояние с помощью равномерного распределения
sampleGaussianДемонстрационное состояние с помощью Распределения Гаусса
interpolateИнтерполируйте между состояниями

Примеры

свернуть все

Сгенерируйте состояния, чтобы сформировать путь, подтвердить движение между состояниями и проверку на самостолкновения и экологические столкновения с объектами в вашем мире. 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.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2021b