Skip to content
Snippets Groups Projects
PlatoonController.h 1.91 KiB
Newer Older
Hoop77's avatar
-
Hoop77 committed
//
// Created by philipp on 12.02.18.
//

#ifndef CAR_PLATOONCONTROLLER_H
#define CAR_PLATOONCONTROLLER_H

Franz Bethke's avatar
Franz Bethke committed
#include <functional>

#include "PlatoonProtocolLib/VehicleFacade.h"
Franz Bethke's avatar
Franz Bethke committed
#include "PlatoonProtocolLib/Protocol.h"
#include "PC2CarLib/CommandReceiver.h"
#include "EgoMotion.h"
Franz Bethke's avatar
Franz Bethke committed
#include "PlatoonState.h"
#include <atomic>
Franz Bethke's avatar
Franz Bethke committed
#include <chrono>
Hoop77's avatar
-
Hoop77 committed
namespace car
{

class PlatoonController
{
public:
Franz Bethke's avatar
Franz Bethke committed
    using Callback = std::function<void()>;
Hoop77's avatar
-  
Hoop77 committed

    PlatoonController(ros::NodeHandle & nh,
                      platoonProtocol::VehicleFacade & c2c,
                      pc2car::CommandReceiver::Ptr pc,
Hoop77's avatar
-  
Hoop77 committed
                      EgoMotion & egoMotion);

Hoop77's avatar
-  
Hoop77 committed
    void run();
Hoop77's avatar
-  
Hoop77 committed
    void setCruiseControllerNotify(const Callback & cruiseControllerNotify)
    { this->cruiseControllerNotify = cruiseControllerNotify; }

    float getDesSpeed()
    { return desSpeed.get(); }

    PlatoonState getCurrState() const
    { return currState; }
Hoop77's avatar
-  
Hoop77 committed

    networking::time::TimedValue<platoonProtocol::PlatoonConfig> getPlatoonConfig()
    { return platoonConfig.getNonAtomicCopy(); }
Hoop77's avatar
-
Hoop77 committed

private:
Hoop77's avatar
-  
Hoop77 committed
    float maxPlatoonRange = 100.0; // cm
    MessageOStream messageOStream;
Hoop77's avatar
-  
Hoop77 committed
    Callback cruiseControllerNotify = [] {};
Hoop77's avatar
-  
Hoop77 committed
    platoonProtocol::VehicleFacade & c2c;
Franz Bethke's avatar
Franz Bethke committed
    pc2car::CommandReceiver::Ptr pc;
Hoop77's avatar
-  
Hoop77 committed
    EgoMotion & egoMotion;
    std::atomic<PlatoonState> currState{PlatoonState::ACC};
    networking::time::TimedAtomicValue<platoonProtocol::PlatoonConfig> platoonConfig;
    bool c2cAlive = false;
Franz Bethke's avatar
Franz Bethke committed
    // void updateC2cConfig(); // once C2C returns TimedValues
Hoop77's avatar
-  
Hoop77 committed

Franz Bethke's avatar
Franz Bethke committed
    void updatePcConfig();
Hoop77's avatar
-  
Hoop77 committed

    networking::time::TimedValue<platoonProtocol::PlatoonSpeed> PS{0.0f};
    networking::time::TimedValue<platoonProtocol::InnerPlatoonDistance> IPD{0.0f};

Franz Bethke's avatar
Franz Bethke committed
    void updateDesSpeed();
Hoop77's avatar
-  
Hoop77 committed

    networking::time::TimedValue<float> desSpeed{0.0f};

Franz Bethke's avatar
Franz Bethke committed
    void setupC2C();
Hoop77's avatar
-  
Hoop77 committed

Franz Bethke's avatar
Franz Bethke committed
    // METHODS
    void run_ACC();
Hoop77's avatar
-  
Hoop77 committed

Franz Bethke's avatar
Franz Bethke committed
    void run_CACC_FV();
Hoop77's avatar
-  
Hoop77 committed

Franz Bethke's avatar
Franz Bethke committed
    void run_CACC_LV();
Hoop77's avatar
-  
Hoop77 committed

Hoop77's avatar
-
Hoop77 committed
};

}

#endif //CAR_PLATOONCONTROLLER_H