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;
}
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可峰科技

生活不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值