主要内容

robotPlatform

在场景中创建机器人平台

自从R2022a

    描述

    robotPlatform对象表示一个机器人平台在给定机器人的场景。使用这个平台来定义和跟踪对象的轨迹的场景。模拟传感器读数为平台,安装传感器等gpsSensor,insSensor,robotLidarPointCloudGenerator系统对象™平台robotSensor对象。添加一个身体网格可视化平台使用updateMesh对象的功能。

    创建

    描述

    平台= robotPlatform (的名字,场景)创建一个平台指定名称的名字,并将其添加到场景中,指定为一个robotScenario对象。指定的名字参数为字符串标量。的的名字参数设置的名字财产。

    例子

    平台= robotPlatform (___,名称=值)使用一个或多个名称参数指定选项。您可以指定属性名称参数。

    名称-值参数

    指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

    例子:开始时间= 10平台的初始时间轨迹设置为10秒。

    运动轨迹为机器人平台基地,作为指定waypointTrajectorypolynomialTrajectory对象。默认情况下,该平台被认为是静止的起源和场景。移动平台在每个场景的模拟步骤,使用移动对象的功能。

    请注意

    robotPlatform对象必须指定相同的ReferenceFrame对象属性中指定的轨迹。

    占领的二进制状态占用地图,指定为真正的。将值设置为真正的如果机器人平台中包含二进制入住率地图。

    数据类型:逻辑

    最初的机器人平台基础位置,指定为一个向量的形式(xyz]。如果不指定仅指定这个名称参数BaseTrajectory财产。

    数据类型:|

    机器人平台的初始速度基地,指定为一个向量的形式(vxvvz]。如果不指定仅指定这个名称参数BaseTrajectory财产。

    数据类型:|

    机器人平台的初始加速度基地,指定为一个向量的形式(斧头阿兹]。如果不指定仅指定这个名称参数BaseTrajectory财产。

    数据类型:|

    最初的机器人平台基本取向,指定为一个向量的形式(wxyz]代表一个四元数。如果不指定仅指定这个名称参数BaseTrajectory财产。

    数据类型:|

    初始角速度机器人平台的基础,指定为一个向量的形式(的天气王寅wz]。矢量的大小定义了角弧度/秒的速度。的xyz坐标定义轴顺时针旋转。如果不指定仅指定这个名称参数BaseTrajectory财产。

    数据类型:|

    初始联合的配置rigidBodyTree基于机器人平台,作为一个指定N元向量。N关节相关的总数吗rigidBodyTree对象。

    数据类型:|

    参考帧计算机器人运动平台,指定为“ENU表示”“内德”,匹配任何参考系robotScenario。计算所有平台运动相对于惯性坐标系。

    数据类型:字符串|字符

    刚体树机器人平台,作为一个指定rigidBodyTree对象。

    机器人平台的初始时间轨迹,指定为一个标量在几秒钟内。

    数据类型:|

    碰撞对象添加到网格平台,指定这些值之一:

    rigidBodyTree的平台只接受外部创建碰撞网格为基础的身体。

    转换的碰撞网格相对于网格平台,指定为一个4×4齐次变换矩阵。使用CollisionOffset输入rigidBodyTree只有当的平台碰撞输入被指定为外部碰撞对象创建。

    数据类型:|

    属性

    全部展开

    标识符指定的机器人平台,作为一个字符串标量或特征向量。在场景的名称必须是惟一的。

    数据类型:字符|字符串

    机器人平台的轨迹运动基地,作为指定waypointTrajectorypolynomialTrajectory对象。默认情况下,对象假设的基础平台是固定和场景的起源。当指定为一个waypointTrajectorypolynomialTrajectory对象,基础平台的移动沿着轨迹在场景模拟。移动平台在每个场景的模拟步骤,使用移动对象的功能。

    请注意

    robotPlatform对象必须指定相同的ReferenceFrame对象属性中指定的轨迹。

    参考帧计算机器人运动平台,指定为“ENU表示”“内德”,匹配任何参考系robotScenario。计算所有对象平台运动相对于惯性坐标系。

    数据类型:字符|字符串

    刚体树机器人平台,作为一个指定rigidBodyTree对象。

    机器人平台基地网,作为一个指定extendedObjectMesh对象。身体网描述了平台的三维模型可视化的目的。身体网用于生成三维点云。默认的网格是一个长方体的形式(xlengthylengthzlength]在米。

    机器人平台基础身体网颜色显示在场景时,指定为一个RGB值。

    数据类型:|

    机器人平台基础的身体和网格坐标系之间的变换,指定为一个4×4齐次变换矩阵映射点网格框架分身体框架平台。

    数据类型:|

    机器人平台的二进制状态占用地图,指定为真正的

    数据类型:逻辑

    身体碰撞网格与机器人相关的平台基础网格,指定为一个碰撞对象。支持的碰金宝app撞对象类型是:collisionBox,collisionCapsule,collisionCylinder,collisionMesh,collisionSphere

    机器人平台基础的身体和碰撞网格之间的变换,指定为一个4×4齐次变换矩阵。

    数据类型:|

    传感器安装在机器人平台,指定为数组robotSensor对象。

    对象的功能

    附加 附加目标机器人平台源机器人平台
    checkCollision 检查机器人平台和目标的身体碰撞
    分离 分离目标机器人平台从源机器人平台
    移动 在场景中移动机器人平台
    读机器人平台的场景
    updateMesh 体网格更新机器人平台

    例子

    全部折叠

    创建一个机器人的场景。

    场景= robotScenario (UpdateRate = 100, StopTime = 1);

    添加网格的地平面和一盒。

    addMesh(场景中,“平面”、大小= 3[3],颜色= [0.7 0.7 0.7]);addMesh(场景中,“盒子”、大小=(0.5 0.5 0.5),位置= [0 0 0.25],颜色= [0 1 0))

    创建一个路径轨迹的机器人平台使用ENU表示参考系。

    路标= [0 1 0;1 0 0;1 1 0;0 1 0];toa = linspace(0, 1,长度(路标));traj = waypointTrajectory (“锚点”路标,“TimeOfArrival”toa,“ReferenceFrame”,“ENU表示”);

    创建一个rigidBodyTree对象TurtleBot 3华夫格π的机器人loadrobot

    robotRBT = loadrobot (“robotisTurtleBot3WafflePi”);

    创建一个机器人平台与轨迹。

    平台= robotPlatform (“TurtleBot”场景,BaseTrajectory = traj);

    设置网格的平台rigidBodyTree对象。

    updateMesh(平台,“RigidBodyTree”对象= robotRBT)

    创建一个INS传感器对象和附加的传感器平台。

    ins = robotSensor (“英寸”、平台、insSensor (“RollAccuracy”0),UpdateRate = scenario.UpdateRate);

    想象的场景。

    [ax, plotFrames] = show3D(场景);轴平等的持有

    在一个循环,一步通过轨迹输出位置,方向,速度,加速度和角速度。

    数= 1;~结束(traj)[位置(计数,:),姿态(计数,:),速度(计数,:)加速度(计数,:),AngularVelocity(计数,:)]= traj ();数=计数+ 1;结束

    创建一条线轨迹图。首先创建的阴谋plot3,然后手动修改数据源属性的阴谋。这提高了绘制的性能。

    trajPlot = plot3(南南、南“颜色”(1 1 1),“线宽”2);trajPlot。XDataSource =“位置(:1)”;trajPlot。YDataSource =“位置(:,2)”;trajPlot。ZDataSource =“位置(:,3)”;

    建立了模拟。然后,遍历的位置并显示现场每次INS传感器更新。推进现场,移动机器人平台,并更新传感器。

    设置(场景)idx = 1:把1%读取传感器读数。[isUpdated insTimestamp (idx, 1), sensorReadings (idx)] =阅读(ins);如果isUpdated%使用快速更新移动平台的可视化框架。show3D(场景,FastUpdate = true,父= ax);%刷新所有情节数据和可视化。refreshdata drawnowlimitrate结束%场景模拟的时间。推进(场景);%更新场景中所有的传感器。updateSensors(场景)结束持有

    图包含一个坐标轴对象。坐标轴对象包含东(m), ylabel北(m)包含28个对象类型的补丁,线。

    创建一个robotScenario对象。

    场景= robotScenario (UpdateRate = 1, StopTime = 10);

    创建一个rigidBodyTree对象的Franka Emika熊猫机械手使用loadrobot

    robotRBT = loadrobot (“frankaEmikaPanda”);

    创建一个rigidBodyTreerobotPlatform使用机械手模型对象。

    机器人= robotPlatform (“操纵者”场景,RigidBodyTree = robotRBT);

    创建一个非rigidBodyTreerobotPlatform一个盒子来操纵的对象。指定网格类型和大小。

    盒= robotPlatform (“盒子”场景中,碰撞=“网”,InitialBasePosition = [0.5 0.15 0.278]);updateMesh(盒子,“长方体”碰撞=“网”、大小= (0.06 0.06 0.1))

    想象的场景。

    ax = show3D(场景中,碰撞=“上”);视图(79年,36)光

    指定的初始和拾音器联合配置机械手,将机械手从最初对接近。

    initialConfig = homeConfiguration (robot.RigidBodyTree);pickUpConfig = [0.2371 -0.0200 0.0542 -2.2272 0.00132.2072 -0.9670 0.0400 0.0400);

    创建一个RRT路径规划使用manipulatorRRT对象,并指定机械手模型。

    规划师= manipulatorRRT (robot.RigidBodyTree scenario.CollisionMeshes);计划。IgnoreSelfCollision = true;

    计划之间的路径的初始和拾音器联合配置。然后,想象整个路径,插入路径成小步骤。

    rng (“默认”)路径=计划(计划、initialConfig pickUpConfig);路径=插入(规划师,路径,25);

    建立了模拟。

    设置(场景)

    之前检查碰撞机械手拿起盒子。

    checkCollision(机器人,“盒子”,IgnoreSelfCollision =“上”)
    ans =逻辑0

    移动机械手的关节沿路径和可视化的场景。

    helperRobotMove(路径,机器人,场景,ax)

    检查碰撞后机械手拿起盒子。

    checkCollision(机器人,“盒子”,IgnoreSelfCollision =“上”)
    ans =逻辑1

    使用附加函数把盒子机械手的夹持。

    附加(机器人,“盒子”,“panda_hand”,ChildToParentTransform = trvec2tform ([0 0 0.1]))

    指定的下降联合配置机械手移动机械手的上车对箱子下车姿势。

    dropOffConfig = [-0.6564 0.2885 -0.3187 -1.5941 0.11031.8678 -0.2344 0.04 0.04);

    计划之间的道路上车和下车联合配置。

    路径=计划(计划、pickUpConfig dropOffConfig);路径=插入(规划师,路径,25);

    移动机械手的关节沿路径和可视化的场景。

    helperRobotMove(路径,机器人,场景,ax)

    使用分离函数分离机械手爪的盒子。

    分离(机器人)

    计划下降之间的路径和初始联合配置移动机械手从盒子下降对初始姿势。

    路径=计划(计划、dropOffConfig initialConfig);路径=插入(规划师,路径,25);

    移动机械手的关节沿路径和可视化的场景。

    helperRobotMove(路径,机器人,场景,ax)

    图包含一个坐标轴对象。坐标轴对象包含东(m), ylabel北(m)包含47块类型的对象,线。这些对象代表panda_link1_coll_mesh, panda_link2_coll_mesh、panda_link3_coll_mesh panda_link4_coll_mesh, panda_link5_coll_mesh, panda_link6_coll_mesh, panda_link7_coll_mesh, panda_hand_coll_mesh, panda_leftfinger_coll_mesh, panda_rightfinger_coll_mesh panda_link0_coll_mesh。

    Helper函数移动机械手的关节。

    函数helperRobotMove(路径,机器人,场景,ax)idx = 1:尺寸(路径,1)jointConfig =路径(idx:);(移动机器人,“联合”jointConfig) show3D(场景,fastUpdate = true,父母= ax,碰撞=“上”);drawnow推进(场景);结束结束

    版本历史

    介绍了R2022a