anyKode Marilou
ContentsIndexHome
PreviousUpNext
Class Creator

Class Creator tool: generates automatically class code for a given robot.

The Class Creator Tool generates a class that contains the code required for dialing with the robot: devices enumeration, names, groups. The class is generated in one or more files using the specified language. The code is specific to the chosen robot.

 
PHX startup point: is the robot's first simulation node (see the example).

Language: class code language.

Class location: class's files destination directory.

Class Name: is the class and the class's file name.

Create devices groups: allow to create (or not) devices's associated groups (fast read/write). 

In a MODA application, a class that inherits from RobotPHX must be created using the Connection::QueryRobotPHX2<[your classs]>(PHXName) function.

MyRobot.h class code ( the .cpp file is generated too but not shown here) : this class was generated for the robot /phx2 of the world located in samples/scenes/testworld:

/////////////////////////////////////////////////////////
//File generated by anyKode-Marilou class Creator v1.0
//MyRobot.h
/////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////
//Usage:
//
//xkode::lib::String RobotWorldPath="/phx2";
//xkode::lib::String ModaServer="127.0.0.1";
//ModaCPP::Connection *pConnection=new ModaCPP::Connection(true);
//if(pConnection->Connect(ModaServer))
//    {
//    MyRobot *pRobot=pConnection->QueryRobotPHX2<MyRobot>(RobotWorldPath);
//    if( (pRobot!=NULL) && pRobot->IsValid())
//        {
//        //The robot is created and all devices are valid
//        //You can use devices and make your robotics loop here
//        }
//    }
/////////////////////////////////////////////////////////
#include "ModaCPP.h"
using namespace ModaCPP;

#ifndef __MYROBOT__H
#define __MYROBOT__H
//devices names

//Type Motor
#define MyRobot_MOTOR00_PATH "joint_front_left/axis/motor"
#define MyRobot_MOTOR00_INDEX 0
#define MyRobot_MOTOR01_PATH "joint_back_left/axis/motor"
#define MyRobot_MOTOR01_INDEX 1
#define MyRobot_MOTOR02_PATH "joint_front_right/axis/motor"
#define MyRobot_MOTOR02_INDEX 2
#define MyRobot_MOTOR03_PATH "joint_back_right/axis/motor"
#define MyRobot_MOTOR03_INDEX 3

//Type Distance
#define MyRobot_DISTANCE00_PATH "irleft/ray/device_ir"
#define MyRobot_DISTANCE00_INDEX 0
#define MyRobot_DISTANCE01_PATH "irright/ray/device_ir"
#define MyRobot_DISTANCE01_INDEX 1
#define MyRobot_DISTANCE02_PATH "irback/ray/device_ir"
#define MyRobot_DISTANCE02_INDEX 2

class MyRobot:public RobotPHX
    {
    private:
        bool _bValid;

        //devices arrays
        xkode::lib::Array<DeviceMotor*> _Motors;
        xkode::lib::Array<DeviceDistance*> _Distances;

        //Devices groups
        DevicesGroupMotor *_pMotorsGroup;
        DevicesGroupDistance *_pDistancesGroup;

    public:
        MyRobot(xkode::lib::String PHXName);
        virtual ~MyRobot();

        virtual void OnStartup(void) override;

        bool IsValid(void) {return(_bValid);}

        //Getting devices with the same type
        xkode::lib::Array<DeviceMotor*> *GetMotors(void) {return(&_Motors);}
        xkode::lib::Array<DeviceDistance*> *GetDistances(void) {return(&_Distances);}

        //Getting groups
        DevicesGroupMotor* GetMotorsGroup(void) {return(_pMotorsGroup);}
        DevicesGroupDistance* GetDistancesGroup(void) {return(_pDistancesGroup);}

        //getting device from its path or index
        DeviceMotor* GetMotorByIndex(int Index)
            {
            DeviceMotor *pRet=GetDeviceFromArray<DeviceMotor*>(_Motors,Index);
            return(pRet);
            }
        DeviceMotor* GetMotorByPath(xkode::lib::String DeviceRelativePath)
            {
            DeviceMotor *pRet=GetDeviceFromArray<DeviceMotor*>(_Motors,DeviceRelativePath);
            return(pRet);
            }

        DeviceDistance* GetDistanceByIndex(int Index)
            {
            DeviceDistance *pRet=GetDeviceFromArray<DeviceDistance*>(_Distances,Index);
            return(pRet);
            }
        DeviceDistance* GetDistanceByPath(xkode::lib::String DeviceRelativePath)
            {
            DeviceDistance *pRet=GetDeviceFromArray<DeviceDistance*>(_Distances,DeviceRelativePath);
            return(pRet);
            }

    protected:
        //getting a device from an array
        template<class T>
        T GetDeviceFromArray(xkode::lib::Array<T> &_Array,int Index)
            {
            if(Index<_Array.Count())    return(_Array[Index]);
            else                        return(NULL);
            }

        //getting a device from an array
        template<class T>
        T GetDeviceFromArray(xkode::lib::Array<T> &_Array,xkode::lib::String RelativeDevicePath)
            {
            T pRet=NULL;
            xkode::lib::String temp=RelativeDevicePath.ToLower();
            for(int i=0;i<_Array.Count();i++)
                {
                T _device=(T)_Array[i];
                if(_device->GetName().ToLower()==temp)
                    {
                    pRet=_device;
                    break;
                    }
                }
            return(pRet);
            }
    };

#endif
Documentation v4.7 (18/01/2015), Copyright (c) 2015 anyKode. All rights reserved.
What do you think about this topic? Send feedback!