buzz_argos

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
buzz_argos [2018/03/18 23:24] – [Debugging Buzz Programs] rootbuzz_argos [2018/03/18 23:34] (current) – [Debugging Buzz Programs] root
Line 1: Line 1:
 +===== ARGoS + Buzz quick start =====
  
 +==== Installing ARGoS ====
 +
 +[[http://www.argos-sim.info|ARGoS]] is a fast multi-robot simulator that can interoperate with Buzz.
 +
 +To install ARGoS, go to http://www.argos-sim.info/core.php and install a binary package. To get started with ARGoS, refer to the [[https://github.com/ilpincy/argos3-examples|examples]].
 +
 +==== Installing Buzz ====
 +
 +Compile and install Buzz following the instructions reported in the [[https://github.com/MISTLab/Buzz|GitHub page]]. Make sure to compile Buzz **after** having installed ARGoS, so the compilation scripts will also compile the ARGoS integration code.
 +
 +==== Library Configuration ====
 +
 +The Buzz integration library for ARGoS is composed of two elements:
 +
 +  - A set of ARGoS controllers. At the moment, available controllers include one for the [[http://www.swarmanoid.org/swarmanoid_hardware.php.html|foot-bot]], one for the Khepera IV robot (both wheeled robots), and one for the [[http://pleiades.ca|Spiri]] (a commercial quad-rotor). More can be added easily by subclassing ''CBuzzController'', defined in ''$PREFIX/include/buzz/argos/buzz_controller.h''. ''$PREFIX'' depends on your system and is usually ''/usr'' or ''/usr/local''.
 +
 +  - A special definition of ARGoS' QtOpenGL user functions, which allow Buzz scripts to draw in the OpenGL visualization of ARGoS.
 +
 +To have ARGoS find the Buzz integration library in case you installed it in a non-default location, set the environment variable ''ARGOS%%_%%PLUGIN%%_%%PATH''. This variable is a '':''-separated list of directories in which ARGoS looks for libraries before launching an experiment. For instance:
 +
 +<code bash>
 +$ export ARGOS_PLUGIN_PATH=/opt/lib/buzz
 +</code>
 +
 +If you installed Buzz without specifying a custom installation prefix (e.g., using only ''cmake -DCMAKE%%_%%BUILD%%_%%TYPE=Release ../src; make; make install''), you don't need to set ''ARGOS%%_%%PLUGIN%%_%%PATH''.
 +
 +==== Defining an ARGoS experiment file ====
 +
 +To use ARGoS and Buzz together, define your ''.argos'' experiment file as usual.
 +
 +However, instead of a custom controller, in the ''<controllers>'' section use ''<buzz_controller_footbot>'' or ''<buzz_controller_spiri>'' (or both!), depending on the robots you intend to use. For example, if you want to use both controllers, write something similar to this:
 +
 +<code xml>
 +<!-- 
 +     For a full example of an ARGoS configuration file, refer to
 +
 +     https://github.com/ilpincy/argos3-examples/blob/master/experiments/diffusion_1.argos
 +     
 +     and the other examples at
 +     
 +     https://github.com/ilpincy/argos3-examples/blob/master/experiments/
 +-->
 +
 +...
 +
 +<controllers>
 +
 +  <!-- Include this if you're using foot-bots -->
 +  <buzz_controller_footbot id="bcf">
 +    <actuators>
 +      <differential_steering implementation="default" />
 +      <leds                  implementation="default" medium="leds" />
 +      <range_and_bearing implementation="default" />
 +    </actuators>
 +    <sensors>
 +      <range_and_bearing implementation="medium" medium="rab" show_rays="true" noise_std_dev="0" />
 +    </sensors>
 +    <params />
 +  </buzz_controller_footbot>
 +
 +  <!-- Include this if you're using Khepera IV -->
 +  <buzz_controller_kheperaiv id="bckiv">
 +    <actuators>
 +      <differential_steering implementation="default" />
 +      <leds                  implementation="default" medium="leds" />
 +      <range_and_bearing implementation="default" />
 +    </actuators>
 +    <sensors>
 +      <range_and_bearing implementation="medium" medium="rab" show_rays="true" noise_std_dev="0" />
 +    </sensors>
 +    <params />
 +  </buzz_controller_kheperaiv>
 +
 +  <!-- Include this if you're using Spiri -->
 +  <buzz_controller_spiri id="bcs">
 +    <actuators>
 +      <quadrotor_position implementation="default" />
 +      <range_and_bearing  implementation="default" />
 +    </actuators>
 +    <sensors>
 +      <range_and_bearing implementation="medium" medium="rab" show_rays="false" />
 +      <positioning       implementation="default" />
 +    </sensors>
 +    <params />
 +  </buzz_controller_spiri>
 +
 +</controllers>
 +
 +...
 +
 +<arena ...>
 +
 +   <!-- Place a foot-bot in the arena -->
 +   <foot-bot id="fb0" rab_data_size="100">
 +      ...
 +      <controller config="bcf" />
 +   </foot-bot>
 +
 +   <!-- Place a Khepera IV in the arena -->
 +   <kheperaiv id="fb0" rab_data_size="100">
 +      ...
 +      <controller config="bcf" />
 +   </kheperaiv>
 +
 +   <!-- Place a Spiri in the arena -->
 +   <spiri id="fb0" rab_data_size="100">
 +      ...
 +      <controller config="bcs" />
 +   </spiri>
 +</arena>
 +
 +...
 +
 +</code>
 +
 +Always make sure the parameters ''arena/<robot>/rab%%_%%data%%_%%size'' are set to relatively large values, such as 100 bytes as reported in the above examples.
 +
 +If you want ARGoS to start with a Buzz script already loaded, you can specify that in the ''<params />'' tag of the robot controller. The above example for the foot-bot, for example, becomes:
 +
 +<code xml>
 +  ...
 +
 +  <buzz_controller_footbot id="bcf">
 +    <actuators>
 +      <differential_steering implementation="default" />
 +      <leds                  implementation="default" medium="leds" />
 +      <range_and_bearing implementation="default" />
 +    </actuators>
 +    <sensors>
 +      <range_and_bearing implementation="medium" medium="rab" show_rays="true" noise_std_dev="0" />
 +    </sensors>
 +    
 +    <!-- This loads the specified files at startup -->
 +    <params bytecode_file="myscript.bo" debug_file="myscript.bdb" />
 +    
 +  </buzz_controller_footbot>
 +  
 +  ...
 +  
 +</code>
 +
 +To activate the Buzz editor and support debugging, use ''buzz_qt'' to indicate that you want to use the Buzz QtOpenGL user functions:
 +
 +<code xml>
 +<!-- For a full example of an ARGoS configuration file, refer to
 +     https://github.com/ilpincy/argos3-examples/blob/master/experiments/diffusion_1.argos
 +-->
 +
 +<visualization>
 +  <qt-opengl>
 +    <user_functions label="buzz_qt" />
 +  </qt-opengl>
 +</visualization>
 +</code>
 +
 +You can launch ARGoS as usual, with the command:
 +
 +<code bash>
 +$ argos3 -c myexperiment.argos
 +</code>
 +
 +==== Debugging Buzz Programs ====
 +
 +=== Inspecting a Robot's State ===
 +
 +To understand what's happening on a specific robot, shift-click on it in the ARGoS visualization to select it. This opens a tree widget in the Buzz editor that reports the value of all the variables, and the list of available functions on the robot.
 +
 +=== Debugging Information ===
 +
 +The Buzz integration library offers a data structure, called ''debug'', that allows the developer to perform several operations.
 +
 +== Writing Text on Top of a Robot ==
 +
 +  * ''debug.print(message)''
 +    * prints a message on top of the robot, after the robot id
 +    * ''message'' can be a combination of text and variables, such as ''"x = ", x, " cm"''
 +
 +== Drawing the Trajectory of a Robot ==
 +
 +  * ''debug.trajectory.enable(maxpoints,r,g,b)''
 +    * enable trajectory tracking setting how many points should be stored and the drawing color
 +    * ''(r,g,b)'' is the drawing color of the trajectory (0-255 for each value)
 +  * ''debug.trajectory.enable(maxpoints)''
 +    * enable trajectory tracking setting how many points should be stored
 +  * ''debug.trajectory.enable(r,g,b)''
 +    * enable trajectory tracking keeping maxpoints' last value and setting the drawing color
 +    * ''(r,g,b)'' is the drawing color of the trajectory (0-255 for each value)
 +  * ''debug.trajectory.enable()''
 +    * enable trajectory tracking keeping maxpoints' last value (default is 30)
 +  * ''debug.trajectory.disable()''
 +    * disable trajectory tracking
 +  * ''debug.trajectory.clear()''
 +    * delete all the trajectory points
 +
 +== Drawing Vectors ==
 +
 +  * ''debug.rays.add(r,g,b, x,y,z)''
 +    * draw a ray from the reference point of the robot to ''(x,y,z)''.
 +    * ''(x,y,z)'' is expressed wrt the robot reference frame
 +    * ''(r,g,b)'' is the color of the vector (0-255 for each value)
 +  * ''debug.rays.add(r,g,b, x0,y0,z0, x1,y1,z1)''
 +    * draw a ray from ''(x0,y0,z0)'' to ''(x1,y1,z1)''
 +    * ''(x0,y0,z0)'' and ''(x1,y1,z1)'' are expressed wrt the robot reference frame
 +    * ''(r,g,b)'' is the color of the vector (0-255 for each value)
 +  * ''debug.rays.clear()''
 +    * delete all the rays