{"id":5321,"date":"2018-10-03T16:33:43","date_gmt":"2018-10-03T14:33:43","guid":{"rendered":"https:\/\/blog.generationrobots.com\/?p=5321"},"modified":"2023-02-24T15:18:58","modified_gmt":"2023-02-24T14:18:58","slug":"cozmo-sdk-gerer-les-animations","status":"publish","type":"post","link":"https:\/\/www.generationrobots.com\/blog\/fr\/cozmo-sdk-gerer-les-animations\/","title":{"rendered":"Cozmo SDK : g\u00e9rer les animations"},"content":{"rendered":"\n<html>\n <body>\n  <p>\n   <span style=\"font-weight: 400;\">\n    Cozmo est un\n   <\/span>\n   <span style=\"font-weight: 400;\">\n    concentr\u00e9 de technologie et d&rsquo;\u00e9motions. Il est\n   <\/span>\n   <span style=\"font-weight: 400;\">\n    fourni avec une biblioth\u00e8que tr\u00e8s compl\u00e8te d\u2019expressions et d\u2019animations. Le robot Cozmo est tr\u00e8s expressif : curieux, joyeux, m\u00e9content, f\u00e2ch\u00e9, d\u00e9sol\u00e9, boudeur ou surexcit\u00e9, \u2026 il se fait comprendre gr\u00e2ce \u00e0 ses yeux, ses bruits et ses mouvements.\n   <\/span>\n  <\/p>\n  \n  \n  <p>\n   <span style=\"font-weight: 400;\">\n    L\u2019API permet de d\u00e9clencher ces comportements et mouvements. Nous allons voir comment faire.\n   <\/span>\n  <\/p>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-objectif-comprendre-le-fonctionnement-des-animations-sur-cozmo\">\n   <strong>\n    Objectif : comprendre le fonctionnement des animations sur Cozmo\n   <\/strong>\n  <\/h2>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    <strong>\n     <span style=\"color: #00ccff;\">\n      Dur\u00e9e :\n     <\/span>\n     30 minutes\n    <\/strong>\n   <\/li>\n   \n   \n   <li>\n    <strong>\n     <span style=\"color: #00ccff;\">\n      Niveau de difficult\u00e9 :\n     <\/span>\n     d\u00e9butant\n    <\/strong>\n   <\/li>\n   \n   \n   <li>\n    <strong>\n     <span style=\"color: #00ccff;\">\n      Comp\u00e9tence acquises :\n     <\/span>\n     gestion des animations\n    <\/strong>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-les-prerequis\">\n   <strong>\n    Les pr\u00e9requis\n   <\/strong>\n  <\/h2>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    Avoir \u00e9tabli la connexion entre Cozmo et l&rsquo;ordinateur :\n    <a class=\"catalogue\" href=\"\/blog\/fr\/comment-activer-le-mode-sdk-de-cozmo\/\" title=\"Cozmo SDK : deux m\u00e9thodes pour se connecter au robot\">\n     Cozmo SDK : deux m\u00e9thodes pour se connecter au robot\n    <\/a>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-ou-se-trouve-la-bibliotheque-d-animations-de-cozmo\">\n   <strong>\n    O\u00f9 se trouve la biblioth\u00e8que d&rsquo;animations de Cozmo ?\n   <\/strong>\n  <\/h2>\n  \n  \n  <p>\n   Les \u00e9motions et les petites mimiques que vous avez vu sur Cozmo sont embarqu\u00e9es. Cette biblioth\u00e8que d&rsquo;animations est accessible de deux fa\u00e7ons :\n  <\/p>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    via les\n    <em>\n     triggers\n    <\/em>\n    (voir\n    <a class=\"catalogue\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.anim.html#cozmo.anim.Triggers\" rel=\"noopener\" target=\"_blank\" title=\"Triggers d'animations pour le robot Cozmo\">\n     cozmo.anim.Triggers\n    <\/a>\n    )\n   <\/li>\n   \n   \n   <li>\n    via les\n    <em>\n     noms des animations\n    <\/em>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <p>\n   L&rsquo;int\u00e9r\u00eat des Triggers (d\u00e9clencheurs) est qu&rsquo;\n   <strong>\n    un\n    <em>\n     Trigger\n    <\/em>\n    va pouvoir d\u00e9clencher une animation parmi plusieurs\n   <\/strong>\n   de fa\u00e7on appropri\u00e9e\n   <strong>\n    et g\u00e9n\u00e9rer de la vari\u00e9t\u00e9 dans les r\u00e9actions de Cozmo\n   <\/strong>\n   .\n  <\/p>\n  \n  \n  <p>\n   Pour rendre votre robot plus vivant, l&rsquo;utilisation des\n   <em>\n    Triggers\n   <\/em>\n   est recommand\u00e9e.\n  <\/p>\n  \n  \n  <p>\n   Le d\u00e9clenchement des animations par leur nom via l&rsquo;API est susceptible d&rsquo;\u00eatre modifi\u00e9 dans le futur.\n  <\/p>\n  \n  \n  <p>\n   Il existe un troisi\u00e8me type d\u2019animation, les\n   <em>\n    behaviors\n   <\/em>\n   (comportements). Les exemples ci-apr\u00e8s montre comment les d\u00e9clencher. Un prochain TP expliquera plus en d\u00e9tails le fonctionnement des\n   <em>\n    behaviors.\n   <\/em>\n   Les\n   <em>\n    behaviors\n   <\/em>\n   se trouvent dans\n   <em>\n    cozmo.behavior.BehaviorTypes.\n   <\/em>\n  <\/p>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-executer-des-animations-par-des-triggers-ou-par-leur-noms\">\n   Ex\u00e9cuter des animations par des Triggers ou par leur noms\n  <\/h2>\n  \n  \n  <p>\n   <span style=\"font-weight: 400;\">\n    Nous allons d\u00e9tailler ci-dessous les deux fa\u00e7ons de jouer des animations sur le robot Cozmo : par le biais d&rsquo;un\n    <a class=\"catalogue\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.anim.html#cozmo.anim.Triggers\" rel=\"noopener\" target=\"_blank\" title=\"Triggers d'animations pour le robot Cozmo\">\n     <em>\n      Trigger\n     <\/em>\n    <\/a>\n    ou via le\n    <em>\n     nom de l\u2019animation\n    <\/em>\n    .\n   <\/span>\n  <\/p>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-les-triggers\">\n   Les triggers\n  <\/h3>\n  \n  \n  <p>\n   <span style=\"font-weight: 400;\">\n    <span style=\"font-weight: 400;\">\n     <span style=\"font-weight: 400;\">\n      C&rsquo;est la m\u00e9thode recommand\u00e9e. Vous utiliserez\n     <\/span>\n    <\/span>\n   <\/span>\n   la m\u00e9thode\n   <em>\n    play_anim_trigger\n   <\/em>\n   .\n  <\/p>\n  \n  \n  <p>\n   Dans cet exemple on joue le trigger\n   <em>\n    OnSpeedtapRoundPlayerWinHighIntensity.\n   <\/em>\n  <\/p>\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\/move_play_animation.py\" title=\"Afficher move_play_animation.py\" target=\"_blank\" class=\"code-embed-name\">move_play_animation.py<\/a> <a href=\"https:\/\/raw.github.com\/generationrobots-lab\/cozmo-examples\/master\/move_play_animation.py\" title=\"Back to move_play_animation.py\" class=\"code-embed-raw\" target=\"_blank\">affichage brut<\/a> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-line=\"30\" data-start=\"28\" data-line-offset=\"27\"><code class=\"language-python code-embed-code\">    # Jouer une animation \u00e0 partir d&#039;une Trigger<br\/>    print(&quot;Ex\u00e9cution de la trigger : OnSpeedtapRoundPlayerWinHighIntensity&quot;)<br\/>    robot.play_anim_trigger(cozmo.anim.Triggers.OnSpeedtapRoundPlayerWinHighIntensity).wait_for_completed()<\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   <span style=\"text-decoration: underline;\">\n    Remarque\n   <\/span>\n   : on peut jouer une animation tout en bloquant les chenilles de Cozmo gr\u00e2ce \u00e0 la variable\n   <em>\n    ignore_body_track=True\n   <\/em>\n   \u00e0 l&rsquo;appel de\n   <em>\n    play_anim_trigger.\n   <\/em>\n  <\/p>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    <a class=\"catalogue\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.anim.html#cozmo.anim.Triggers\" title=\"Triggers d'animations pour Cozmo\">\n     <span style=\"font-weight: 400;\">\n      Liste des triggers pour le robot Cozmo\n     <\/span>\n    <\/a>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-le-nom-d-une-animation-et-la-fonction-play-anim\">\n   Le nom d&rsquo;une animation et la fonction\n   <em>\n    play_anim()\n   <\/em>\n  <\/h3>\n  \n  \n  <p>\n   Dans ce cas c&rsquo;est la m\u00e9thode play_anim qui est utilis\u00e9e. Dans cet exemple on joue l&rsquo;animation\n   <em>\n    anim_greeting_happy_03\n   <\/em>\n   .\n  <\/p>\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\/move_play_animation.py\" title=\"Afficher move_play_animation.py\" target=\"_blank\" class=\"code-embed-name\">move_play_animation.py<\/a> <a href=\"https:\/\/raw.github.com\/generationrobots-lab\/cozmo-examples\/master\/move_play_animation.py\" title=\"Back to move_play_animation.py\" class=\"code-embed-raw\" target=\"_blank\">affichage brut<\/a> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-line=\"46\" data-start=\"44\" data-line-offset=\"43\"><code class=\"language-python code-embed-code\">    # # Jouer une animation par son nom.<br\/>    print(&quot;Ex\u00e9cution de l&#039;animation : anim_greeting_happy_03&quot;)<br\/>    robot.play_anim(name=&quot;anim_greeting_happy_03&quot;).wait_for_completed()<\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   Vous pouvez retrouver sur notre\n   <a class=\"catalogue\" href=\"https:\/\/github.com\/generationrobots-lab\/cozmo-examples\" rel=\"noopener\" target=\"_blank\" title=\"Repository GitHub G\u00e9n\u00e9ration Robots - Cozmo SDK\">\n    repository GitHub\n   <\/a>\n   tous les exemples de code. Ci-dessous, l&rsquo;exemple complet.\n  <\/p>\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\/move_play_animation.py\" title=\"Afficher move_play_animation.py\" target=\"_blank\" class=\"code-embed-name\">move_play_animation.py<\/a> <a href=\"https:\/\/raw.github.com\/generationrobots-lab\/cozmo-examples\/master\/move_play_animation.py\" title=\"Back to move_play_animation.py\" class=\"code-embed-raw\" target=\"_blank\">affichage brut<\/a> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-line=\"30,35,41,46\" data-start=\"26\" data-line-offset=\"25\"><code class=\"language-python code-embed-code\">def cozmo_program(robot: cozmo.robot.Robot):<br\/><br\/>    # Jouer une animation \u00e0 partir d&#039;une Trigger<br\/>    print(&quot;Ex\u00e9cution de la trigger : OnSpeedtapRoundPlayerWinHighIntensity&quot;)<br\/>    robot.play_anim_trigger(cozmo.anim.Triggers.OnSpeedtapRoundPlayerWinHighIntensity).wait_for_completed()<br\/>    robot.say_text(&quot;une autre&quot;, duration_scalar=0.5).wait_for_completed()<br\/><br\/>    # # Jouer une animation \u00e0 partir d&#039;une Trigger en ignorant le mouvement des roues<br\/>    print(&quot;Ex\u00e9cution de la trigger : OnSpeedtapGameCozmoWinHighIntensity (sans body track)&quot;)<br\/>    robot.play_anim_trigger(cozmo.anim.Triggers.OnSpeedtapGameCozmoWinHighIntensity, ignore_body_track=True).wait_for_completed()<br\/>    robot.say_text(&quot;et encore une&quot;, duration_scalar=0.5).wait_for_completed()<br\/><br\/>    <br\/>    # # Jouer une animation \u00e0 partir d&#039;une Trigger avec le mouvement des roues<br\/>    print(&quot;Ex\u00e9cution de la trigger : OnSpeedtapGameCozmoWinHighIntensity (avec body track)&quot;)<br\/>    robot.play_anim_trigger(cozmo.anim.Triggers.OnSpeedtapGameCozmoWinHighIntensity, ignore_body_track=False).wait_for_completed()<br\/>    robot.say_text(&quot;une derni\u00e8re &quot;, duration_scalar=0.5).wait_for_completed()<br\/><br\/>    # # Jouer une animation par son nom.<br\/>    print(&quot;Ex\u00e9cution de l&#039;animation : anim_greeting_happy_03&quot;)<br\/>    robot.play_anim(name=&quot;anim_greeting_happy_03&quot;).wait_for_completed()<\/code><\/pre> <\/div><\/div>\n\n  \n  <h2 class=\"wp-block-heading\" id=\"h-obtenir-la-liste-des-animations\">\n   Obtenir la liste des animations\n  <\/h2>\n  \n  \n  <p>\n   Les animations sont jou\u00e9es al\u00e9atoirement par le robot lors de l&rsquo;appel de certaines fonctions. Vous pouvez acc\u00e9der \u00e0 ces animations et en r\u00e9cup\u00e9rer la liste.\n  <\/p>\n  \n  \n  <p>\n   Le code ci-dessous permet de lister les\n   <em>\n    triggers\n   <\/em>\n   ainsi que les\n   <em>\n    noms des animations\n   <\/em>\n   et de les stocker dans une liste. Elle sera affich\u00e9e sur votre \u00e9cran.\n  <\/p>\n  \n  \n  <p>\n   Vous pouvez aussi acc\u00e9der \u00e0 la\n   <a class=\"catalogue\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.anim.html#cozmo.anim.Triggers\" rel=\"noopener\" target=\"_blank\" title=\"Liste des triggers d'animation pour Cozmo\">\n    liste des\n    <em>\n     Triggers\n    <\/em>\n   <\/a>\n   dans la documentation du SDK sur le site de Anki.\n  <\/p>\n  \n  \n  <p>\n   Il est \u00e9galement possible d&rsquo;acc\u00e9der \u00e0 cette liste via un explorateur web (voir en fin d&rsquo;article).\n  <\/p>\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\/move_list_animations.py\" title=\"Afficher move_list_animations.py\" target=\"_blank\" class=\"code-embed-name\">move_list_animations.py<\/a> <a href=\"https:\/\/raw.github.com\/generationrobots-lab\/cozmo-examples\/master\/move_list_animations.py\" title=\"Back to move_list_animations.py\" class=\"code-embed-raw\" target=\"_blank\">affichage brut<\/a> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-line=\"34, 43\" data-start=\"28\" data-line-offset=\"27\"><code class=\"language-python code-embed-code\">def cozmo_program(robot: cozmo.robot.Robot):<br\/>    try:<br\/>        global animations<br\/>        global triggers<br\/><br\/>        # parcourir la liste des Triggers<br\/>        for t in dir(cozmo.anim.Triggers):<br\/>            if &#039;__&#039; not in t:<br\/>                triggers += t + &#039;,&#039;<br\/>        triggers = triggers[:-1]<br\/>        print(triggers)<br\/><br\/>        print(&quot;\\n&quot; , &quot;#########################&quot;, &quot;\\n&quot;)<br\/>        <br\/>        # parcourir les noms des animations<br\/>        for a in robot.conn.anim_names:<br\/>            animations += a + &#039;,&#039;<br\/>        animations = animations[:-1]<br\/>        print(animations)<br\/><br\/>    except KeyboardInterrupt:<\/code><\/pre> <\/div><\/div>\n\n  \n  <h3 class=\"wp-block-heading\" id=\"h-astuce\">\n   Astuce !\n  <\/h3>\n  \n  \n  <p>\n   Les\n   <em>\n    Triggers\n   <\/em>\n   sont des objets aussi si vous souhaitez utilisez le nom de la Trigger et donc utiliser la\n   <em>\n    string\n   <\/em>\n   vous pouvez ex\u00e9cuter cette\n   <em>\n    Trigger\n   <\/em>\n   avec ce petit bout de code en utilisant la fonction\n   <em>\n    getattr\n   <\/em>\n   .\n  <\/p>\n  \n  <div class=\"wp-block-wab-pastacode\">\n\t<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Using getattr<\/span> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-python code-embed-code\">trigger=&quot;PeekABooMedIntensity&quot;<br\/><br\/>def play_trigger():<br\/>    robot.play_anim_trigger( getattr( cozmo.anim.Triggers, trigger) ).wait_for_completed()<\/code><\/pre> <\/div><\/div>\n\n  \n  <h2 class=\"wp-block-heading\" id=\"h-l-explorateur-d-animations\">\n   L&rsquo;explorateur d&rsquo;animations\n  <\/h2>\n  \n  \n  <p>\n   <span style=\"font-weight: 400;\">\n    Nous vous recommandons d&rsquo;utiliser ce browser d\u2019\n    <em>\n     animations\n    <\/em>\n    , de\n    <em>\n     triggers\n    <\/em>\n    et de\n    <em>\n     behaviors\n    <\/em>\n    disponible sur github :\n    <a class=\"catalogue\" href=\"https:\/\/github.com\/GrinningHermit\/Cozmo-Animation-Explorer\" rel=\"noopener\" target=\"_blank\" title=\"Cozmo Animation Explorer by Grinning Hermit\">\n     Cozmo Animation Explorer by Grinning Hermit\n    <\/a>\n   <\/span>\n  <\/p>\n  \n  \n  <p>\n   <span style=\"font-weight: 400;\">\n    Les\n    <em>\n     animations\n    <\/em>\n    ,\n    <em>\n     triggers\n    <\/em>\n    et\n    <em>\n     behaviors\n    <\/em>\n    seront ainsi accessibles via un navigateur gr\u00e2ce \u00e0 Flask et accessible \u00e0 l&rsquo;adresse 127.0.0.1:5000 en local.\n   <\/span>\n  <\/p>\n  \n  \n  <figure class=\"wp-block-image\">\n   <a class=\"catalogue\" href=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2018\/10\/anims_browser.png\">\n    <img fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"193\" alt=\"Acc\u00e9der aux triggers et aux behaviors Cozmo via Flask\" class=\"wp-image-5340\" src=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2018\/10\/anims_browser-300x193.png\" srcset=\"https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2018\/10\/anims_browser-300x193.png 300w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2018\/10\/anims_browser-768x494.png 768w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2018\/10\/anims_browser-1024x658.png 1024w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2018\/10\/anims_browser.png 1198w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/>\n   <\/a>\n  <\/figure>\n  \n <\/body>\n<\/html>","protected":false},"excerpt":{"rendered":"<p>Cozmo est un concentr\u00e9 de technologie et d&rsquo;\u00e9motions. Il est fourni avec une biblioth\u00e8que tr\u00e8s compl\u00e8te d\u2019expressions et d\u2019animations. Le robot Cozmo est tr\u00e8s expressif : curieux, joyeux, m\u00e9content, f\u00e2ch\u00e9, d\u00e9sol\u00e9, boudeur ou surexcit\u00e9, \u2026 il se fait comprendre gr\u00e2ce \u00e0 ses yeux, ses bruits et ses mouvements. L\u2019API permet de d\u00e9clencher ces comportements et[&#8230;]<br \/> <a class=\"button\" href=\"https:\/\/www.generationrobots.com\/blog\/fr\/cozmo-sdk-gerer-les-animations\/\" style=\"float:right;\">Read this article &gt;&gt;<\/a><\/p>\n","protected":false},"author":188,"featured_media":5616,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1128],"tags":[1696,1791,74,336,1599,28,1011],"class_list":["post-5321","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-education","tag-cozmo","tag-cozmo-sdk","tag-education-fr","tag-python","tag-ressources-pedagogiques","tag-robotique-educative","tag-tutoriel"],"_links":{"self":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5321","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=5321"}],"version-history":[{"count":31,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5321\/revisions"}],"predecessor-version":[{"id":13130,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5321\/revisions\/13130"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media\/5616"}],"wp:attachment":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media?parent=5321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/categories?post=5321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/tags?post=5321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}