Kaynağa Gözat

change map_lanetoxodr. add ndsproc.pro.

yuchuli 2 yıl önce
ebeveyn
işleme
f1ebcd86d7

+ 1 - 0
src/tool/RemoteCtrl_h264/grpcpc.h

@@ -24,6 +24,7 @@
 #include <string>
 #include <condition_variable>
 
+
 #include <grpcpp/grpcpp.h>
 
 #include "uploadthreadmsg.grpc.pb.h"

+ 1 - 0
src/tool/map_lanetoxodr/function/geofit.h

@@ -15,6 +15,7 @@
 #include <Eigen/SVD>
 
 #include <QList>
+#include <QPointF>
 
 // inlcude iostream and string libraries
 #include <iostream>

+ 11 - 0
src/tool/map_lanetoxodr/function/ndsdataproc.cpp

@@ -4,11 +4,18 @@
 #include "gnss_coordinate_convert.h"
 #include <QDateTime>
 
+#include <QPointF>
+
 #include "geofit.h"
 #include "circlefitting.h"
+
+#ifndef  INNDSPROC
 #include "mainwindow.h"
+#endif
 
+#ifndef  INNDSPROC
 extern MainWindow * gw;
+#endif
 
 NDSDataProc::NDSDataProc()
 {
@@ -638,7 +645,11 @@ int NDSDataProc::ProcNDSData(std::string strlinepath,std::string strvehiclepath,
 
     std::cout<<"complete "<<std::endl;
 
+#ifndef INNDSPROC
     mpxodr->AddRoad("",xvectorvehicle[xvectorvl[nvlsize-1].mvehindex].s, QString::number(gw->CreateRoadID()).toStdString(),"-1");
+#else
+    mpxodr->AddRoad("",xvectorvehicle[xvectorvl[nvlsize-1].mvehindex].s, QString::number(1).toStdString(),"-1");
+#endif
     Road * p = mpxodr->GetRoad(mpxodr->GetRoadCount() - 1);
 
 

+ 77 - 0
src/tool/map_lanetoxodr/ndsproc.pro

@@ -0,0 +1,77 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2018-12-14T18:35:51
+#
+#-------------------------------------------------
+
+
+QT       -= gui
+
+CONFIG += c++11 console
+CONFIG -= app_bundle
+
+QMAKE_LFLAGS += -no-pie
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which has been marked as deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    ndsprocmain.cpp \
+    TinyXML/tinystr.cpp \
+    TinyXML/tinyxml.cpp \
+    TinyXML/tinyxmlerror.cpp \
+    TinyXML/tinyxmlparser.cpp \
+    const.cpp \
+    fresnl.cpp \
+    polevl.c \
+    function/ndsdataproc.cpp \
+    function/circlefitting.cpp \
+    function/geofit.cpp \
+    gnss_coordinate_convert.cpp
+
+
+
+
+!include(../../../include/common.pri ) {
+    error( "Couldn't find the common.pri file!" )
+}
+
+
+!include(../../common/common/xodr/OpenDrive/OpenDrive.pri ) {
+    error( "Couldn't find the OpenDrive.pri file!" )
+}
+
+!include(../../common/common/xodr/xodrfunc/xodrfunc.pri ) {
+    error( "Couldn't find the xodrfunc.pri file!" )
+}
+
+INCLUDEPATH += $$PWD/../../common/common/xodr
+INCLUDEPATH += $$PWD/../../common/common/xodr/xodrfunc
+INCLUDEPATH += $$PWD/function
+
+unix:INCLUDEPATH += /usr/include/eigen3
+win32:INCLUDEPATH += D:\File\soft\eigen
+
+DEFINES += NOTINPILOT
+DEFINES += INNDSPROC
+
+DISTFILES += \
+    TinyXML/TinyXML.pri
+
+HEADERS += \
+    TinyXML/tinystr.h \
+    TinyXML/tinyxml.h \
+    function/ndsdataproc.h \
+    function/circlefitting.h \
+    function/geofit.h \
+    gnss_coordinate_convert.h
+
+

+ 225 - 0
src/tool/map_lanetoxodr/ndsprocmain.cpp

@@ -0,0 +1,225 @@
+#include <QCoreApplication>
+
+#include <getopt.h>
+
+#include <iostream>
+
+#include "ivstdcolorout.h"
+
+#include <QFile>
+
+#include <OpenDrive/OpenDrive.h>
+#include <OpenDrive/OpenDriveXmlWriter.h>
+
+#include "ndsdataproc.h"
+
+static char gstr_vehiclepath[256];
+static char gstr_linepath[256];
+static char gstr_envpath[256];  //from y axis
+static char gstr_outputpath[256];  //from x axis
+
+/**
+ * @brief print_useage
+ */
+void print_useage()
+{
+    std::cout<<" -v --vehicle $vehiclefile : set vehicle file path. eq.  -v /home/yuchuli/nds-sync-vehicle.csv"<<std::endl;
+    std::cout<<" -l --line $linefile : set line file path. eq.  -l /home/yuchuli/nds-sync-line.csv"<<std::endl;
+    std::cout<<" -e --environment $Environmentfile: set Environment file . eq.  -e /home/yuchuli/Environment.csv"<<std::endl;
+    std::cout<<" -o --output $outputfile : set output file. eq.  -o /home/yuchuli/output.xodr"<<std::endl;
+    std::cout<<" -h --help print help"<<std::endl;
+}
+
+int  GetOptLong(int argc, char *argv[]) {
+    int nRtn = 0;
+    int opt; // getopt_long() 的返回值
+    int digit_optind = 0; // 设置短参数类型及是否需要参数
+    (void)digit_optind;
+
+    // 如果option_index非空,它指向的变量将记录当前找到参数符合long_opts里的
+    // 第几个元素的描述,即是long_opts的下标值
+    int option_index = 0;
+    // 设置短参数类型及是否需要参数
+    const char *optstring = "v:l:e:o:h";
+
+    // 设置长参数类型及其简写,比如 --reqarg <==>-r
+    /*
+    struct option {
+             const char * name;  // 参数的名称
+             int has_arg; // 是否带参数值,有三种:no_argument, required_argument,optional_argument
+             int * flag; // 为空时,函数直接将 val 的数值从getopt_long的返回值返回出去,
+                     // 当非空时,val的值会被赋到 flag 指向的整型数中,而函数返回值为0
+             int val; // 用于指定函数找到该选项时的返回值,或者当flag非空时指定flag指向的数据的值
+        };
+    其中:
+        no_argument(即0),表明这个长参数不带参数(即不带数值,如:--name)
+            required_argument(即1),表明这个长参数必须带参数(即必须带数值,如:--name Bob)
+            optional_argument(即2),表明这个长参数后面带的参数是可选的,(即--name和--name Bob均可)
+     */
+    static struct option long_options[] = {
+        {"vehicle", required_argument, NULL, 'v'},
+        {"line", required_argument, NULL, 'l'},
+        {"environment", required_argument, NULL, 'e'},
+        {"output", required_argument, NULL, 'o'},
+        {"help",  no_argument,       NULL, 'h'},
+ //       {"optarg", optional_argument, NULL, 'o'},
+        {0, 0, 0, 0}  // 添加 {0, 0, 0, 0} 是为了防止输入空值
+    };
+
+    while ( (opt = getopt_long(argc,
+                               argv,
+                               optstring,
+                               long_options,
+                               &option_index)) != -1) {
+//        printf("opt = %c\n", opt); // 命令参数,亦即 -a -b -n -r
+//        printf("optarg = %s\n", optarg); // 参数内容
+//        printf("optind = %d\n", optind); // 下一个被处理的下标值
+//        printf("argv[optind - 1] = %s\n",  argv[optind - 1]); // 参数内容
+//        printf("option_index = %d\n", option_index);  // 当前打印参数的下标值
+//        printf("\n");
+        switch(opt)
+        {
+        case 'v':
+            strncpy(gstr_vehiclepath,optarg,255);
+            break;
+        case 'l':
+            strncpy(gstr_linepath,optarg,255);
+            break;
+        case 'e':
+            strncpy(gstr_envpath,optarg,255);
+            break;
+        case 'o':
+            strncpy(gstr_outputpath,optarg,255);
+            break;
+        case 'h':
+            print_useage();
+            nRtn = 1; //because use -h
+            break;
+        default:
+            break;
+        }
+
+    }
+
+    return nRtn;
+}
+
+int GetLaneSet(const char * strenvpath, int & nleftlane, int & nrightlane)
+{
+    QFile xFile;
+    xFile.setFileName(strenvpath);
+    if(!xFile.open(QIODevice::ReadOnly))
+    {
+        ivstdcolorout("Can't Open Evniroment File.",iv::STDCOLOR_BOLDRED);
+        return -1;
+    }
+    QByteArray ba = xFile.readAll();
+    xFile.close();
+    QList<QByteArray> baline =ba.split('\n');//x.split(QRegExp("\n ")) ;//ba.split('\n');
+    int nline = baline.size();
+    if(nline < 2)
+    {
+        ivstdcolorout("No Lane Line.",iv::STDCOLOR_BOLDRED);
+        return -2;
+    }
+    QString x(baline[1]);
+    x = x.trimmed();
+    //         QList<QByteArray> badata = baline[i].split('\t');
+    QStringList badata = x.split(QRegExp("[,]"));
+    if(badata.size()<7)
+    {
+        ivstdcolorout("No Lane Setting.",iv::STDCOLOR_BOLDRED);
+        return -3;
+    }
+    nleftlane = badata[5].toInt();
+    nrightlane = badata[6].toInt();
+    return 0;
+}
+
+
+int main(int argc, char *argv[])
+{
+    QCoreApplication a(argc, argv);
+
+    snprintf(gstr_vehiclepath,255," ");
+    snprintf(gstr_linepath,255," ");
+    snprintf(gstr_envpath,255," ");
+    snprintf(gstr_outputpath,255," ");
+
+    int nRtn = GetOptLong(argc,argv);
+    if(nRtn == 1)  //show help,so exit.
+    {
+        return 0;
+    }
+
+//    snprintf(gstr_vehiclepath,255,"/home/yuchuli/nds-sync-vehicle.csv");
+//    snprintf(gstr_linepath,255,"/home/yuchuli/nds-sync-line.csv");
+//    snprintf(gstr_envpath,255,"/home/yuchuli/Environment.csv");
+//    snprintf(gstr_outputpath,255,"/home/yuchuli/output.xodr");
+
+    if(strncmp(gstr_vehiclepath , " ",255) == 0)
+    {
+        ivstdcolorout("Please use -v set vehicle file path.",iv::STDCOLOR_BOLDRED);
+        print_useage();
+        return 0;
+    }
+
+    char strout[1000];
+    snprintf(strout,1000,"Vehicle File Path: %s",gstr_vehiclepath);
+    ivstdcolorout(strout,iv::STDCOLOR_BOLDGREEN);
+
+    if(strncmp(gstr_linepath , " ",255) == 0)
+    {
+        ivstdcolorout("Please use -l set line file path.",iv::STDCOLOR_BOLDRED);
+        print_useage();
+        return 0;
+    }
+
+    snprintf(strout,1000,"Line File Path: %s",gstr_linepath);
+    ivstdcolorout(strout,iv::STDCOLOR_BOLDGREEN);
+
+    if(strncmp(gstr_envpath , " ",255) == 0)
+    {
+        ivstdcolorout("Please use -e set environment file path.",iv::STDCOLOR_BOLDRED);
+        print_useage();
+        return 0;
+    }
+
+    snprintf(strout,1000,"Environment File Path: %s",gstr_envpath);
+    ivstdcolorout(strout,iv::STDCOLOR_BOLDGREEN);
+
+    if(strncmp(gstr_outputpath , " ",255) == 0)
+    {
+        ivstdcolorout("Please use -o set output file path.",iv::STDCOLOR_BOLDRED);
+        print_useage();
+        return 0;
+    }
+
+    snprintf(strout,1000,"Output File Path: %s",gstr_outputpath);
+    ivstdcolorout(strout,iv::STDCOLOR_BOLDGREEN);
+
+    int nleft = 0;
+    int nright = 0;
+    GetLaneSet(gstr_envpath,nleft,nright);
+
+    OpenDrive xxodr;
+
+    NDSDataProc ndp;
+    int nrtn = ndp.ProcNDSData(gstr_linepath,gstr_vehiclepath,&xxodr,nleft,nright);
+
+    std::cout<<"state: "<<ndp.mstrState<<std::endl;
+    if(nrtn == 0)
+    {
+        snprintf(strout,1000,"Convert OK. out file path: %s ",gstr_outputpath);
+        ivstdcolorout(strout,iv::STDCOLOR_BOLDGREEN);
+        OpenDriveXmlWriter x(&xxodr);
+        x.WriteFile(gstr_outputpath);
+    }
+    else
+    {
+        snprintf(strout,1000," Convert Fail. Fail Code: %d ",nrtn);
+        ivstdcolorout(strout,iv::STDCOLOR_BOLDRED);
+        return nrtn;
+    }
+    return 0;
+}