{"id":5708,"date":"2019-01-30T22:45:42","date_gmt":"2019-01-30T21:45:42","guid":{"rendered":"https:\/\/blog.generationrobots.com\/?p=5708"},"modified":"2023-03-29T10:38:50","modified_gmt":"2023-03-29T08:38:50","slug":"cozmo-sdk-gestion-et-detection-des-light-cubes","status":"publish","type":"post","link":"https:\/\/www.generationrobots.com\/blog\/fr\/cozmo-sdk-gestion-et-detection-des-light-cubes\/","title":{"rendered":"Cozmo SDK : gestion et d\u00e9tection des light cubes"},"content":{"rendered":"\n<html>\n <body>\n  <h2 class=\"wp-block-heading\" id=\"h-le-module-python-cozmo-objects-et-la-gestion-des-cubes-de-cozmo\">\n   Le module Python cozmo.objects et la gestion des cubes de Cozmo\n  <\/h2>\n  \n  \n  <p>\n   Dans ce TP pour Cozmo SDK, nous abordons la gestion des Power Cubes de Cozmo. Ces cubes ajoutent une couche d&rsquo;interaction suppl\u00e9mentaire entre le robot et son environnement, mais aussi avec les humains.\n   <strong>\n    Cozmo\n   <\/strong>\n   se sert \u00e9galement de ces cubes pour cartographier son environnement.\n  <\/p>\n  \n  \n  <figure class=\"wp-block-image aligncenter\">\n   <a href=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/01\/cozmo-power-cubes-mapping-slam.jpeg\">\n    <img fetchpriority=\"high\" decoding=\"async\" width=\"620\" height=\"340\" alt=\"cozmo-power-cubes-mapping-slam\" class=\"wp-image-5748\" src=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/01\/cozmo-power-cubes-mapping-slam.jpeg\" srcset=\"https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/01\/cozmo-power-cubes-mapping-slam.jpeg 620w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/01\/cozmo-power-cubes-mapping-slam-300x165.jpeg 300w\" sizes=\"(max-width: 620px) 100vw, 620px\" \/>\n   <\/a>\n   <figcaption class=\"wp-element-caption\">\n    Cozmo SDK &#8211; Utilisation des Power Cubes pour le SLAM\n   <\/figcaption>\n  <\/figure>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-detection-d-objets\">\n   D\u00e9tection d&rsquo;objets\n  <\/h3>\n  \n  \n  <p>\n   Les Power Cubes(LightCube\u00a0dans le SDK) sont des objets (\n   <code class=\"xref py py-class docutils literal notranslate\" style=\"font-size: 0.857143rem;\">\n    <span class=\"pre\">\n     <a class=\"reference internal\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.objects.html#module-cozmo.objects\" title=\"cozmo.objects.LightCube\">\n      cozmo.objects\n     <\/a>\n    <\/span>\n   <\/code>\n   ) pouvant \u00eatre reconnus et d\u00e9tect\u00e9s par Cozmo (d\u00e9tection via la cam\u00e9ra de Cozmo ou par d\u00e9tection d&rsquo;un changement de valeur dans les cubes, quand on les tapote).\n  <\/p>\n  \n  \n  <figure class=\"wp-block-image aligncenter\">\n   <a href=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/01\/cozmo-sdk-custom_marker-10.jpg\">\n    <img decoding=\"async\" width=\"500\" height=\"160\" alt=\"Marqueur personnalis\u00e9 pour Cozmo SDK\" class=\"wp-image-5754\" src=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/01\/cozmo-sdk-custom_marker-10.jpg\" srcset=\"https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/01\/cozmo-sdk-custom_marker-10.jpg 500w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/01\/cozmo-sdk-custom_marker-10-300x96.jpg 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/>\n   <\/a>\n  <\/figure>\n  \n  \n  <p>\n   Cozmo peut reconna\u00eetre d&rsquo;autres choses que ses cubes gr\u00e2ce \u00e0 sa cam\u00e9ra, il suffit d&rsquo;attacher des\n   <a href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.objects.html#cozmo.objects.CustomObjectMarkers\" rel=\"noopener\" target=\"_blank\">\n    marqueurs personnalis\u00e9s\n   <\/a>\n   sur ces nouveaux objets pour les distinguer. Voici un exemple de marqueur ci-dessous :\n  <\/p>\n  \n  \n  <p>\n   Il est aussi possible de cr\u00e9er des \u00e9l\u00e9ments virtuels dans le monde de Cozmo. Ce sera l&rsquo;objet d&rsquo;un autre tutoriel.\n  <\/p>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-fonctionnement-des-cubes\">\n   Fonctionnement des cubes\n  <\/h3>\n  \n  \n  <p>\n   Les Power Cubes de Cozmo embarquent un acc\u00e9l\u00e9rom\u00e8tre, un module BlueTooth et 4 LEDs. Cozmo peut reconna\u00eetre ses cubes (vision) mais aussi d\u00e9tecter quand ils sont d\u00e9plac\u00e9s ou tapot\u00e9s.\n  <\/p>\n  \n  \n  <p>\n   Dans ce TP, vous allez apprendre \u00e0 utiliser les 4 fonctionnalit\u00e9s suivantes :\n  <\/p>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    D\u00e9tecter les cubes\n   <\/li>\n   \n   \n   <li>\n    Allumer les LEDs\n   <\/li>\n   \n   \n   <li>\n    D\u00e9terminer la position des cubes\n   <\/li>\n   \n   \n   <li>\n    D\u00e9tecter le tapotement sur un cube\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-objectif-detecter-des-objets-et-interagir-avec\">\n   <strong>\n    Objectif : d\u00e9tecter des objets et interagir avec\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     45 minutes\n    <\/strong>\n   <\/li>\n   \n   \n   <li>\n    <strong>\n     <span style=\"color: #00ccff;\">\n      Niveau de difficult\u00e9 :\n     <\/span>\n     interm\u00e9diaire\n    <\/strong>\n   <\/li>\n   \n   \n   <li>\n    <strong>\n     <span style=\"color: #00ccff;\">\n      Comp\u00e9tence acquises :\n     <\/span>\n     d\u00e9tection des cubes et communication entre Cozmo et ses cubes\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    Cozmo SDK : les behaviors\n    <em>\n     cozmo.behavior.BehaviorTypes (en construction)\n    <\/em>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <p>\n   Par ailleurs vous devrez importer certains \u00e9l\u00e9ments de la librairie Cozmo tel que 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\">from cozmo.objects import LightCube1Id, LightCube2Id, LightCube3Id<\/code><\/pre> <\/div><\/div>\n\n  \n  <h3 class=\"wp-block-heading\" id=\"h-les-nouvelles-notions-que-vous-allez-aborder-dans-ce-tp\">\n   Les nouvelles notions que vous allez aborder dans ce TP\n  <\/h3>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    La fonction\n    <em>\n     cozmo.object\n    <\/em>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-detection-des-cubes\">\n   D\u00e9tection des cubes\n  <\/h2>\n  \n  \n  <p>\n   Les cubes seront d\u00e9tect\u00e9s par la cam\u00e9ra embarqu\u00e9e de Cozmo. Cette d\u00e9tection visuelle permet de positionner le cube dans le r\u00e9f\u00e9rentiel du robot.\n  <\/p>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-parcours-de-l-environnement\">\n   Parcours de l&rsquo;environnement\n  <\/h3>\n  \n  \n  <p>\n   Le robot Cozmo embarque des behaviors qui se chargent de scanner l&rsquo;environnement autour de lui pour d\u00e9tecter les objets pr\u00e9sents, comme ses cubes. Le robot se d\u00e9place et scanne l&rsquo;environnement gr\u00e2ce \u00e0 sa camera embarqu\u00e9e.\n  <\/p>\n  \n  \n  <p>\n   <em>\n    LookAroundInPlace\n   <\/em>\n   est l&rsquo;un de ces behaviors\n   <em>\n    .\n   <\/em>\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\">look_around = robot.start_behavior(cozmo.behavior.BehaviorTypes.LookAroundInPlace)<br\/>...<br\/>look_around.stop()<\/code><\/pre> <\/div><\/div>\n\n  \n  <h3 class=\"wp-block-heading\" id=\"h-fonctions-de-detection-des-cubes\">\n   Fonctions de d\u00e9tection des cubes\n  <\/h3>\n  \n  \n  <p>\n   Lorsque Cozmo se d\u00e9place dans son environnement, il cherche \u00e0 d\u00e9tecter de nouveaux objets (gr\u00e2ce aux marqueurs visuels se trouvant sur les diff\u00e9rentes faces de l&rsquo;objet).\n  <\/p>\n  \n  \n  <p>\n   Le cube 1 dispose d&rsquo;une image qui ressemble \u00e0 un trombone, le cube 2 ressemble \u00e0 une lampe ou \u00e0 un c\u0153ur et le cube 3 ressemble \u00e0 un b\u00e9b\u00e9 dans son si\u00e8ge.\n  <\/p>\n  \n  \n  <figure class=\"wp-block-image aligncenter\">\n   <a href=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/01\/cozmo-reconnaitre-cubes.jpg\">\n    <img decoding=\"async\" width=\"375\" height=\"311\" alt=\"Reconna\u00eetre les 3 cubes de Cozmo\" class=\"wp-image-5761\" src=\"https:\/\/blog.generationrobots.com\/wp-content\/uploads\/2019\/01\/cozmo-reconnaitre-cubes.jpg\" srcset=\"https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/01\/cozmo-reconnaitre-cubes.jpg 375w, https:\/\/www.generationrobots.com\/blog\/wp-content\/uploads\/2019\/01\/cozmo-reconnaitre-cubes-300x249.jpg 300w\" sizes=\"(max-width: 375px) 100vw, 375px\" \/>\n   <\/a>\n  <\/figure>\n  \n  \n  <p>\n   Deux fonctions peuvent lancer la recherche de ces marqueurs :\n  <\/p>\n  \n  \n  <ul class=\"wp-block-list\">\n   \n   <li>\n    <em>\n     robot.world.wait_until_observe_num_objects(&#8230;)\n    <\/em>\n   <\/li>\n   \n   \n   <li>\n    <em>\n     robot.world.wait_for_observed_light_cube(&#8230;)\n    <\/em>\n   <\/li>\n   \n  <\/ul>\n  \n  \n  <p>\n   <em>\n    <strong>\n     wait_until_observe_num_objects\n    <\/strong>\n   <\/em>\n   prend en argument les nombre d&rsquo;objets \u00e0 d\u00e9tecter et le type d&rsquo;objets ainsi qu&rsquo;un timeout si la recherche n&rsquo;aboutit pas. Il retourne une liste d&rsquo;objets.\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\">cubes = robot.world.wait_until_observe_num_objects(num=3, object_type=cozmo.objects.LightCube, timeout=60)<\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   Dans l&rsquo;exemple ci-dessus, 3 objets de type\n   <em>\n    cozmo.objects.LightCube\n   <\/em>\n   sont recherch\u00e9s.\n  <\/p>\n  \n  \n  <p>\n   <em>\n    <strong>\n     wait_for_observed_light_cube\n    <\/strong>\n   <\/em>\n   permet de scanner l&rsquo;environnement \u00e0 la recherche d&rsquo;un cube. La recherche s&rsquo;interrompt au premier cube trouv\u00e9. La fonction prend un param\u00e8tre timeout si la recherche n&rsquo;aboutit pas. Elle retourne une instance de l&rsquo;objet s&rsquo;il est vu par Cozmo.\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\">cube = robot.world.wait_for_observed_light_cube(timeout=30)<\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   Cette \u00e9tape est indispensable si vous souhaitez d\u00e9placer des cubes, les pousser, les empiler afin qu&rsquo;ils soient pr\u00e9sents dans le monde\n   <em>\n    World\n   <\/em>\n   du robot.\n  <\/p>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-allumage-et-extinction-des-leds-des-cubes\">\n   Allumage et extinction des LEDs des cubes\n  <\/h2>\n  \n  \n  <h3 class=\"wp-block-heading\" id=\"h-l-objet-cozmo-objects-lightcube\">\n   L&rsquo;objet\n   <em>\n    cozmo.objects.LightCube\n   <\/em>\n  <\/h3>\n  \n  \n  <p>\n   Avant d&rsquo;allumer un cube, il faut d&rsquo;abord le s\u00e9lectionner. Un cube est accessible par son id gr\u00e2ce \u00e0 la fonction\n   <code class=\"xref py py-class docutils literal notranslate\" style=\"font-size: 1.5rem;\">\n    <span class=\"pre\">\n     get_light_cube\n    <\/span>\n   <\/code>\n   <span class=\"sig-paren\">\n    (\n   <\/span>\n   <em>\n    cube_id\n   <\/em>\n   <span class=\"sig-paren\">\n    )\n   <\/span>\n  <\/p>\n  \n  \n  <p>\n   Le\n   <em>\n    cube_id\n   <\/em>\n   est une valeur parmi\n   <a class=\"reference internal\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.objects.html#cozmo.objects.LightCube1Id\" title=\"cozmo.objects.LightCube1Id\">\n    <code class=\"xref py py-class docutils literal notranslate\" style=\"font-size: 1.5rem;\">\n     <span class=\"pre\">\n      LightCube1Id\n     <\/span>\n    <\/code>\n   <\/a>\n   ,\n   <a class=\"reference internal\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.objects.html#cozmo.objects.LightCube2Id\" title=\"cozmo.objects.LightCube2Id\">\n    <code class=\"xref py py-class docutils literal notranslate\" style=\"font-size: 1.5rem;\">\n     <span class=\"pre\">\n      LightCube2Id\n     <\/span>\n    <\/code>\n   <\/a>\n   et\n   <a class=\"reference internal\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.objects.html#cozmo.objects.LightCube3Id\" title=\"cozmo.objects.LightCube3Id\">\n    <code class=\"xref py py-class docutils literal notranslate\" style=\"font-size: 1.5rem;\">\n     <span class=\"pre\">\n      LightCube3Id\n     <\/span>\n    <\/code>\n   <\/a>\n  <\/p>\n  \n  \n  <p>\n   La fonction retourne un objet\n   <a class=\"reference internal\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.objects.html#cozmo.objects.LightCube\" title=\"cozmo.objects.LightCube\">\n    <code class=\"xref py py-class docutils literal notranslate\" style=\"font-size: 1.5rem;\">\n     <span class=\"pre\">\n      cozmo.objects.LightCube\n     <\/span>\n    <\/code>\n   <\/a>\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\">def lights():<br\/>    cube1 = robot.world.get_light_cube(LightCube1Id)  # il ressemble \u00e0 un trombonne<br\/>    cube2 = robot.world.get_light_cube(LightCube2Id)  # il ressemble \u00e0 une lampe ou un coeur<br\/>    cube3 = robot.world.get_light_cube(LightCube3Id)  # il ressemble aux lettres ab sur un T<br\/><br\/>    # on allume le cube<br\/>    if cube1 is not None:<br\/>        cube1.set_lights(cozmo.lights.red_light)<br\/>    else:<br\/>        cozmo.logger.warning(&quot;Cozmo is not connected to a LightCube1Id cube - check the battery.&quot;)<br\/><br\/>    time.sleep(3)<br\/><br\/>    # on \u00e9teint le cube<br\/>    if cube1 is not None:<br\/>        cube1.set_lights(cozmo.lights.off_light)<br\/>    else:<br\/>        cozmo.logger.warning(&quot;Cozmo is not connected to a LightCube1Id cube - check the battery.&quot;)<\/code><\/pre> <\/div><\/div>\n\n  \n  <h3 class=\"wp-block-heading\" id=\"h-l-objet-cozmo-lights-light-object\">\n   L&rsquo;objet\n   <em>\n    cozmo.lights.Light object\n   <\/em>\n  <\/h3>\n  \n  \n  <p>\n   Il existe une infinit\u00e9 de couleurs mais 4 sont pr\u00e9d\u00e9finies et facilement utilisables gr\u00e2ce \u00e0 la fonction\n   <em>\n    set_lights\n   <\/em>\n   de l&rsquo;objet\n   <em>\n    LighCube\n   <\/em>\n   .\n  <\/p>\n  \n  \n  <p>\n   Ces couleurs sont rouge, bleu, vert et blanc, vous pouvez y acc\u00e9der via l&rsquo;objet\n   <em>\n    cozmo.lights.red_light,\u00a0cozmo.lights.green_light,\u00a0cozmo.lights.blue_light,\u00a0cozmo.lights.white_light.\n   <\/em>\n  <\/p>\n  \n  \n  <p>\n   Il est aussi possible de passer des valeurs num\u00e9riques.\n  <\/p>\n  \n  \n  <p>\n   Voici un exemple complet permettant de manipuler les LEDs des cubes lumineux de Cozmo.\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\/cube_lights_demos.py\" title=\"Afficher cube_lights_demos.py\" target=\"_blank\" class=\"code-embed-name\">cube_lights_demos.py<\/a> <a href=\"https:\/\/raw.github.com\/generationrobots-lab\/cozmo-examples\/master\/cube_lights_demos.py\" title=\"Back to cube_lights_demos.py\" class=\"code-embed-raw\" target=\"_blank\">affichage brut<\/a> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"5\" data-line-offset=\"4\"><code class=\"language-python code-embed-code\">&#039;&#039;&#039;Control Cozmo&#039;s Cube lights<br\/><br\/>Ce script montre un exemple on allume les leds de cubes<br\/>&#039;&#039;&#039;<br\/><br\/>import time<br\/><br\/>import cozmo<br\/>from cozmo.objects import LightCube1Id, LightCube2Id, LightCube3Id<br\/><br\/>def shift(l, n=0):<br\/>    &quot;&quot;&quot;<br\/>        Fonction qui d\u00e9cale la position des \u00e9l\u00e9ments d&#039;une liste de n positions<br\/>    &quot;&quot;&quot;<br\/>    return l[n:] + l[:n]<br\/><br\/><br\/>def cozmo_program(robot: cozmo.robot.Robot):<br\/>    cube1 = robot.world.get_light_cube(LightCube1Id)  # looks like a paperclip<br\/>    cube2 = robot.world.get_light_cube(LightCube2Id)  # looks like a lamp \/ heart<br\/>    cube3 = robot.world.get_light_cube(LightCube3Id)  # looks like the letters &#039;ab&#039; over &#039;T&#039;<br\/><br\/><br\/>    red, green, blue, white=cozmo.lights.red_light, cozmo.lights.green_light, cozmo.lights.blue_light, cozmo.lights.white_light<br\/>    colors=[red, white, white, white]<br\/><br\/>    time.sleep(5)<br\/><br\/>    if cube1 is not None:<br\/>        for l in [red, green, blue, white]: <br\/>            cube1.set_lights(l)<br\/>            time.sleep(1)<br\/>    else:<br\/>        cozmo.logger.warning(&quot;Cozmo is not connected to a LightCube1Id cube - check the battery.&quot;)<br\/><br\/>    if cube2 is not None:<br\/>        for i in range(20):<br\/>            colors = shift(colors, n=1)<br\/>            cube2.set_light_corners(colors[0], colors[1], colors[2], colors[3])<br\/>            time.sleep(0.4)<br\/>    else:<br\/>        cozmo.logger.warning(&quot;Cozmo is not connected to a LightCube2Id cube - check the battery.&quot;)<br\/><br\/><br\/>    if cube1 is not None:<br\/>        cube1.set_lights(cozmo.lights.off_light)<br\/>    else:<br\/>        cozmo.logger.warning(&quot;Cozmo is not connected to a LightCube1Id cube - check the battery.&quot;)<br\/><br\/>    if cube2 is not None:<br\/>        cube2.set_lights(cozmo.lights.off_light)<br\/>    else:<br\/>        cozmo.logger.warning(&quot;Cozmo is not connected to a LightCube2Id cube - check the battery.&quot;)<br\/><\/code><\/pre> <\/div><\/div>\n\n  \n  <h2 class=\"wp-block-heading\" id=\"h-\">\n  <\/h2>\n  \n  \n  <h2 class=\"wp-block-heading\" id=\"h-recuperation-des-coordonnees-des-cubes\">\n   R\u00e9cup\u00e9ration des coordonn\u00e9es des cubes\n  <\/h2>\n  \n  \n  <p>\n   Un cube d\u00e9tect\u00e9 par Cozmo renvoie les coordonn\u00e9es de sa position. La position d&rsquo;un cube qui n&rsquo;est pas positionn\u00e9 dans le monde de Cozmo aura pour coordonn\u00e9es (0, 0, 0).\n  <\/p>\n  \n  \n  <p>\n   Un objet dispose d&rsquo;une variable de type\n   <em>\n    Pose\n   <\/em>\n   . L&rsquo;objet\n   <em>\n    Pose\n   <\/em>\n   contient lui m\u00eame un objet de type\n   <em>\n    Position\n   <\/em>\n   qui contient les coordonn\u00e9es x, y et z de l&rsquo;objet.\n  <\/p>\n  \n  \n  <p>\n   Pour afficher les coordonn\u00e9es du cube 1 on peut utiliser le code suivant :\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\">print(cube1.pose.position.x, cube.pose.position.y, cube.pose.position.z)<\/code><\/pre> <\/div><\/div>\n\n  \n  <p>\n   On peut \u00e9galement r\u00e9cup\u00e9rer les coordonn\u00e9es dans un tuple (x, y, z).\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\">print(cube1.pose.position.x_y_z)<\/code><\/pre> <\/div><\/div>\n\n  \n  <h2 class=\"wp-block-heading\" id=\"h-detection-d-un-tapotement-sur-le-cube\">\n   D\u00e9tection d&rsquo;un tapotement sur le cube\n  <\/h2>\n  \n  \n  <p>\n   Les cubes disposent d&rsquo;un acc\u00e9l\u00e9rom\u00e8tre, qui renvoie ses valeurs au robots Cozmo via Bluetooth. Cozmo peut donc \u00ab\u00a0sentir\u00a0\u00bb quand quelqu&rsquo;un tapote sur un de ces cubes.\n  <\/p>\n  \n  \n  <p>\n   Lorsque cela se produit, un \u00e9v\u00e9nement\n   <a class=\"reference internal\" href=\"http:\/\/cozmosdk.anki.com\/docs\/generated\/cozmo.objects.html?highlight=tapped#cozmo.objects.EvtObjectTapped\" title=\"cozmo.objects.EvtObjectTapped\">\n    <code class=\"xref py py-obj docutils literal notranslate\">\n     <span class=\"pre\">\n      cozmo.objects.EvtObject\n      <span class=\"highlighted\">\n       Tapped\n      <\/span>\n     <\/span>\n    <\/code>\n   <\/a>\n   est \u00e9mis.\n  <\/p>\n  \n  \n  <p>\n   Voici comment le r\u00e9cup\u00e9rer un \u00e9v\u00e9nement et le traitement par une fonction\n   <em>\n    callback\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\"> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-python code-embed-code\">def on_cube_tapped(event, *, obj, tap_count, tap_duration, **kw): <br\/>\u00a0 \u00a0 print(&quot;Received a tap event&quot;, event, obj)<br\/><br\/>handler = robot.add_event_handler(cozmo.objects.EvtObjectTapped,on_cube_tapped)<\/code><\/pre> <\/div><\/div>\n\n <\/body>\n<\/html>","protected":false},"excerpt":{"rendered":"<p>Le module Python cozmo.objects et la gestion des cubes de Cozmo Dans ce TP pour Cozmo SDK, nous abordons la gestion des Power Cubes de Cozmo. Ces cubes ajoutent une couche d&rsquo;interaction suppl\u00e9mentaire entre le robot et son environnement, mais aussi avec les humains. Cozmo se sert \u00e9galement de ces cubes pour cartographier son environnement.[&#8230;]<br \/> <a class=\"button\" href=\"https:\/\/www.generationrobots.com\/blog\/fr\/cozmo-sdk-gestion-et-detection-des-light-cubes\/\" style=\"float:right;\">Read this article &gt;&gt;<\/a><\/p>\n","protected":false},"author":188,"featured_media":5766,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1128],"tags":[],"class_list":["post-5708","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\/5708","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=5708"}],"version-history":[{"count":32,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5708\/revisions"}],"predecessor-version":[{"id":13189,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/5708\/revisions\/13189"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media\/5766"}],"wp:attachment":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media?parent=5708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/categories?post=5708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/tags?post=5708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}