{"id":5830,"date":"2019-04-01T16:01:26","date_gmt":"2019-04-01T14:01:26","guid":{"rendered":"https:\/\/blog.generationrobots.com\/?p=5830"},"modified":"2023-03-29T10:40:19","modified_gmt":"2023-03-29T08:40:19","slug":"cozmo-sdk-custom-objects-murs-virtuels","status":"publish","type":"post","link":"https:\/\/www.generationrobots.com\/blog\/fr\/cozmo-sdk-custom-objects-murs-virtuels\/","title":{"rendered":"Cozmo SDK : les custom objects ou comment cr\u00e9er des murs virtuels"},"content":{"rendered":"\n<html>\n <body>\n  <figure class=\"wp-block-image alignright\">\n   <img decoding=\"async\" width=\"150\" height=\"150\" alt=\"\" class=\"wp-image-5832\" src=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/02\/nav_path-150x150.png\" srcset=\"https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/nav_path-150x150.png 150w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/nav_path-140x140.png 140w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/>\n  <\/figure>\n  \n  \n  <p>\n   Le robot Cozmo est aussi un b\u00e2tisseur. On a vu que Cozmo peut construire ses propres objets ou encore empiler des cubes comme expliqu\u00e9 dans le tutoriel\n   <a href=\"https:\/\/blog.generationrobots.com\/fr\/comment-activer-le-mode-sdk-de-cozmo\">\n    d\u00e9placement du robot et des cubes\n   <\/a>\n   . Cozmo peut faire encore mieux.\n   <strong>\n    Il peut cr\u00e9er des objets virtuels\n   <\/strong>\n   et notamment des murs. Il peut ensuite les utiliser pour interagir avec. C&rsquo;est ce que nous allons voir dans le tutoriel.\n  <\/p>\n  \n  \n  <p>\n   Vous allez apprendre \u00e0\u00a0 :\n  <\/p>\n  \n  \n  <ol class=\"wp-block-list\">\n   \n   <li>\n    Utiliser les Poses\n   <\/li>\n   \n   \n   <li>\n    Cr\u00e9er des murs virtuels\n   <\/li>\n   \n   \n   <li>\n    D\u00e9placer Cozmo dans cet environnement\n   <\/li>\n   \n  <\/ol>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-objectif-ajouter-des-objets-virtuels-dans-le-monde-de-cozmo\">\n   <strong>\n    Objectif : ajouter des objets virtuels dans le monde de Cozmo\n   <\/strong>\n  <\/h2>\n  \n  \n  <p>\n   <strong>\n    Dur\u00e9e : 1 heure\n   <\/strong>\n  <\/p>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    <strong>\n     Niveau de difficult\u00e9 : interm\u00e9diaire\n    <\/strong>\n   <\/li>\n   \n   \n   <li>\n    <strong>\n     Comp\u00e9tence acquises :\u00a0cr\u00e9ation d&rsquo;objets virtuels\n    <\/strong>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-les-prerequis\">\n   <strong>\n    Les pr\u00e9requis\n   <\/strong>\n  <\/h3>\n  \n  \n  <p>\n   Vous devez avoir acquis les notions abord\u00e9es dans les tutoriels ci-dessous\n  <\/p>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    <a class=\"catalogue\" href=\"\/blog\/fr\/comment-activer-le-mode-sdk-de-cozmo\/\" title=\"Cozmo SDK : comment activer le mode SDK de Cozmo\">\n     Cozmo SDK : comment activer le mode SDK de Cozmo\n    <\/a>\n   <\/li>\n   \n   \n   <li>\n    <a href=\"\/blog\/fr\/comment-activer-le-mode-sdk-de-cozmo\/\">\n     Cozmo SDK : d\u00e9placement du robot et des cubes\n    <\/a>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-le-materiel-necessaire\">\n   Le mat\u00e9riel n\u00e9cessaire\n  <\/h2>\n  \n  \n  <p>\n   Afin d&rsquo;illustrer ces fonctionnalit\u00e9s pour ce tutoriel\u00a0 nous avons cr\u00e9\u00e9 un circuit sur lequel des murs virtuels sont plac\u00e9s et dans lequel le robot va circuler.\n  <\/p>\n  \n  \n  <p>\n   Ce circuit peut \u00eatre repr\u00e9sent\u00e9 comme un rep\u00e8re de 40cm x 40 cm tel qu&rsquo;indiqu\u00e9 sur la figure ci-dessous. Sur le sch\u00e9ma vous pouvez visualiser la carte de cet environnement.\u00a0 L&rsquo;origine est situ\u00e9e en 0,0, c&rsquo;est l\u00e0 que le robot sera positionn\u00e9 au d\u00e9part.\u00a0 Les traits gras en bleu repr\u00e9sentent les murs virtuels. Les points A, B et C seront les points que le robot va rejoindre successivement.\n  <\/p>\n  \n  \n  <figure class=\"wp-block-image\">\n   <a href=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/02\/carte-cozmo-deplacement-cubes-1.jpg\">\n    <img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"1024\" alt=\"\" class=\"wp-image-5854\" src=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/02\/carte-cozmo-deplacement-cubes-1-1024x1024.jpg\" srcset=\"https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/carte-cozmo-deplacement-cubes-1-1024x1024.jpg 1024w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/carte-cozmo-deplacement-cubes-1-150x150.jpg 150w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/carte-cozmo-deplacement-cubes-1-300x300.jpg 300w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/carte-cozmo-deplacement-cubes-1-768x768.jpg 768w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/carte-cozmo-deplacement-cubes-1-140x140.jpg 140w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\n   <\/a>\n  <\/figure>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-les-poses\">\n   Les Poses\n  <\/h2>\n  \n  \n  <p>\n   Pour cr\u00e9er des murs virtuels nous allons au pr\u00e9alable d\u00e9couvrir l&rsquo;objet Pose. Par exemple dans notre rep\u00e8re nous pouvons cr\u00e9er un objet Pose comme ci-dessous :\n  <\/p>\n  \n  <div class=\"wp-block-wab-pastacode\">\n\t<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-python code-embed-code\">center_wall3 \t= Pose(200, 250, 0,  angle_z=degrees(0))<\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   Cette ligne de code d\u00e9clare en r\u00e9alit\u00e9 un point situ\u00e9 \u00e0 20 cm de l&rsquo;origine dans l&rsquo;axe x et 25 cm dans l&rsquo;axe y (ici c&rsquo;est le centre de la barre bleu situ\u00e9e sous la lettre A)\n  <\/p>\n  \n  \n  <p>\n   A l&rsquo;initialisation de l&rsquo;application ou lorsque Cozmo est soulev\u00e9, Cozmo cr\u00e9\u00e9 une nouvelle Pose en 0,0,0 correspondant au point au sol situ\u00e9 au milieu devant les deux roues avant du robot. A noter que cette Pose dispose d&rsquo;un param\u00e8tre origin_id qui est incr\u00e9ment\u00e9 \u00e0 chaque fois que le robot perd sa localisation (lorsqu&rsquo;il est soulev\u00e9 par exemple) pour qu&rsquo;il n&rsquo;y ait pas de conflit avec de pr\u00e9c\u00e9dentes Pose.\n  <\/p>\n  \n  \n  <p>\n   Lorsque Cozmo se d\u00e9place, sa pose et la pose des objets qu&rsquo;il d\u00e9tecte (visages, cubes, etc.) sont en position relative par rapport \u00e0 la Pose initiale du robot.\n  <\/p>\n  \n  \n  <p>\n   L&rsquo;axe X est orient\u00e9 vers l&rsquo;avant du robot et l&rsquo;axe Y est orient\u00e9 vers la gauche du robot.\n  <\/p>\n  \n  \n  <p>\n   A partir de ce point nous pourrons cr\u00e9er un mur comme ci-apr\u00e8s.\n  <\/p>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-creer-des-objets-virtuels-la-fonction-custom-fixed-object\">\n   Cr\u00e9er des objets virtuels : la fonction\n   <a href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.world.html?highlight=create_custom_fixed_object#cozmo.world.World.create_custom_fixed_object\" rel=\"noopener\" target=\"_blank\">\n    <em>\n     custom_fixed_object\n    <\/em>\n   <\/a>\n  <\/h2>\n  \n  \n  <p>\n   Dans l&rsquo;exemple mis \u00e0 disposition sur\n   <a href=\"https:\/\/github.com\/generationrobots-lab\/cozmo-examples\/blob\/master\/objects_custom_fixed_demo.py\">\n    notre repository github\n   <\/a>\n   nous d\u00e9clarons autant de \u00ab\u00a0Pose\u00a0\u00bb que de sections de murs que nous allons cr\u00e9\u00e9 (3 sections autour du point A et 3 autour du point C).\n  <\/p>\n  \n  \n  <p>\n   <strong>\n    A partir de ce point central on d\u00e9clare un objet en forme de parall\u00e9l\u00e9pip\u00e8de rectangle en indiquant la longueur, l&rsquo;\u00e9paisseur et la hauteur de cet objet.\n   <\/strong>\n  <\/p>\n  \n  \n  <p>\n   Par exemple ici nous d\u00e9clarons un mur de 10 mm de large sur 100 mm de long avec une hauteur WALL_HEIGHT (c&rsquo;est une variable personnalis\u00e9e d\u00e9finie dans le programme).\n  <\/p>\n  \n  <div class=\"wp-block-wab-pastacode\">\n\t<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-python code-embed-code\">robot.world.create_custom_fixed_object(center_wall3, 10, 100, WALL_HEIGHT, relative_to_robot=True)<\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   La fonction\n   <a href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.world.html?highlight=create_custom_fixed_object#cozmo.world.World.create_custom_fixed_object\" rel=\"noopener\" target=\"_blank\">\n    <em>\n     custom_fixed_object\n    <\/em>\n   <\/a>\n   d\u00e9fini un parall\u00e9l\u00e9pip\u00e8de de dimension personnalis\u00e9e et le place dans le monde de Cozmo. Il n&rsquo;est pas visible \u00e0 l&rsquo;oeil nu on pourra le voir sur la vue 3d du robot.\n  <\/p>\n  \n  \n  <p>\n   Voici le prototype de la fonction avec ses param\u00e8tres :\n  <\/p>\n  \n  \n  <p>\n   <code class=\"descname\">\n    <span class=\"highlighted\">\n     create_custom_fixed_object\n    <\/span>\n   <\/code>\n   <span class=\"sig-paren\">\n    (\n   <\/span>\n   <em>\n    pose\n   <\/em>\n   ,\n   <em>\n    x_size_mm\n   <\/em>\n   ,\n   <em>\n    y_size_mm\n   <\/em>\n   ,\n   <em>\n    z_size_mm\n   <\/em>\n   ,\n   <em>\n    relative_to_robot=False\n   <\/em>\n   ,\n   <em>\n    use_robot_origin=True\n   <\/em>\n   <span class=\"sig-paren\">\n    )\n   <\/span>\n  <\/p>\n  \n  \n  <p>\n   Param\u00e8tres:\n  <\/p>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    pose (cozmo.util.Pose) \u2013 L&#8217;emplacement de l&rsquo;objet cr\u00e9\u00e9\n   <\/li>\n   \n   \n   <li>\n    x_size_mm (float) \u2013 taille de l&rsquo;objet (en millim\u00e8tres) sur l&rsquo;axe X.\n   <\/li>\n   \n   \n   <li>\n    y_size_mm (float) \u2013 taille de l&rsquo;objet (en millim\u00e8tres) sur l&rsquo;axe Y.\n   <\/li>\n   \n   \n   <li>\n    z_size_mm (float) \u2013 taille de l&rsquo;objet (en millim\u00e8tres) sur l&rsquo;axe Z.\n   <\/li>\n   \n   \n   <li>\n    relative_to_robot (bool) \u2013 indication si la pose est relative \u00e0 l&rsquo;origine ou non\n   <\/li>\n   \n  <\/ul>\n  \n  <div class=\"wp-block-wab-pastacode\">\n\t<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <a href=\"https:\/\/github.com\/generationrobots-lab\/cozmo-examples\/blob\/master\/objects_custom_fixed_demo.py\" title=\"Afficher objects_custom_fixed_demo.py\" target=\"_blank\" class=\"code-embed-name\">objects_custom_fixed_demo.py<\/a> <a href=\"https:\/\/raw.github.com\/generationrobots-lab\/cozmo-examples\/master\/objects_custom_fixed_demo.py\" title=\"Back to objects_custom_fixed_demo.py\" class=\"code-embed-raw\" target=\"_blank\">affichage brut<\/a> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"54\" data-line-offset=\"53\"><code class=\"language-python code-embed-code\">\tcenter_wall1 \t= Pose(300, 0, 0,  angle_z=degrees(0))<br\/>\twall1 \t\t\t= robot.world.create_custom_fixed_object(center_wall1, 400, 10, WALL_HEIGHT, relative_to_robot=True)<br\/><br\/>\tcenter_wall2\t= Pose(250, 200, 0,  angle_z=degrees(0))<br\/>\twall2 \t\t\t= robot.world.create_custom_fixed_object(center_wall2, 100, 10, WALL_HEIGHT, relative_to_robot=True)<br\/><br\/>\tcenter_wall3 \t= Pose(200, 250, 0,  angle_z=degrees(0))<br\/>\twall3 \t\t\t= robot.world.create_custom_fixed_object(center_wall3, 10, 100, WALL_HEIGHT, relative_to_robot=True)<br\/><br\/>\tcenter_wall4 \t= Pose(300, 250, 0,  angle_z=degrees(0))<br\/>\twall4 \t\t\t= robot.world.create_custom_fixed_object(center_wall4, 10, 100, WALL_HEIGHT, relative_to_robot=True)<br\/><br\/>\tcenter_wall5 \t= Pose(200, 50, 0,  angle_z=degrees(0))<br\/>\twall5 \t\t\t= robot.world.create_custom_fixed_object(center_wall5, 10, 100, WALL_HEIGHT, relative_to_robot=True)<br\/><br\/>\tcenter_wall6 \t= Pose(250, 100, 0,  angle_z=degrees(0))<br\/>\twall6 \t\t\t= robot.world.create_custom_fixed_object(center_wall6, 100, 10, WALL_HEIGHT, relative_to_robot=True)<br\/><br\/>\t# soulever et reposer le robot \u00e0 la position (0,0) de votre rep\u00e8re.<\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   Une fois tous les murs cr\u00e9es nous allons circuler entre les points A, B et C.\n  <\/p>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-navigation-dans-l-environnement-peuple-de-murs-virtuels\">\n   Navigation dans l&rsquo;environnement peupl\u00e9 de murs virtuels\n  <\/h2>\n  \n  \n  <p>\n   Une fois les objects d\u00e9clar\u00e9s il est tr\u00e8s simple de faire circuler le robot Cozmo dans cet environnement avec la fonction\n   <a href=\"https:\/\/blog.generationrobots.com\/fr\/cozmo-sdk-deplacement-robot-et-cubes\/\">\n    go_to_pose\n   <\/a>\n   vue dans le tutoriel pr\u00e9c\u00e9dent.\n  <\/p>\n  \n  \n  <p>\n   On indique en param\u00e8tre le point \u00e0 rejoindre. Afin d&rsquo;orienter le robot correctement il faut utiliser le param\u00e8tre angle_z afin que le robot approche le point selon l&rsquo;angle souhait\u00e9.\n  <\/p>\n  \n  <div class=\"wp-block-wab-pastacode\">\n\t<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-python code-embed-code\">\t# go to position A <br\/>\taction = robot.go_to_pose(Pose(250, 250, 0, angle_z=degrees(-90)), relative_to_robot=False)<br\/>\taction.wait_for_completed()<\/code><\/pre> <\/div><\/div>\n\n  \n  <h2 class=\"wp-block-heading\" id=\"h-le-deplacement-en-action\">\n   Le d\u00e9placement en action\n  <\/h2>\n  \n  \n  <p>\n   Voici la vid\u00e9o de l&rsquo;ex\u00e9cution du programme\n   <a href=\"https:\/\/github.com\/generationrobots-lab\/cozmo-examples\/blob\/master\/objects_custom_fixed_demo.py\">\n    objects_custom_fixed_demo.py\n   <\/a>\n   qui a servi \u00e0 cr\u00e9er ce tutoriel.\n  <\/p>\n  \n  \n  <figure class=\"wp-block-image\">\n   <a href=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/02\/nav_path_terminal.png\">\n    <img decoding=\"async\" width=\"1736\" height=\"319\" alt=\"\" class=\"wp-image-5831\" src=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/02\/nav_path_terminal.png\" srcset=\"https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/nav_path_terminal.png 1736w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/nav_path_terminal-300x55.png 300w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/nav_path_terminal-768x141.png 768w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/nav_path_terminal-1024x188.png 1024w\" sizes=\"(max-width: 1736px) 100vw, 1736px\" \/>\n   <\/a>\n  <\/figure>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-visualisation-des-murs\">\n   Visualisation des murs\n  <\/h2>\n  \n  \n  <p>\n   Pour visualiser les murs cr\u00e9\u00e9s vous devrez ajouter le param\u00e8tre use_3d_viewer=True \u00e0 l&rsquo;\u00e9x\u00e9cution de run_program\n  <\/p>\n  \n  <div class=\"wp-block-wab-pastacode\">\n\t<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-python code-embed-code\">cozmo.run_program(cozmo_program, use_3d_viewer=True)<\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   Ce qui vous permettra d&rsquo;afficher la vue ci-dessous o\u00f9 on peut voir les murs en rouge\/jaune, les zones vues par le robot en vert et les traces du parcours de Cozmo. Impressionnant non ?\n  <\/p>\n  \n  \n  <figure class=\"wp-block-image\">\n   <a href=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/02\/nav_path.png\">\n    <img loading=\"lazy\" decoding=\"async\" width=\"1642\" height=\"981\" alt=\"\" class=\"wp-image-5832\" src=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/02\/nav_path.png\" srcset=\"https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/nav_path.png 1642w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/nav_path-300x179.png 300w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/nav_path-768x459.png 768w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/02\/nav_path-1024x612.png 1024w\" sizes=\"(max-width: 1642px) 100vw, 1642px\" \/>\n   <\/a>\n  <\/figure>\n  \n  \n  <p>\n   A vous de jouer ! Bonne exploration !\n  <\/p>\n  \n  \n  <p class=\"has-text-align-center\">\n  <\/p>\n  \n <\/body>\n<\/html>","protected":false},"excerpt":{"rendered":"<p>Le robot Cozmo est aussi un b\u00e2tisseur. On a vu que Cozmo peut construire ses propres objets ou encore empiler des cubes comme expliqu\u00e9 dans le tutoriel d\u00e9placement du robot et des cubes . Cozmo peut faire encore mieux. Il peut cr\u00e9er des objets virtuels et notamment des murs. Il peut ensuite les utiliser pour[&#8230;]<br \/> <a class=\"button\" href=\"https:\/\/www.generationrobots.com\/blog\/fr\/cozmo-sdk-custom-objects-murs-virtuels\/\" style=\"float:right;\">Read this article &gt;&gt;<\/a><\/p>\n","protected":false},"author":188,"featured_media":5880,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1128],"tags":[],"class_list":["post-5830","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-education"],"_links":{"self":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/comments?post=5830"}],"version-history":[{"count":19,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5830\/revisions"}],"predecessor-version":[{"id":13195,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5830\/revisions\/13195"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media\/5880"}],"wp:attachment":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media?parent=5830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/categories?post=5830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/tags?post=5830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}