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调度系统学习的主要内容,如果未能解决你的问题,请参考以下文章