From baacf925c089b4610df4f7d167bbb350467e528f Mon Sep 17 00:00:00 2001 From: whoenig Date: Mon, 28 Aug 2023 20:13:31 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20IMRCLab/?= =?UTF-8?q?crazyswarm2@3b91a7d5ab651316f002259c5d00532451da0e54=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _static/basic.css | 22 ++++++++++++++++++++++ _static/documentation_options.js | 3 +-- _static/searchtools.js | 26 +++++++++++++++++--------- _static/sphinx_highlight.js | 16 +++++++++++++--- faq.html | 20 ++++++++++---------- genindex.html | 12 ++++++------ howto.html | 16 ++++++++-------- index.html | 14 +++++++------- installation.html | 16 ++++++++-------- overview.html | 20 ++++++++++---------- search.html | 12 ++++++------ searchindex.js | 2 +- tutorials.html | 32 ++++++++++++++++---------------- usage.html | 28 ++++++++++++++-------------- 14 files changed, 139 insertions(+), 100 deletions(-) diff --git a/_static/basic.css b/_static/basic.css index 7577acb1a..30fee9d0f 100644 --- a/_static/basic.css +++ b/_static/basic.css @@ -237,6 +237,10 @@ a.headerlink { visibility: hidden; } +a:visited { + color: #551A8B; +} + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -670,6 +674,16 @@ dd { margin-left: 30px; } +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + dl > dd:last-child, dl > dd:last-child > :last-child { margin-bottom: 0; @@ -738,6 +752,14 @@ abbr, acronym { cursor: help; } +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + /* -- code displays --------------------------------------------------------- */ pre { diff --git a/_static/documentation_options.js b/_static/documentation_options.js index 1e6716bbf..818cbb1e5 100644 --- a/_static/documentation_options.js +++ b/_static/documentation_options.js @@ -1,5 +1,4 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), +const DOCUMENTATION_OPTIONS = { VERSION: '1.0a1', LANGUAGE: 'en', COLLAPSE_INDEX: false, diff --git a/_static/searchtools.js b/_static/searchtools.js index 97d56a74d..7918c3fab 100644 --- a/_static/searchtools.js +++ b/_static/searchtools.js @@ -57,12 +57,12 @@ const _removeChildren = (element) => { const _escapeRegExp = (string) => string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -const _displayItem = (item, searchTerms) => { +const _displayItem = (item, searchTerms, highlightTerms) => { const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; const [docName, title, anchor, descr, score, _filename] = item; @@ -75,20 +75,24 @@ const _displayItem = (item, searchTerms) => { if (dirname.match(/\/index\/$/)) dirname = dirname.substring(0, dirname.length - 6); else if (dirname === "index/") dirname = ""; - requestUrl = docUrlRoot + dirname; + requestUrl = contentRoot + dirname; linkUrl = requestUrl; } else { // normal html builders - requestUrl = docUrlRoot + docName + docFileSuffix; + requestUrl = contentRoot + docName + docFileSuffix; linkUrl = docName + docLinkSuffix; } let linkEl = listItem.appendChild(document.createElement("a")); linkEl.href = linkUrl + anchor; linkEl.dataset.score = score; linkEl.innerHTML = title; - if (descr) + if (descr) { listItem.appendChild(document.createElement("span")).innerHTML = " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } else if (showSearchSummary) fetch(requestUrl) .then((responseData) => responseData.text()) @@ -97,6 +101,9 @@ const _displayItem = (item, searchTerms) => { listItem.appendChild( Search.makeSearchSummary(data, searchTerms) ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); }); Search.output.appendChild(listItem); }; @@ -115,14 +122,15 @@ const _finishSearch = (resultCount) => { const _displayNextItem = ( results, resultCount, - searchTerms + searchTerms, + highlightTerms, ) => { // results left, load the summary and display it // this is intended to be dynamic (don't sub resultsCount) if (results.length) { - _displayItem(results.pop(), searchTerms); + _displayItem(results.pop(), searchTerms, highlightTerms); setTimeout( - () => _displayNextItem(results, resultCount, searchTerms), + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), 5 ); } @@ -360,7 +368,7 @@ const Search = { // console.info("search results:", Search.lastresults); // print the results - _displayNextItem(results, results.length, searchTerms); + _displayNextItem(results, results.length, searchTerms, highlightTerms); }, /** diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js index aae669d7e..8a96c69a1 100644 --- a/_static/sphinx_highlight.js +++ b/_static/sphinx_highlight.js @@ -29,14 +29,19 @@ const _highlight = (node, addItems, text, className) => { } span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); parent.insertBefore( span, parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), + rest, node.nextSibling ) ); node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); if (isInSVG) { const rect = document.createElementNS( @@ -140,5 +145,10 @@ const SphinxHighlight = { }, }; -_ready(SphinxHighlight.highlightSearchWords); -_ready(SphinxHighlight.initEscapeListener); +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/faq.html b/faq.html index 90fad970b..60e403f1f 100644 --- a/faq.html +++ b/faq.html @@ -12,11 +12,11 @@ - - - - - + + + + + @@ -85,9 +85,9 @@
-

Frequently Asked Questions

+

Frequently Asked Questions

-

How can I get help?

+

How can I get help?

Please start a discussion for

  • Getting Crazyswarm2 to work with your hardware setup.

  • @@ -96,13 +96,13 @@

    How can I get help? -

    How can I report an issue?

    +

    How can I report an issue?

    If you strongly believe that you found a bug that requires changes in the code, feel free to open an issue. Provide as much details as possible to reproduce the problem, your observation, as well as the desired outcome.

    If you are not sure if a code change is required, please start a discussion first.

-

How do Crazyswarm2 and Crazyswarm differ?

+

How do Crazyswarm2 and Crazyswarm differ?

Crazyswarm2 was forked from Crazyswarm. However, there is also heavy re-design of core design choices.

  • Motion capture integration. @@ -125,7 +125,7 @@

    How do Crazyswarm2 and Crazyswarm differ? -

    How is Crazyswarm2 different from Bitcraze’s cflib?

    +

    How is Crazyswarm2 different from Bitcraze’s cflib?

    Both can be used to control several Crazyflies from a Python script. Here are some differences:

      diff --git a/genindex.html b/genindex.html index 5eb30644d..d49f569f0 100644 --- a/genindex.html +++ b/genindex.html @@ -11,12 +11,12 @@ - - - - - - + + + + + + diff --git a/howto.html b/howto.html index dd8923777..7a355264a 100644 --- a/howto.html +++ b/howto.html @@ -12,11 +12,11 @@ - - - - - + + + + + @@ -84,10 +84,10 @@
      -

      How To

      +

      How To

      This page shows short how to’s for the advanced usage.

      -

      Tracking Non-Robotic Objects

      +

      Tracking Non-Robotic Objects

      In some cases it can be useful to provide the position or pose of rigid bodies in the motion capture space to the robots. For example, consider a collision avoidance algorithms implemented on-board the firmware that requires to know the position of an obstacle. In that case, a “virtual” robot can be defined in crazyflies.yaml

      @@ -112,7 +112,7 @@

      Tracking Non-Robotic Objects -

      Debugging

      +

      Debugging

      If there is a crash (e.g., segmentation fault) in the crazyflie_server (C++ backend), you can find the stacktrace by using gdb. First, compile your code in debug mode, then run the launch file with the debug flag, which will open an xterm window. If you don’t have xterm installed, you can do so using sudo apt install xterm.

      diff --git a/index.html b/index.html index 02867c068..d42462242 100644 --- a/index.html +++ b/index.html @@ -12,11 +12,11 @@ - - - - - + + + + + @@ -79,7 +79,7 @@
      -

      Crazyswarm2: A ROS 2 testbed for Aerial Robot Teams

      +

      Crazyswarm2: A ROS 2 testbed for Aerial Robot Teams

      Crazyswarm2 is a work-in-progress port of the original Crazyswarm to ROS 2. It is fully open-source and available on github.

      Crazyswarm2 is primarily made for researchers that want to operate or simulate a team of unmanned aerial vehicles (UAVs) that uses the @@ -94,7 +94,7 @@

-

Contents

+

Contents

  • Installation
  • diff --git a/installation.html b/installation.html index a72f9ef56..2d0746651 100644 --- a/installation.html +++ b/installation.html @@ -12,11 +12,11 @@ - - - - - + + + + + @@ -84,7 +84,7 @@
    -

    Installation

    +

    Installation

    Crazyswarm2 runs on Ubuntu Linux in one of the following configurations:

    @@ -112,7 +112,7 @@

    Avoid using a virtual machine if possible: they add additional latency and might cause issues with the visualization tools.

    -

    First Installation

    +

    First Installation

    1. If needed, install ROS 2 using the instructions at https://docs.ros.org/en/galactic/Installation.html or https://docs.ros.org/en/humble/Installation.html.

    2. Install dependencies

      @@ -166,7 +166,7 @@

      First Installation -

      Updating

      +

      Updating

      You can update your local copy using the following commands:

      cd ros2_ws/src/crazyswarm2
       git pull
      diff --git a/overview.html b/overview.html
      index 5c798ffc2..fb9738705 100644
      --- a/overview.html
      +++ b/overview.html
      @@ -12,11 +12,11 @@
           
         
         
      -        
      -        
      -        
      -        
      -        
      +        
      +        
      +        
      +        
      +        
           
           
           
      @@ -86,11 +86,11 @@
                  
      -

      Overview

      +

      Overview

      This page will explain the overview of the crazyflie ROS 2 nodes:

      _images/overview_nodes.jpg
      -

      Explanation per node

      +

      Explanation per node

      In the source code of the Crazyswarm2 (Crazyflie ROS 2) project, there are several packages that we will explain here:

      • crazyflie/: The package that contains the crazyflie server nodes and the crazyflies.yaml.

      • @@ -100,7 +100,7 @@

        Explanation per node

      -

      Crazyflie server

      +

      Crazyflie server

      The crazyflie server node connects multiple Crazyflies with on or more Crazyradio PA dongles.

      It has two backends that you can choose from:

        @@ -122,12 +122,12 @@

        Crazyflie server -

        Simulation

        +

        Simulation

        The simulator uses the Crazyflie firmware as a software-in-the-loop (SIL). It provides the same ROS interface as the server and therefore can be used with C++ or Python user code.

        Currently, the desired setpoint is visualized in rviz (see Usage). However, the code is prepared to support physics-based simulation in the future as well.

      -

      Support functionality with backends

      +

      Support functionality with backends

    diff --git a/search.html b/search.html index 28492ed36..be47864a5 100644 --- a/search.html +++ b/search.html @@ -12,12 +12,12 @@ - - - - - - + + + + + + diff --git a/searchindex.js b/searchindex.js index 2840eeb66..2713b11c8 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["faq", "howto", "index", "installation", "overview", "tutorials", "usage"], "filenames": ["faq.rst", "howto.rst", "index.rst", "installation.rst", "overview.rst", "tutorials.rst", "usage.rst"], "titles": ["Frequently Asked Questions", "How To", "Crazyswarm2: A ROS 2 testbed for Aerial Robot Teams", "Installation", "Overview", "ROS 2 Tutorials", "Usage"], "terms": {"pleas": [0, 4, 5], "start": [0, 4, 5], "discuss": [0, 5], "work": [0, 2, 3, 5, 6], "your": [0, 1, 3, 5, 6], "hardwar": 0, "setup": [0, 4, 5, 6], "advic": 0, "us": [0, 1, 2, 3, 4, 5, 6], "achiev": 0, "goal": [0, 5], "rough": 0, "idea": 0, "new": [0, 5], "featur": [0, 2], "If": [0, 1, 3, 5, 6], "you": [0, 1, 3, 4, 5, 6], "strongli": 0, "believ": 0, "found": [0, 3, 5], "bug": [0, 3, 5], "requir": [0, 1, 3, 5], "chang": [0, 2, 5, 6], "code": [0, 1, 4, 6], "feel": 0, "free": [0, 5], "open": [0, 1, 2, 5], "provid": [0, 1, 4], "much": 0, "detail": 0, "possibl": [0, 3, 6], "reproduc": 0, "problem": 0, "observ": 0, "well": [0, 4], "desir": [0, 4], "outcom": 0, "ar": [0, 2, 3, 4, 5, 6], "sure": [0, 3, 5], "first": [0, 1, 5, 6], "wa": [0, 5], "fork": 0, "howev": [0, 2, 4], "also": [0, 4, 5, 6], "heavi": 0, "re": 0, "design": 0, "core": 0, "choic": 0, "motion": [0, 1, 2, 4, 6], "captur": [0, 1, 2, 4, 6], "integr": 0, "In": [0, 1, 3, 4, 5, 6], "crazyswarm1": [0, 2], "part": [0, 3, 5], "crazyswarm_serv": 0, "due": 0, "limit": [0, 2], "ros1": 0, "pub": 0, "sub": 0, "system": [0, 4, 5, 6], "contrast": 0, "now": [0, 5], "follow": [0, 3, 5, 6], "better": [0, 5], "ro": [0, 1, 3, 4], "style": 0, "where": [0, 5, 6], "our": 0, "abstract": 0, "layer": [0, 4], "custom": [0, 4, 5, 6], "frame": [0, 5], "track": 0, "avail": [0, 1, 2, 5], "separ": [0, 3], "2": [0, 3, 4], "packag": [0, 1, 4, 5, 6], "addit": [0, 3], "support": [0, 2, 3, 5, 6], "other": [0, 5, 6], "local": [0, 3, 5, 6], "method": 0, "lighthous": [0, 4], "board": [0, 1], "onli": [0, 2, 5, 6], "commun": [0, 4], "backend": [0, 1, 3, 5, 6], "we": [0, 4, 5, 6], "reli": 0, "crazyfli": [0, 1, 2, 3], "link": [0, 3, 4], "cpp": [0, 4], "lowest": [0, 4, 6], "unlik": 0, "implement": [0, 1], "thi": [0, 1, 3, 4, 5, 6], "prioriti": [0, 6], "queue": [0, 5], "allow": [0, 3], "like": [0, 5, 6], "upload": [0, 4], "trajectori": [0, 4], "dure": 0, "flight": [0, 4], "moreov": [0, 6], "should": [0, 5, 6], "improv": 0, "overal": 0, "robust": 0, "There": 0, "experiment": [0, 3], "lib": [0, 4], "python": [0, 2, 3, 4, 5], "common": 0, "uav": [0, 2], "task": [0, 2], "oper": [0, 2], "swarm": 0, "did": 0, "includ": [0, 5, 6], "singl": [0, 4], "robot": [0, 5, 6], "teleoper": [0, 2], "replac": [0, 3, 5], "both": [0, 4], "crazyflie_ro": 0, "thu": 0, "arbitrari": 0, "uri": [0, 5, 6], "etc": [0, 6], "simul": [0, 2, 3], "simpl": [0, 5, 6], "visual": [0, 3, 4, 5, 6], "setpoint": [0, 4], "high": [0, 4, 6], "level": [0, 4, 6], "script": [0, 2], "doe": 0, "physic": [0, 4], "base": [0, 2, 4, 6], "altern": 0, "multipl": [0, 4], "option": [0, 3, 6], "aerodynam": 0, "interact": 0, "distribut": 0, "monitor": 0, "plan": [0, 3], "tool": [0, 3], "chooser": 0, "py": [0, 1, 5, 6], "enabl": [0, 1, 5], "disabl": [0, 6], "cf": 0, "check": [0, 3, 4, 5], "batteri": [0, 6], "voltag": 0, "function": 0, "while": [0, 2, 4, 5], "without": [0, 3, 6], "restart": 0, "node": [0, 5, 6], "launch": [0, 1, 6], "control": [0, 4, 5], "sever": [0, 4], "here": [0, 1, 4, 5], "some": [0, 1, 2, 5], "motion_capture_track": [0, 1, 3], "The": [0, 1, 3, 4, 5, 6], "api": [0, 2, 6], "send": [0, 1, 4], "posit": [0, 1, 4, 5, 6], "measur": 0, "know": [0, 1, 5], "mocap": 0, "ident": 0, "marker": [0, 1, 6], "broadcast": [0, 4], "whenev": 0, "fewer": 0, "radio": [0, 5, 6], "per": [0, 6], "offici": 0, "sdk": 0, "unicast": 0, "instead": 0, "ha": [0, 4, 5, 6], "mode": [0, 1, 5, 6], "3d": 0, "graphic": 0, "which": [0, 1, 5, 6], "make": [0, 3, 4, 5], "easi": 0, "valid": 0, "complex": 0, "befor": [0, 3, 6], "run": [0, 1, 3, 4, 5, 6], "them": [0, 5], "real": [0, 2, 5], "firmwar": [0, 1, 3, 4, 6], "bind": [0, 3], "built": 0, "upon": [0, 6], "automat": 0, "gener": [0, 5], "certain": 0, "modul": 0, "when": 0, "develop": [0, 5], "especi": 0, "thei": [0, 3, 6], "mathemat": 0, "hard": 0, "debug": 0, "foundat": 0, "server": [0, 5, 6], "program": [0, 3], "thin": 0, "wrapper": 0, "around": [0, 4, 5], "interfac": [0, 4], "page": [1, 4, 5], "show": [1, 5, 6], "short": 1, "": [1, 5, 6], "advanc": [1, 5], "usag": [1, 2, 4, 5], "case": [1, 4, 6], "can": [1, 3, 4, 5, 6], "pose": [1, 4, 5, 6], "rigid": 1, "bodi": 1, "space": [1, 2], "For": [1, 5], "exampl": [1, 2, 4, 5, 6], "consid": 1, "collis": 1, "avoid": [1, 3, 6], "algorithm": 1, "an": [1, 3, 5, 6], "obstacl": [1, 5], "virtual": [1, 3], "defin": 1, "yaml": [1, 4, 5], "true": [1, 5, 6], "initial_posit": [1, 6], "0": [1, 3, 5, 6], "5": [1, 5, 6], "type": [1, 5, 6], "see": [1, 4, 5, 6], "robot_typ": [1, 6], "id": 1, "255": 1, "just": [1, 5], "connect": [1, 3, 4, 6], "none": 1, "motion_captur": [1, 6], "default_single_mark": [1, 6], "dynam": [1, 6], "default": [1, 4, 5, 6], "result": [1, 5], "via": 1, "tf": [1, 3, 5], "name": [1, 5], "actual": 1, "i": [1, 2, 3, 4, 5, 6], "crash": 1, "e": 1, "g": 1, "segment": 1, "fault": 1, "crazyflie_serv": [1, 5, 6], "c": [1, 4], "find": [1, 5], "stacktrac": 1, "gdb": 1, "compil": 1, "file": [1, 2, 3, 6], "flag": 1, "xterm": 1, "window": [1, 3, 5], "don": [1, 5, 6], "t": [1, 5, 6], "have": [1, 3, 5, 6], "instal": [1, 2, 5, 6], "do": [1, 3, 5, 6], "so": [1, 5], "sudo": [1, 3, 5], "apt": [1, 3, 5], "colcon": [1, 3], "build": [1, 3], "symlink": [1, 3], "cmake": 1, "arg": [1, 6], "dcmake_build_typ": 1, "ros2": [1, 3, 5, 6], "progress": 2, "port": 2, "origin": 2, "crazyswarm": 2, "It": [2, 4, 5, 6], "fulli": [2, 5], "sourc": [2, 4, 5, 6], "github": [2, 3, 5], "primarili": 2, "made": [2, 5], "research": 2, "want": [2, 6], "unman": 2, "vehicl": 2, "bitcraz": [2, 3, 6], "x": [2, 6], "bolt": 2, "alreadi": [2, 5], "usabl": 2, "basic": 2, "fly": [2, 4, 6], "data": [2, 4, 5], "collect": 2, "configur": [2, 3, 4, 5], "format": [2, 5], "might": [2, 3, 6], "still": [2, 5], "mani": 2, "current": [2, 3, 4, 5, 6], "import": 2, "time": [2, 3, 4, 5], "log": [2, 4, 5, 6], "usd": 2, "card": 2, "test": 2, "small": 2, "size": [2, 5], "less": 2, "than": 2, "10": [2, 3, 5, 6], "few": 2, "overview": 2, "tutori": [2, 4], "how": [2, 6], "To": [2, 4, 6], "frequent": 2, "ask": 2, "question": [2, 5], "crazyswarm2": [3, 4, 5], "ubuntu": 3, "linux": 3, "one": [3, 5, 6], "20": [3, 5], "04": 3, "3": [3, 5, 6], "7": [3, 6], "8": [3, 6], "galact": [3, 5], "22": 3, "humbl": [3, 5], "subsystem": 3, "wsl": 3, "ll": [3, 5], "usbipd": 3, "win": 3, "crazyradio": [3, 4], "directli": 3, "w": 3, "bewar": [3, 5], "out": [3, 5], "guid": [3, 5], "machin": 3, "add": [3, 4, 5], "latenc": 3, "caus": 3, "issu": 3, "need": [3, 4, 5], "instruct": [3, 5], "http": [3, 5], "doc": 3, "org": 3, "en": 3, "html": 3, "depend": [3, 4], "libboost": 3, "dev": 3, "libusb": 3, "1": [3, 5, 6], "pip3": 3, "rowan": 3, "cflib": [3, 4, 5, 6], "transforms3d": 3, "get": [3, 5], "distro": [3, 5], "transform": [3, 4, 5], "set": [3, 4, 5, 6], "up": [3, 4, 5, 6], "workspac": [3, 5, 6], "mkdir": 3, "p": [3, 6], "ros2_w": 3, "src": 3, "cd": 3, "git": 3, "clone": 3, "com": [3, 5], "imrclab": [3, 5], "recurs": 3, "branch": 3, "edit": [3, 5], "config": [3, 5, 6], "everi": 3, "softwar": [3, 4, 6], "loop": [3, 4, 6], "manual": [3, 4], "folder": [3, 5], "from": [3, 4, 5, 6], "websit": 3, "afterward": 3, "path": [3, 5], "export": [3, 6], "pythonpath": 3, "older": 3, "version": [3, 5], "tag": 3, "2023": 3, "02": [3, 5], "point": 3, "main": 3, "repo": 3, "remov": [3, 4], "copi": [3, 5], "command": [3, 4, 5, 6], "pull": 3, "submodul": 3, "sync": 3, "init": 3, "explain": [4, 5, 6], "project": 4, "contain": [4, 5, 6], "crazyflie_pi": 4, "librari": 4, "wrap": 4, "servic": [4, 6], "topic": [4, 5, 6], "crazyflie_exampl": [4, 5, 6], "crazyflie_interfac": [4, 6], "all": [4, 5, 6], "msg": 4, "srv": [4, 6], "more": [4, 5], "pa": 4, "dongl": 4, "two": [4, 5], "choos": 4, "until": 4, "paramet": [4, 5, 6], "handl": 4, "low": 4, "aspect": 4, "receiv": 4, "toc": [4, 6], "cf2": [4, 6], "input": 4, "logblock": 4, "stream": 4, "variabl": 4, "takeoff": [4, 6], "land": [4, 5, 6], "goto": 4, "With": [4, 5, 6], "given": 4, "height": [4, 5, 6], "coordin": 4, "take": [4, 5, 6], "off": [4, 5, 6], "go": [4, 5], "predefin": 4, "indic": [4, 6], "emerg": 4, "turn": [4, 5], "motor": 4, "someth": [4, 5], "goe": 4, "wrong": 4, "either": [4, 5], "respond": 4, "each": [4, 6], "individu": [4, 6], "prefix": 4, "sil": 4, "same": [4, 5], "therefor": 4, "user": 4, "rviz": [4, 5], "prepar": 4, "futur": 4, "sim": [4, 6], "ye": 4, "No": 4, "scan": [4, 5], "odom": [4, 5], "n": 4, "cmd_full_stat": 4, "cmd_posit": 4, "cmd_hover": 4, "go_to": 4, "traj": 4, "flow": [4, 5], "deck": [4, 5], "lp": 4, "through": 5, "extern": 5, "teleop_twist_keyboard": 5, "fun": 5, "These": 5, "under": 5, "error": 5, "ani": [5, 6], "bit": 5, "knowledg": 5, "highli": 5, "recommend": 5, "beginn": 5, "telop_twist_keyboard": 5, "togeth": 5, "right": [5, 6], "pid": [5, 6], "And": 5, "teleop": [5, 6], "twist": 5, "Then": 5, "keyboard_velmux_launch": 5, "anoth": [5, 6], "termin": 5, "b": 5, "rest": 5, "telop": 5, "its": 5, "ad": 5, "uncom": 5, "firmware_log": [5, 6], "default_top": [5, 6], "frequenc": [5, 6], "hz": [5, 6], "second": [5, 6], "fix": 5, "world": 5, "plugin": 5, "checkbox": 5, "appear": 5, "estim": [5, 6], "done": 5, "cf1": [5, 6], "odometri": 5, "exist": [5, 6], "multi": 5, "ranger": 5, "creat": 5, "mind": [5, 6], "rai": 5, "match": 5, "spars": 5, "sens": 5, "quit": 5, "challeng": 5, "assum": [5, 6], "accord": 5, "went": 5, "put": 5, "fals": [5, 6], "2m": [5, 6], "e7e7e7e701": 5, "standard": 5, "flowdeck": 5, "state": 5, "kalman": [5, 6], "firmware_param": [5, 6], "stabil": [5, 6], "complementari": [5, 6], "melling": [5, 6], "let": 5, "quick": 5, "multiranger_mapping_launch": 5, "return": 5, "launchdescript": 5, "execut": [5, 6], "output": 5, "screen": 5, "server_param": 5, "vel_mux": 5, "hover_height": 5, "incoming_twist_top": 5, "cmd_vel": 5, "robot_prefix": 5, "odom_fram": 5, "map_fram": 5, "base_fram": 5, "scan_top": 5, "use_scan_match": 5, "max_laser_rang": 5, "resolut": 5, "minimum_travel_dist": 5, "01": 5, "minimum_travel_head": 5, "001": 5, "map_update_interv": 5, "slam_toolbox": 5, "async_slam_toolbox_nod": 5, "explan": 5, "those": 5, "valu": 5, "veloc": 5, "handler": 5, "incom": 5, "messag": 5, "why": 5, "soon": 5, "enough": 5, "third": 5, "note": 5, "gave": 5, "differ": [5, 6], "speed": 5, "decreas": 5, "mention": 5, "warn": 5, "abov": [5, 6], "middl": 5, "room": 5, "would": [5, 6], "mark": 5, "later": 5, "startup": [5, 6], "after": [5, 6], "bash": [5, 6], "cours": 5, "m4": 5, "led": 5, "blink": 5, "green": 5, "red": 5, "info": 5, "below": 5, "home": 5, "knmcguir": 5, "2022": 5, "03": 5, "16": 5, "15": 5, "53": 5, "553693": 5, "kim": 5, "legion": 5, "15498": 5, "verbos": 5, "process": 5, "15500": 5, "15502": 5, "15504": 5, "1664806553": 5, "866149124": 5, "solver": 5, "solver_plugin": 5, "ceressolv": 5, "1664806559": 5, "174521891": 5, "multiplex": 5, "m": 5, "1664806560": 5, "043101845": 5, "044138096": 5, "054259470": 5, "enhighlevel": [5, 6], "105691178": 5, "107138259": 5, "114968490": 5, "initi": [5, 6], "116479518": 5, "freq": 5, "118522365": 5, "123137907": 5, "logg": 5, "329904109": 5, "filter": 5, "drop": 5, "232": 5, "reason": 5, "discard": 5, "becaus": 5, "full": 5, "clip": 5, "rang": 5, "threshold": 5, "within": 5, "minimum": 5, "maximum": 5, "333439709": 5, "laser": 5, "exce": 5, "capabl": 5, "lidar": 5, "regist": 5, "sensor": 5, "describ": 5, "anyth": [5, 6], "been": 5, "correctli": 5, "rviv2": 5, "seper": 5, "opt": 5, "displai": 5, "panel": 5, "button": [5, 6], "tab": 5, "select": 5, "top": 5, "menu": 5, "slamtoolboxplugin": 5, "kei": 5, "tip": 5, "slowli": 5, "yaw": [5, 6], "most": 5, "onc": 5, "happi": 5, "save": 5, "could": 5, "tweak": 5, "previou": 5, "environ": 5, "taken": [5, 6], "were": 5, "posegraph": 5, "pgm": 5, "call": [5, 6], "next": 5, "navigation2": 5, "multiranger_nav3_launch": 5, "world_tf_nam": 5, "map_file_nam": 5, "cf_examples_dir": 5, "map_nam": 5, "map_start_pos": 5, "includelaunchdescript": 5, "pythonlaunchdescriptionsourc": 5, "o": 5, "join": 5, "bringup_launch_dir": 5, "bringup_launch": 5, "launch_argu": 5, "use_sim_tim": [5, 6], "params_fil": 5, "nav2_param": 5, "autostart": 5, "use_composit": 5, "transform_publish_period": 5, "item": 5, "rviz_launch": 5, "rviz_config": 5, "bringup_dir": 5, "nav2_default_view": 5, "obvious": 5, "extra": 5, "ensur": 5, "compatibilti": 5, "rememb": 5, "sinc": 5, "pretti": 5, "big": 5, "what": [5, 6], "alter": 5, "u": 5, "troubl": 5, "everyth": [5, 6], "hand": 5, "multiranger_nav2_launch": 5, "print": 5, "last": 5, "press": 5, "On": 5, "click": 5, "spot": 5, "watch": 5, "place": [5, 6], "try": 5, "along": 5, "video": 5, "As": 5, "notic": 5, "movement": 5, "conserv": 5, "tune": 5, "global": 5, "planner": 5, "inflation_lay": 5, "document": 5, "final": 5, "perform": 5, "multirang": 5, "doabl": 5, "perfect": 5, "absolut": 5, "encourag": 5, "share": [5, 6], "d": 5, "forget": 6, "local_setup": 6, "network": 6, "lab": 6, "classroom": 6, "similar": 6, "particular": 6, "ros_localhost_onli": 6, "relat": 6, "remot": 6, "uniqu": 6, "cfclient": 6, "cf231": 6, "80": 6, "e7e7e7e7e7": 6, "cf21": 6, "cf5": 6, "e7e7e7e705": 6, "between": 6, "platform": 6, "big_quad": 6, "voltage_warn": 6, "v": 6, "voltage_crit": 6, "cf21_mocap_deck": 6, "mocap_deck": 6, "field": 6, "custom_top": 6, "topic_name1": 6, "var": 6, "stateestimatez": 6, "y": 6, "z": 6, "pm": 6, "vbat": 6, "topic_name2": 6, "roll": 6, "pitch": 6, "list": 6, "look": 6, "param": 6, "number": 6, "hello_world": 6, "reboot": 6, "e7e7e7e706": 6, "sysoff": 6, "durat": 6, "sec": 6, "block": 6, "section": 6, "add_log": 6, "addlog": 6, "topic_nam": 6, "topic_test": 6, "stateestim": 6, "rqt": 6, "echo": 6, "close": 6, "again": 6, "remove_log": 6, "removelog": 6, "xbox": 6, "map": 6, "attitud": 6, "assist": 6}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"frequent": 0, "ask": 0, "question": 0, "how": [0, 1], "can": 0, "i": 0, "get": 0, "help": 0, "report": 0, "an": 0, "issu": 0, "do": 0, "crazyswarm2": [0, 2], "crazyswarm": 0, "differ": 0, "from": 0, "bitcraz": 0, "": 0, "cflib": 0, "To": 1, "track": 1, "non": 1, "robot": [1, 2], "object": 1, "debug": 1, "A": 2, "ro": [2, 5, 6], "2": [2, 5, 6], "testb": 2, "aerial": 2, "team": 2, "content": 2, "instal": 3, "first": 3, "updat": 3, "overview": 4, "explan": 4, "per": 4, "node": 4, "crazyfli": [4, 5, 6], "server": 4, "simul": [4, 6], "support": 4, "function": 4, "backend": 4, "tutori": 5, "teleoper": [5, 6], "keyboard": 5, "vizual": 5, "rviz2": 5, "map": 5, "slam": 5, "toolbox": 5, "preper": 5, "connect": 5, "fly": 5, "nav2": 5, "bringup": 5, "look": 5, "launch": 5, "file": 5, "navig": 5, "usag": 6, "configur": 6, "yaml": 6, "physic": 6, "experi": 6, "termin": 6, "enabl": 6, "logblock": 6, "runtim": 6, "control": 6, "python": 6, "script": 6}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Frequently Asked Questions": [[0, "frequently-asked-questions"]], "How can I get help?": [[0, "how-can-i-get-help"]], "How can I report an issue?": [[0, "how-can-i-report-an-issue"]], "How do Crazyswarm2 and Crazyswarm differ?": [[0, "how-do-crazyswarm2-and-crazyswarm-differ"]], "How is Crazyswarm2 different from Bitcraze\u2019s cflib?": [[0, "how-is-crazyswarm2-different-from-bitcraze-s-cflib"]], "How To": [[1, "how-to"]], "Tracking Non-Robotic Objects": [[1, "tracking-non-robotic-objects"]], "Debugging": [[1, "debugging"]], "Crazyswarm2: A ROS 2 testbed for Aerial Robot Teams": [[2, "crazyswarm2-a-ros-2-testbed-for-aerial-robot-teams"]], "Contents": [[2, "contents"]], "Installation": [[3, "installation"]], "First Installation": [[3, "first-installation"]], "Updating": [[3, "updating"]], "Overview": [[4, "overview"]], "Explanation per node": [[4, "explanation-per-node"]], "Crazyflie server": [[4, "crazyflie-server"]], "Simulation": [[4, "simulation"], [6, "simulation"]], "Support functionality with backends": [[4, "support-functionality-with-backends"]], "ROS 2 Tutorials": [[5, "ros-2-tutorials"]], "Teleoperation keyboard": [[5, "teleoperation-keyboard"]], "Vizualization with RVIZ2": [[5, "vizualization-with-rviz2"]], "Mapping with the SLAM toolbox": [[5, "mapping-with-the-slam-toolbox"]], "Preperation": [[5, "preperation"], [5, "id5"]], "Connecting with the Crazyflie": [[5, "connecting-with-the-crazyflie"]], "Flying and mapping": [[5, "flying-and-mapping"]], "Connecting with Nav2 Bringup": [[5, "connecting-with-nav2-bringup"]], "Looking at the Launch file": [[5, "looking-at-the-launch-file"]], "Navigate the Crazyflie": [[5, "navigate-the-crazyflie"]], "Usage": [[6, "usage"]], "Configuration": [[6, "configuration"]], "crazyflies.yaml": [[6, "crazyflies-yaml"]], "Physical Experiments": [[6, "physical-experiments"]], "ROS 2 terminal": [[6, "ros-2-terminal"]], "Enabling Logblocks at runtime": [[6, "enabling-logblocks-at-runtime"]], "Teleoperation controller": [[6, "teleoperation-controller"]], "Python scripts": [[6, "python-scripts"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["faq", "howto", "index", "installation", "overview", "tutorials", "usage"], "filenames": ["faq.rst", "howto.rst", "index.rst", "installation.rst", "overview.rst", "tutorials.rst", "usage.rst"], "titles": ["Frequently Asked Questions", "How To", "Crazyswarm2: A ROS 2 testbed for Aerial Robot Teams", "Installation", "Overview", "ROS 2 Tutorials", "Usage"], "terms": {"pleas": [0, 4, 5], "start": [0, 4, 5], "discuss": [0, 5], "work": [0, 2, 3, 5, 6], "your": [0, 1, 3, 5, 6], "hardwar": 0, "setup": [0, 4, 5, 6], "advic": 0, "us": [0, 1, 2, 3, 4, 5, 6], "achiev": 0, "goal": [0, 5], "rough": 0, "idea": 0, "new": [0, 5], "featur": [0, 2], "If": [0, 1, 3, 5, 6], "you": [0, 1, 3, 4, 5, 6], "strongli": 0, "believ": 0, "found": [0, 3, 5], "bug": [0, 3, 5], "requir": [0, 1, 3, 5], "chang": [0, 2, 5, 6], "code": [0, 1, 4, 6], "feel": 0, "free": [0, 5], "open": [0, 1, 2, 5], "provid": [0, 1, 4], "much": 0, "detail": 0, "possibl": [0, 3, 6], "reproduc": 0, "problem": 0, "observ": 0, "well": [0, 4], "desir": [0, 4], "outcom": 0, "ar": [0, 2, 3, 4, 5, 6], "sure": [0, 3, 5], "first": [0, 1, 5, 6], "wa": [0, 5], "fork": 0, "howev": [0, 2, 4], "also": [0, 4, 5, 6], "heavi": 0, "re": 0, "design": 0, "core": 0, "choic": 0, "motion": [0, 1, 2, 4, 6], "captur": [0, 1, 2, 4, 6], "integr": 0, "In": [0, 1, 3, 4, 5, 6], "crazyswarm1": [0, 2], "part": [0, 3, 5], "crazyswarm_serv": 0, "due": 0, "limit": [0, 2], "ros1": 0, "pub": 0, "sub": 0, "system": [0, 4, 5, 6], "contrast": 0, "now": [0, 5], "follow": [0, 3, 5, 6], "better": [0, 5], "ro": [0, 1, 3, 4], "style": 0, "where": [0, 5, 6], "our": 0, "abstract": 0, "layer": [0, 4], "custom": [0, 4, 5, 6], "frame": [0, 5], "track": 0, "avail": [0, 1, 2, 5], "separ": [0, 3], "2": [0, 3, 4], "packag": [0, 1, 4, 5, 6], "addit": [0, 3], "support": [0, 2, 3, 5, 6], "other": [0, 5, 6], "local": [0, 3, 5, 6], "method": 0, "lighthous": [0, 4], "board": [0, 1], "onli": [0, 2, 5, 6], "commun": [0, 4], "backend": [0, 1, 3, 5, 6], "we": [0, 4, 5, 6], "reli": 0, "crazyfli": [0, 1, 2, 3], "link": [0, 3, 4], "cpp": [0, 4], "lowest": [0, 4, 6], "unlik": 0, "implement": [0, 1], "thi": [0, 1, 3, 4, 5, 6], "prioriti": [0, 6], "queue": [0, 5], "allow": [0, 3], "like": [0, 5, 6], "upload": [0, 4], "trajectori": [0, 4], "dure": 0, "flight": [0, 4], "moreov": [0, 6], "should": [0, 5, 6], "improv": 0, "overal": 0, "robust": 0, "There": 0, "experiment": [0, 3], "lib": [0, 4], "python": [0, 2, 3, 4, 5], "common": 0, "uav": [0, 2], "task": [0, 2], "oper": [0, 2], "swarm": 0, "did": 0, "includ": [0, 5, 6], "singl": [0, 4], "robot": [0, 5, 6], "teleoper": [0, 2], "replac": [0, 3, 5], "both": [0, 4], "crazyflie_ro": 0, "thu": 0, "arbitrari": 0, "uri": [0, 5, 6], "etc": [0, 6], "simul": [0, 2, 3], "simpl": [0, 5, 6], "visual": [0, 3, 4, 5, 6], "setpoint": [0, 4], "high": [0, 4, 6], "level": [0, 4, 6], "script": [0, 2], "doe": 0, "physic": [0, 4], "base": [0, 2, 4, 6], "altern": 0, "multipl": [0, 4], "option": [0, 3, 6], "aerodynam": 0, "interact": 0, "distribut": 0, "monitor": 0, "plan": [0, 3], "tool": [0, 3], "chooser": 0, "py": [0, 1, 5, 6], "enabl": [0, 1, 5], "disabl": [0, 6], "cf": 0, "check": [0, 3, 4, 5], "batteri": [0, 6], "voltag": 0, "function": 0, "while": [0, 2, 4, 5], "without": [0, 3, 6], "restart": 0, "node": [0, 5, 6], "launch": [0, 1, 6], "control": [0, 4, 5], "sever": [0, 4], "here": [0, 1, 4, 5], "some": [0, 1, 2, 5], "motion_capture_track": [0, 1, 3], "The": [0, 1, 3, 4, 5, 6], "api": [0, 2, 6], "send": [0, 1, 4], "posit": [0, 1, 4, 5, 6], "measur": 0, "know": [0, 1, 5], "mocap": 0, "ident": 0, "marker": [0, 1, 6], "broadcast": [0, 4], "whenev": 0, "fewer": 0, "radio": [0, 5, 6], "per": [0, 6], "offici": 0, "sdk": 0, "unicast": 0, "instead": 0, "ha": [0, 4, 5, 6], "mode": [0, 1, 5, 6], "3d": 0, "graphic": 0, "which": [0, 1, 5, 6], "make": [0, 3, 4, 5], "easi": 0, "valid": 0, "complex": 0, "befor": [0, 3, 6], "run": [0, 1, 3, 4, 5, 6], "them": [0, 5], "real": [0, 2, 5], "firmwar": [0, 1, 3, 4, 6], "bind": [0, 3], "built": 0, "upon": [0, 6], "automat": 0, "gener": [0, 5], "certain": 0, "modul": 0, "when": 0, "develop": [0, 5], "especi": 0, "thei": [0, 3, 6], "mathemat": 0, "hard": 0, "debug": 0, "foundat": 0, "server": [0, 5, 6], "program": [0, 3], "thin": 0, "wrapper": 0, "around": [0, 4, 5], "interfac": [0, 4], "page": [1, 4, 5], "show": [1, 5, 6], "short": 1, "": [1, 5, 6], "advanc": [1, 5], "usag": [1, 2, 4, 5], "case": [1, 4, 6], "can": [1, 3, 4, 5, 6], "pose": [1, 4, 5, 6], "rigid": 1, "bodi": 1, "space": [1, 2], "For": [1, 5], "exampl": [1, 2, 4, 5, 6], "consid": 1, "collis": 1, "avoid": [1, 3, 6], "algorithm": 1, "an": [1, 3, 5, 6], "obstacl": [1, 5], "virtual": [1, 3], "defin": 1, "yaml": [1, 4, 5], "true": [1, 5, 6], "initial_posit": [1, 6], "0": [1, 3, 5, 6], "5": [1, 5, 6], "type": [1, 5, 6], "see": [1, 4, 5, 6], "robot_typ": [1, 6], "id": 1, "255": 1, "just": [1, 5], "connect": [1, 3, 4, 6], "none": 1, "motion_captur": [1, 6], "default_single_mark": [1, 6], "dynam": [1, 6], "default": [1, 4, 5, 6], "result": [1, 5], "via": 1, "tf": [1, 3, 5], "name": [1, 5], "actual": 1, "i": [1, 2, 3, 4, 5, 6], "crash": 1, "e": 1, "g": 1, "segment": 1, "fault": 1, "crazyflie_serv": [1, 5, 6], "c": [1, 4], "find": [1, 5], "stacktrac": 1, "gdb": 1, "compil": 1, "file": [1, 2, 3, 6], "flag": 1, "xterm": 1, "window": [1, 3, 5], "don": [1, 5, 6], "t": [1, 5, 6], "have": [1, 3, 5, 6], "instal": [1, 2, 5, 6], "do": [1, 3, 5, 6], "so": [1, 5], "sudo": [1, 3, 5], "apt": [1, 3, 5], "colcon": [1, 3], "build": [1, 3], "symlink": [1, 3], "cmake": 1, "arg": [1, 6], "dcmake_build_typ": 1, "ros2": [1, 3, 5, 6], "progress": 2, "port": 2, "origin": 2, "crazyswarm": 2, "It": [2, 4, 5, 6], "fulli": [2, 5], "sourc": [2, 4, 5, 6], "github": [2, 3, 5], "primarili": 2, "made": [2, 5], "research": 2, "want": [2, 6], "unman": 2, "vehicl": 2, "bitcraz": [2, 3, 6], "x": [2, 6], "bolt": 2, "alreadi": [2, 5], "usabl": 2, "basic": 2, "fly": [2, 4, 6], "data": [2, 4, 5], "collect": 2, "configur": [2, 3, 4, 5], "format": [2, 5], "might": [2, 3, 6], "still": [2, 5], "mani": 2, "current": [2, 3, 4, 5, 6], "import": 2, "time": [2, 3, 4, 5], "log": [2, 4, 5, 6], "usd": 2, "card": 2, "test": 2, "small": 2, "size": [2, 5], "less": 2, "than": 2, "10": [2, 3, 5, 6], "few": 2, "overview": 2, "tutori": [2, 4], "how": [2, 6], "To": [2, 4, 6], "frequent": 2, "ask": 2, "question": [2, 5], "crazyswarm2": [3, 4, 5], "ubuntu": 3, "linux": 3, "one": [3, 5, 6], "20": [3, 5], "04": 3, "3": [3, 5, 6], "7": [3, 6], "8": [3, 6], "galact": [3, 5], "22": 3, "humbl": [3, 5], "subsystem": 3, "wsl": 3, "ll": [3, 5], "usbipd": 3, "win": 3, "crazyradio": [3, 4], "directli": 3, "w": 3, "bewar": [3, 5], "out": [3, 5], "guid": [3, 5], "machin": 3, "add": [3, 4, 5], "latenc": 3, "caus": 3, "issu": 3, "need": [3, 4, 5], "instruct": [3, 5], "http": [3, 5], "doc": 3, "org": 3, "en": 3, "html": 3, "depend": [3, 4], "libboost": 3, "dev": 3, "libusb": 3, "1": [3, 5, 6], "pip3": 3, "rowan": 3, "cflib": [3, 4, 5, 6], "transforms3d": 3, "get": [3, 5], "distro": [3, 5], "transform": [3, 4, 5], "set": [3, 4, 5, 6], "up": [3, 4, 5, 6], "workspac": [3, 5, 6], "mkdir": 3, "p": [3, 6], "ros2_w": 3, "src": 3, "cd": 3, "git": 3, "clone": 3, "com": [3, 5], "imrclab": [3, 5], "recurs": 3, "branch": 3, "edit": [3, 5], "config": [3, 5, 6], "everi": 3, "softwar": [3, 4, 6], "loop": [3, 4, 6], "manual": [3, 4], "folder": [3, 5], "from": [3, 4, 5, 6], "websit": 3, "afterward": 3, "path": [3, 5], "export": [3, 6], "pythonpath": 3, "older": 3, "version": [3, 5], "tag": 3, "2023": 3, "02": [3, 5], "point": 3, "main": 3, "repo": 3, "remov": [3, 4], "copi": [3, 5], "command": [3, 4, 5, 6], "pull": 3, "submodul": 3, "sync": 3, "init": 3, "explain": [4, 5, 6], "project": 4, "contain": [4, 5, 6], "crazyflie_pi": 4, "librari": 4, "wrap": 4, "servic": [4, 6], "topic": [4, 5, 6], "crazyflie_exampl": [4, 5, 6], "crazyflie_interfac": [4, 6], "all": [4, 5, 6], "msg": 4, "srv": [4, 6], "more": [4, 5], "pa": 4, "dongl": 4, "two": [4, 5], "choos": 4, "until": 4, "paramet": [4, 5, 6], "handl": 4, "low": 4, "aspect": 4, "receiv": 4, "toc": [4, 6], "cf2": [4, 6], "input": 4, "logblock": 4, "stream": 4, "variabl": 4, "takeoff": [4, 6], "land": [4, 5, 6], "goto": 4, "With": [4, 5, 6], "given": 4, "height": [4, 5, 6], "coordin": 4, "take": [4, 5, 6], "off": [4, 5, 6], "go": [4, 5], "predefin": 4, "indic": [4, 6], "emerg": 4, "turn": [4, 5], "motor": 4, "someth": [4, 5], "goe": 4, "wrong": 4, "either": [4, 5], "respond": 4, "each": [4, 6], "individu": [4, 6], "prefix": 4, "sil": 4, "same": [4, 5], "therefor": 4, "user": 4, "rviz": [4, 5], "prepar": 4, "futur": 4, "sim": [4, 6], "ye": 4, "No": 4, "scan": [4, 5], "odom": [4, 5], "n": 4, "cmd_full_stat": 4, "cmd_posit": 4, "cmd_hover": 4, "go_to": 4, "traj": 4, "flow": [4, 5], "deck": [4, 5], "lp": 4, "through": 5, "extern": 5, "teleop_twist_keyboard": 5, "fun": 5, "These": 5, "under": 5, "error": 5, "ani": [5, 6], "bit": 5, "knowledg": 5, "highli": 5, "recommend": 5, "beginn": 5, "telop_twist_keyboard": 5, "togeth": 5, "right": [5, 6], "pid": [5, 6], "And": 5, "teleop": [5, 6], "twist": 5, "Then": 5, "keyboard_velmux_launch": 5, "anoth": [5, 6], "termin": 5, "b": 5, "rest": 5, "telop": 5, "its": 5, "ad": 5, "uncom": 5, "firmware_log": [5, 6], "default_top": [5, 6], "frequenc": [5, 6], "hz": [5, 6], "second": [5, 6], "fix": 5, "world": 5, "plugin": 5, "checkbox": 5, "appear": 5, "estim": [5, 6], "done": 5, "cf1": [5, 6], "odometri": 5, "exist": [5, 6], "multi": 5, "ranger": 5, "creat": 5, "mind": [5, 6], "rai": 5, "match": 5, "spars": 5, "sens": 5, "quit": 5, "challeng": 5, "assum": [5, 6], "accord": 5, "went": 5, "put": 5, "fals": [5, 6], "2m": [5, 6], "e7e7e7e701": 5, "standard": 5, "flowdeck": 5, "state": 5, "kalman": [5, 6], "firmware_param": [5, 6], "stabil": [5, 6], "complementari": [5, 6], "melling": [5, 6], "let": 5, "quick": 5, "multiranger_mapping_launch": 5, "return": 5, "launchdescript": 5, "execut": [5, 6], "output": 5, "screen": 5, "server_param": 5, "vel_mux": 5, "hover_height": 5, "incoming_twist_top": 5, "cmd_vel": 5, "robot_prefix": 5, "odom_fram": 5, "map_fram": 5, "base_fram": 5, "scan_top": 5, "use_scan_match": 5, "max_laser_rang": 5, "resolut": 5, "minimum_travel_dist": 5, "01": 5, "minimum_travel_head": 5, "001": 5, "map_update_interv": 5, "slam_toolbox": 5, "async_slam_toolbox_nod": 5, "explan": 5, "those": 5, "valu": 5, "veloc": 5, "handler": 5, "incom": 5, "messag": 5, "why": 5, "soon": 5, "enough": 5, "third": 5, "note": 5, "gave": 5, "differ": [5, 6], "speed": 5, "decreas": 5, "mention": 5, "warn": 5, "abov": [5, 6], "middl": 5, "room": 5, "would": [5, 6], "mark": 5, "later": 5, "startup": [5, 6], "after": [5, 6], "bash": [5, 6], "cours": 5, "m4": 5, "led": 5, "blink": 5, "green": 5, "red": 5, "info": 5, "below": 5, "home": 5, "knmcguir": 5, "2022": 5, "03": 5, "16": 5, "15": 5, "53": 5, "553693": 5, "kim": 5, "legion": 5, "15498": 5, "verbos": 5, "process": 5, "15500": 5, "15502": 5, "15504": 5, "1664806553": 5, "866149124": 5, "solver": 5, "solver_plugin": 5, "ceressolv": 5, "1664806559": 5, "174521891": 5, "multiplex": 5, "m": 5, "1664806560": 5, "043101845": 5, "044138096": 5, "054259470": 5, "enhighlevel": [5, 6], "105691178": 5, "107138259": 5, "114968490": 5, "initi": [5, 6], "116479518": 5, "freq": 5, "118522365": 5, "123137907": 5, "logg": 5, "329904109": 5, "filter": 5, "drop": 5, "232": 5, "reason": 5, "discard": 5, "becaus": 5, "full": 5, "clip": 5, "rang": 5, "threshold": 5, "within": 5, "minimum": 5, "maximum": 5, "333439709": 5, "laser": 5, "exce": 5, "capabl": 5, "lidar": 5, "regist": 5, "sensor": 5, "describ": 5, "anyth": [5, 6], "been": 5, "correctli": 5, "rviv2": 5, "seper": 5, "opt": 5, "displai": 5, "panel": 5, "button": [5, 6], "tab": 5, "select": 5, "top": 5, "menu": 5, "slamtoolboxplugin": 5, "kei": 5, "tip": 5, "slowli": 5, "yaw": [5, 6], "most": 5, "onc": 5, "happi": 5, "save": 5, "could": 5, "tweak": 5, "previou": 5, "environ": 5, "taken": [5, 6], "were": 5, "posegraph": 5, "pgm": 5, "call": [5, 6], "next": 5, "navigation2": 5, "multiranger_nav3_launch": 5, "world_tf_nam": 5, "map_file_nam": 5, "cf_examples_dir": 5, "map_nam": 5, "map_start_pos": 5, "includelaunchdescript": 5, "pythonlaunchdescriptionsourc": 5, "o": 5, "join": 5, "bringup_launch_dir": 5, "bringup_launch": 5, "launch_argu": 5, "use_sim_tim": [5, 6], "params_fil": 5, "nav2_param": 5, "autostart": 5, "use_composit": 5, "transform_publish_period": 5, "item": 5, "rviz_launch": 5, "rviz_config": 5, "bringup_dir": 5, "nav2_default_view": 5, "obvious": 5, "extra": 5, "ensur": 5, "compatibilti": 5, "rememb": 5, "sinc": 5, "pretti": 5, "big": 5, "what": [5, 6], "alter": 5, "u": 5, "troubl": 5, "everyth": [5, 6], "hand": 5, "multiranger_nav2_launch": 5, "print": 5, "last": 5, "press": 5, "On": 5, "click": 5, "spot": 5, "watch": 5, "place": [5, 6], "try": 5, "along": 5, "video": 5, "As": 5, "notic": 5, "movement": 5, "conserv": 5, "tune": 5, "global": 5, "planner": 5, "inflation_lay": 5, "document": 5, "final": 5, "perform": 5, "multirang": 5, "doabl": 5, "perfect": 5, "absolut": 5, "encourag": 5, "share": [5, 6], "d": 5, "forget": 6, "local_setup": 6, "network": 6, "lab": 6, "classroom": 6, "similar": 6, "particular": 6, "ros_localhost_onli": 6, "relat": 6, "remot": 6, "uniqu": 6, "cfclient": 6, "cf231": 6, "80": 6, "e7e7e7e7e7": 6, "cf21": 6, "cf5": 6, "e7e7e7e705": 6, "between": 6, "platform": 6, "big_quad": 6, "voltage_warn": 6, "v": 6, "voltage_crit": 6, "cf21_mocap_deck": 6, "mocap_deck": 6, "field": 6, "custom_top": 6, "topic_name1": 6, "var": 6, "stateestimatez": 6, "y": 6, "z": 6, "pm": 6, "vbat": 6, "topic_name2": 6, "roll": 6, "pitch": 6, "list": 6, "look": 6, "param": 6, "number": 6, "hello_world": 6, "reboot": 6, "e7e7e7e706": 6, "sysoff": 6, "durat": 6, "sec": 6, "block": 6, "section": 6, "add_log": 6, "addlog": 6, "topic_nam": 6, "topic_test": 6, "stateestim": 6, "rqt": 6, "echo": 6, "close": 6, "again": 6, "remove_log": 6, "removelog": 6, "xbox": 6, "map": 6, "attitud": 6, "assist": 6}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"frequent": 0, "ask": 0, "question": 0, "how": [0, 1], "can": 0, "i": 0, "get": 0, "help": 0, "report": 0, "an": 0, "issu": 0, "do": 0, "crazyswarm2": [0, 2], "crazyswarm": 0, "differ": 0, "from": 0, "bitcraz": 0, "": 0, "cflib": 0, "To": 1, "track": 1, "non": 1, "robot": [1, 2], "object": 1, "debug": 1, "A": 2, "ro": [2, 5, 6], "2": [2, 5, 6], "testb": 2, "aerial": 2, "team": 2, "content": 2, "instal": 3, "first": 3, "updat": 3, "overview": 4, "explan": 4, "per": 4, "node": 4, "crazyfli": [4, 5, 6], "server": 4, "simul": [4, 6], "support": 4, "function": 4, "backend": 4, "tutori": 5, "teleoper": [5, 6], "keyboard": 5, "vizual": 5, "rviz2": 5, "map": 5, "slam": 5, "toolbox": 5, "preper": 5, "connect": 5, "fly": 5, "nav2": 5, "bringup": 5, "look": 5, "launch": 5, "file": 5, "navig": 5, "usag": 6, "configur": 6, "yaml": 6, "physic": 6, "experi": 6, "termin": 6, "enabl": 6, "logblock": 6, "runtim": 6, "control": 6, "python": 6, "script": 6}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Frequently Asked Questions": [[0, "frequently-asked-questions"]], "How can I get help?": [[0, "how-can-i-get-help"]], "How can I report an issue?": [[0, "how-can-i-report-an-issue"]], "How do Crazyswarm2 and Crazyswarm differ?": [[0, "how-do-crazyswarm2-and-crazyswarm-differ"]], "How is Crazyswarm2 different from Bitcraze\u2019s cflib?": [[0, "how-is-crazyswarm2-different-from-bitcraze-s-cflib"]], "How To": [[1, "how-to"]], "Tracking Non-Robotic Objects": [[1, "tracking-non-robotic-objects"]], "Debugging": [[1, "debugging"]], "Crazyswarm2: A ROS 2 testbed for Aerial Robot Teams": [[2, "crazyswarm2-a-ros-2-testbed-for-aerial-robot-teams"]], "Contents": [[2, "contents"]], "Installation": [[3, "installation"]], "First Installation": [[3, "first-installation"]], "Updating": [[3, "updating"]], "Overview": [[4, "overview"]], "Explanation per node": [[4, "explanation-per-node"]], "Crazyflie server": [[4, "crazyflie-server"]], "Simulation": [[4, "simulation"], [6, "simulation"]], "Support functionality with backends": [[4, "support-functionality-with-backends"]], "ROS 2 Tutorials": [[5, "ros-2-tutorials"]], "Teleoperation keyboard": [[5, "teleoperation-keyboard"]], "Vizualization with RVIZ2": [[5, "vizualization-with-rviz2"]], "Mapping with the SLAM toolbox": [[5, "mapping-with-the-slam-toolbox"]], "Preperation": [[5, "preperation"], [5, "id5"]], "Connecting with the Crazyflie": [[5, "connecting-with-the-crazyflie"]], "Flying and mapping": [[5, "flying-and-mapping"]], "Connecting with Nav2 Bringup": [[5, "connecting-with-nav2-bringup"]], "Looking at the Launch file": [[5, "looking-at-the-launch-file"]], "Navigate the Crazyflie": [[5, "navigate-the-crazyflie"]], "Usage": [[6, "usage"]], "Configuration": [[6, "configuration"]], "crazyflies.yaml": [[6, "crazyflies-yaml"]], "Physical Experiments": [[6, "physical-experiments"]], "ROS 2 terminal": [[6, "ros-2-terminal"]], "Enabling Logblocks at runtime": [[6, "enabling-logblocks-at-runtime"]], "Teleoperation controller": [[6, "teleoperation-controller"]], "Python scripts": [[6, "python-scripts"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/tutorials.html b/tutorials.html index 460120399..7e224189c 100644 --- a/tutorials.html +++ b/tutorials.html @@ -12,11 +12,11 @@ - - - - - + + + + + @@ -96,14 +96,14 @@
    -

    ROS 2 Tutorials

    +

    ROS 2 Tutorials

    This page shows tutorials which connects the Crazyflie through Crazyswarm2 to with external packages like RVIZ2, teleop_twist_keyboard, SLAM toolbox and NAV2 bringup. Have fun!

    Warning

    These tutorials are for advanced use and still under development. Beware of errors and bugs and be sure to use https://github.com/IMRCLab/crazyswarm2/discussions for any support questions. Also this requires a bit of knowledge for ROS 2 so we highly recommend following their beginner tutorials.

    -

    Teleoperation keyboard

    +

    Teleoperation keyboard

    We have an example of the telop_twist_keyboard package working together with the crazyflie

    First, make sure that the crazyflies.yaml has the right URI and if you are using the Flow deck or any other position system available to the crazyflie. set the controller to 1 (PID)

    @@ -122,7 +122,7 @@

    Teleoperation keyboardUse ‘t’ to take off, and ‘b’ to land. For the rest, use the instructions of the telop package.

    -

    Vizualization with RVIZ2

    +

    Vizualization with RVIZ2

    Make sure your crazyflie knows its position, either by a flow deck or any other position system available to the crazyflie.

    In crazyflie.yaml, make sure that this following is added or uncommented

    all:
    @@ -155,7 +155,7 @@ 

    Vizualization with RVIZ2

    -

    Mapping with the SLAM toolbox

    +

    Mapping with the SLAM toolbox

    You can connect the Crazyflie through ROS 2 with existing packages like the SLAM toolbox. With a Flow deck and Multi-ranger ) a simple map can be created.

    @@ -164,7 +164,7 @@

    Mapping with the SLAM toolbox -

    Preperation

    +

    Preperation

    Assuming you have installed ROS 2 and Crazyswarm2 according to the instructions and went through the guides on Usage, now install the slam toolbox:

    sudo apt-get install ros-galactic-slam-toolbox
     
    @@ -194,7 +194,7 @@

    Preperation -

    Connecting with the Crazyflie

    +

    Connecting with the Crazyflie

    Let’s first look at the launch file real quick (multiranger_mapping_launch.py):

    return LaunchDescription([
         Node(
    @@ -285,7 +285,7 @@ 

    Connecting with the Crazyflie

    -

    Flying and mapping

    +

    Flying and mapping

    While still connected to the crazyflie with the server, open another terminal and type:

    source /opt/ros/galactic/setup.bash
     ros2 run teleop_twist_keyboard teleop_twist_keyboard
    @@ -303,10 +303,10 @@ 

    Flying and mapping -

    Connecting with Nav2 Bringup

    +

    Connecting with Nav2 Bringup

    With the previous tutorial you made a map of the environment, so now it is time to use it for navigation!

    -

    Preperation

    +

    Preperation

    Note

    This tutorial assume you have taken the above mapping tutorial first.

    @@ -319,7 +319,7 @@

    Preperation -

    Looking at the Launch file

    +

    Looking at the Launch file

    Let’s take a look at the launch file (multiranger_nav3_launch.py):

    return LaunchDescription([
         Node(
    @@ -390,7 +390,7 @@ 

    Looking at the Launch file -

    Navigate the Crazyflie

    +

    Navigate the Crazyflie

    In a terminal run the following from the ROS 2 workspace.

    source install/setup.bash
     ros2 launch crazyflie_examples multiranger_nav2_launch.py
    diff --git a/usage.html b/usage.html
    index 76c0c6819..8c1006890 100644
    --- a/usage.html
    +++ b/usage.html
    @@ -12,11 +12,11 @@
         
       
       
    -        
    -        
    -        
    -        
    -        
    +        
    +        
    +        
    +        
    +        
         
         
         
    @@ -94,7 +94,7 @@
                
    -

    Usage

    +

    Usage

    Warning

    Do not forget to source your ROS 2 workspace in each terminal you would like to use it

    @@ -112,7 +112,7 @@
    -

    Configuration

    +

    Configuration

    All configuration files are in crazyflie/config.

    • crazyflies.yaml : setting up everything related to the robots.

    • @@ -121,7 +121,7 @@

      Configuration -

      crazyflies.yaml

      +

      crazyflies.yaml

      Each crazyflie should have an unique URI which can be changed in Bitcraze’s CFclient. They can also be enabled in case you don’t want the server to connect with it.

      robots:
      @@ -193,7 +193,7 @@ 

      crazyflies.yaml -

      Simulation

      +

      Simulation

      Any usage of the ROS API, including high-level Python scripts, can be visualized before execution. The initial position and number of robots is taken from the crazyflies.yaml configuration file. The simulation uses the firmware code as software-in-the-loop, and can optionally include the robot dynamics. The configuration of the simulation (physics simulator, controller, etc.) can be changed in server.yaml.

      @@ -204,9 +204,9 @@

      Simulation -

      Physical Experiments

      +

      Physical Experiments

      -

      ROS 2 terminal

      +

      ROS 2 terminal

      The following shows a simple take off and land example without any launch files or yaml files

      ros2 run crazyflie reboot --uri radio://0/80/2M/E7E7E7E706 --mode sysoff
       ros2 param set crazyflie_server cf1.params.commander.enHighLevel 1
      @@ -217,7 +217,7 @@ 

      ROS 2 terminal -

      Enabling Logblocks at runtime

      +

      Enabling Logblocks at runtime

      Warning

      Runtime logblock enabling is currently only supported in the CFLIB backend of the server.

      @@ -241,14 +241,14 @@

      Enabling Logblocks at runtime -

      Teleoperation controller

      +

      Teleoperation controller

      We currently assume an XBox controller (the button mapping can be changed in teleop.yaml). It is possible to fly in different modes, including attitude-control and position-control (in which case any localization system can assist.)

      ros2 launch crazyflie launch.py
       
      -

      Python scripts

      +

      Python scripts

      In the first terminal, launch

      ros2 launch crazyflie launch.py
       

    Functionality