AGV调度系统学习

Posted COCO_PEAK_NOODLE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AGV调度系统学习相关的知识,希望对你有一定的参考价值。

开源AGV调度系统软件
AgvDispatch,作者同样使用了开源的日志管理库spdlog,还有开源的数据库管理库SQLite。

使用单例实现了
1-地图管理类-MapManager
2-Agv管理类-AgvManager
3-任务管理类-TaskManager
4-用户管理类-UserManager
5-消息处理类-MsgProcess
6-用户日志管理类-UserLogManager
7-电梯管理类-ElevatorManager
8-任务生成类-TaskManager
9-通讯管理类-SessionManager

这样就可以在各个类之间通过单例进行交互了,大概就这样

看看main函数

int main(int argc, char *argv[])
{
    signal(SIGINT, quit);
    std::cout << "start server ..." << std::endl;

    //0.日志输出
    initLog();

    //1.打开数据库
    try {
        g_db.open(DB_File);
    }
    catch (CppSQLite3Exception &e) {
        combined_logger->error("sqlite error {0}:{1};", e.errorCode(), e.errorMessage());
        return -1;
    }

    //2.载入地图

    std::cout << "2" << std::endl;
    if (!MapManager::getInstance()->load()) {
        combined_logger->error("map manager load fail");
        return -2;
    }


    //3.初始化车辆及其链接

    std::cout << "3" << std::endl;
    if (!AgvManager::getInstance()->init()) {
        combined_logger->error("AgvManager init fail");
        return -3;
    }


    //4.初始化任务管理
    std::cout << "4" << std::endl;
    if (!TaskManager::getInstance()->init()) {
        combined_logger->error("TaskManager init fail");
        return -4;
    }

    //5.用户管理
    std::cout << "5" << std::endl;
    UserManager::getInstance()->init();

    //6.初始化消息处理
    std::cout << "6" << std::endl;
    if (!MsgProcess::getInstance()->init()) {
        combined_logger->error("MsgProcess init fail");
        return -5;
    }

    //7.初始化日志发布

    std::cout << "7" << std::endl;
    UserLogManager::getInstance()->init();


    // test ros agv
    //rosAgvPtr agv(new rosAgv(1,"robot_0","127.0.0.1",7070));
    //agv->init();

    //8.初始化电梯
    std::cout << "8" << std::endl;
    ElevatorManager::getInstance()->init();


    //9.初始化任务生成
    std::cout << "9" << std::endl;
    TaskMaker::getInstance()->init();


    //10.初始化tcp/ip 接口
    std::cout << "10" << std::endl;
    //tcpip服务
    auto aID = SessionManager::getInstance()->addTcpAccepter(9999);
    SessionManager::getInstance()->openTcpAccepter(aID);

    //websocket fuwu
    aID = SessionManager::getInstance()->addWebSocketAccepter(9998);
    SessionManager::getInstance()->openWebSocketAccepter(aID);
#ifdef DY_TEST
    //agv server
    aID = SessionManager::getInstance()->addTcpAccepter(6789);
    SessionManager::getInstance()->openTcpAccepter(aID);
    AgvManager::getInstance()->setServerAccepterID(aID);
#endif
    combined_logger->info("server init OK!");

    while (!g_quit) {
        usleep(50000);
    }

    spdlog::drop_all();

    return 0;
}

以上是关于AGV调度系统学习的主要内容,如果未能解决你的问题,请参考以下文章

论文阅读|《制造环境下多AGV调度的强化学习方法》

论文阅读|AGV调度优化研究综述

多agv系统调度的MATLAB仿真

DQN学习使用混合规则的柔性车间AGV实时调度(关注点:状态奖励函数的设置)

AGV调度优化系列论文解读与汇总

论文阅读|《用支持向量机求解AGV调度问题》(附带源码)