Robobot new behaviour plan: Difference between revisions

From Rsewiki
(Created page with "Back to Robobot Back to Robobot software description == Create a new behaviour plan == The easy way is to copy an existing plan, e.g.: $ cd ~/svn/robo...")
 
No edit summary
 
(10 intermediate revisions by the same user not shown)
Line 4: Line 4:


== Create a new behaviour plan ==
== Create a new behaviour plan ==
==== Copy from existing plan ====


The easy way is to copy an existing plan, e.g.:
The easy way is to copy an existing plan, e.g.:
Line 13: Line 15:
Then add the new plan to the repository (if a repository is used)
Then add the new plan to the repository (if a repository is used)


(hertil)
==== Rename ====
 
Several variables and types need to be renamed.
 
===== Header file =====
 
* Search and replace 'BPlan20' with 'BPlan100'  (three places)
* Rename 'plan20' (last line) to 'plan100'
 
The bplan100.h should be changed to look like this:
class BPlan100
{
public:
    ~BPlan100();
  void setup();
  void run();
  ...
};
extern BPlan100 plan100;
 
===== Cpp file =====
 
* Change the includefile "bplan20.h" to "bplan100.h"
* Rename 'BPlan20' to 'BPlan100'
* Change all "plan20" to "plan100" to name the new class, make a new section in the configuration file, and change the name of the logfile.
* Change all "Plan20" to "Plan100" - used in comments and debug print.
 
Parts of the new file could look like this:
 
...
#include "bplan100.h"
// create class object
BPlan100 plan100;
void BPlan100::setup()
{ // ensure there is default values in ini-file
  if (not ini["plan100"].has("log"))
  { // no data yet, so generate some default values
    ini["plan100"]["log"] = "true";
    ini["plan100"]["run"] = "false";
...
 
==== Main.cpp ====
 
Include the new plan in the main.cpp function
 
The main.cpp gives the execution order, so include the definition and add this new plan to the right place, like:
 
$ cd ~/svn/robobot/raubase/src
$ nano main.cpp
...
#include "bplan21.h"
#include "bplan40.h"
'''#include "bplan100.h"'''
int main (int argc, char **argv)
{ // prepare all modules and start data flow
  bool setupOK = service.setup(argc, argv);
  if (setupOK)
  { // turn on LED on port 16
    gpio.setPin(16, 1);
    // run the planned missions
    '''plan100.run();'''
    plan20.run();
    plan21.run();
    plan40.run();
    //
    mixer.setVelocity(0.0);
    ...
 
==== Change the plan ====
 
Change the BPlan100::run() function as appropriate
 
...
void BPlan100::run()
{
  if (not setupDone)
    setup();
  if (ini["plan100"]["run"] == "false")
    return;
  //
  UTime t("now");
  bool finished = false;
  bool lost = false;
  state = 10;
  oldstate = state;
  //
  toLog("Plan100 started");
  //
  while (not finished and not lost and not service.stop)
  {
    switch (state)
    { // next challenge
      case 10:
        toLog("Reset pose");
...
 
==== Add to CMakeLists.txt ====
 
Add the new cpp file to the CMakeLists.txt to the list of files, like
 
$ cd ~/svn/robobot/raubase
$ nano CMakeLists.txt
...
add_executable(raubase
      src/bplan20.cpp
      src/bplan21.cpp
      src/bplan40.cpp
      '''src/bplan100.cpp'''
      src/cedge.cpp
      src/cheading.cpp
...
 
 
==== Compile ====
 
Then, compile and test.
 
$ cd ~/svn/robobot/raubase/build
$ make
[  3%] Building CXX object CMakeFiles/raubase.dir/src/bplan100.cpp.o
[  7%] Building CXX object CMakeFiles/raubase.dir/src/main.cpp.o
[ 11%] Linking CXX executable raubase
[100%] Built target raubase

Latest revision as of 09:58, 20 January 2024

Back to Robobot

Back to Robobot software description

Create a new behaviour plan

Copy from existing plan

The easy way is to copy an existing plan, e.g.:

$ cd ~/svn/robobot/raubase/src
$ cp bplan20.cpp bplan100.cpp
$ cp bplan20.h bplan100.h

Then add the new plan to the repository (if a repository is used)

Rename

Several variables and types need to be renamed.

Header file
  • Search and replace 'BPlan20' with 'BPlan100' (three places)
  • Rename 'plan20' (last line) to 'plan100'

The bplan100.h should be changed to look like this:

class BPlan100
{
public:
    ~BPlan100();
  void setup();
  void run();
  ...
};
extern BPlan100 plan100;
Cpp file
  • Change the includefile "bplan20.h" to "bplan100.h"
  • Rename 'BPlan20' to 'BPlan100'
  • Change all "plan20" to "plan100" to name the new class, make a new section in the configuration file, and change the name of the logfile.
  • Change all "Plan20" to "Plan100" - used in comments and debug print.

Parts of the new file could look like this:

...
#include "bplan100.h"

// create class object
BPlan100 plan100;

void BPlan100::setup()
{ // ensure there is default values in ini-file
 if (not ini["plan100"].has("log"))
 { // no data yet, so generate some default values
   ini["plan100"]["log"] = "true";
   ini["plan100"]["run"] = "false";
...

Main.cpp

Include the new plan in the main.cpp function

The main.cpp gives the execution order, so include the definition and add this new plan to the right place, like:

$ cd ~/svn/robobot/raubase/src
$ nano main.cpp
...
#include "bplan21.h"
#include "bplan40.h"
#include "bplan100.h"

int main (int argc, char **argv)
{ // prepare all modules and start data flow
  bool setupOK = service.setup(argc, argv);
  if (setupOK)
  { // turn on LED on port 16
    gpio.setPin(16, 1);
    // run the planned missions
    plan100.run();
    plan20.run();
    plan21.run();
    plan40.run();
    //
    mixer.setVelocity(0.0);
    ...

Change the plan

Change the BPlan100::run() function as appropriate

...
void BPlan100::run()
{
 if (not setupDone)
   setup();
 if (ini["plan100"]["run"] == "false")
   return;
 //
 UTime t("now");
 bool finished = false;
 bool lost = false;
 state = 10;
 oldstate = state;
 //
 toLog("Plan100 started");
 //
 while (not finished and not lost and not service.stop)
 {
   switch (state)
   { // next challenge
     case 10:
       toLog("Reset pose");
...

Add to CMakeLists.txt

Add the new cpp file to the CMakeLists.txt to the list of files, like

$ cd ~/svn/robobot/raubase
$ nano CMakeLists.txt
...
add_executable(raubase
     src/bplan20.cpp
     src/bplan21.cpp
     src/bplan40.cpp
     src/bplan100.cpp
     src/cedge.cpp
     src/cheading.cpp
...


Compile

Then, compile and test.

$ cd ~/svn/robobot/raubase/build
$ make
[  3%] Building CXX object CMakeFiles/raubase.dir/src/bplan100.cpp.o
[  7%] Building CXX object CMakeFiles/raubase.dir/src/main.cpp.o
[ 11%] Linking CXX executable raubase
[100%] Built target raubase