Przeglądaj źródła

20200702, 代码合并

huli 4 lat temu
rodzic
commit
7f97ae6e3b

+ 32 - 23
CMakeLists.txt

@@ -12,30 +12,31 @@ FIND_PACKAGE(OpenCV REQUIRED)
 FIND_PACKAGE(PCL REQUIRED)
 
 
+MESSAGE(WARN "pcl:: ${PCL_INCLUDE_DIRS} --- ${PCL_LIBRARIES}")
 include_directories(
         /usr/local/include
+        ${PCL_INCLUDE_DIRS}
+        ${OpenCV_INCLUDE_DIRS}
         ${PROTOBUF_INCLUDE_DIRS}
-        ./message
-        ./communication
-        ./error_code
-        ./tool
-        ./system
-#        ${PCL_INCLUDE_DIRS}
-#        ${OpenCV_INCLUDE_DIRS}
-#        ./laser
-#        ./locate
+        laser
+        Locate
+        communication
+        message
+        error_code
+        tool
+	system
 )
 link_directories("/usr/local/lib")
 
 message(STATUS ${EXECUTABLE_OUTPUT_PATH})
 
 
-
+aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/error_code error_src )
 aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/message message_src )
 aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/lidar_locate locate_src )
-aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/robot robot_src )
+#aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/robot robot_src )
 aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/laser LASER_SRC )
-aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/plc PLC_SRC )
+#aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/plc PLC_SRC )
 aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/locate LOCATE_SRC )
 aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/terminor TERMINOR_SRC )
 aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/task TASK_MANAGER_SRC )
@@ -45,32 +46,40 @@ aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/system SYSTEM_SRC )
 
 add_executable(terminal
         main.cpp
-        ./error_code/error_code.cpp
+        ${error_src}
         ${locate_src}
         ${robot_src}
         ${message_src}
 
-#        ${LASER_SRC}
-#        ${PLC_SRC}
-#        ${TERMINOR_SRC}
-#        ${LOCATE_SRC}
-#        ${TASK_MANAGER_SRC}
+        ${LASER_SRC}
+        ${PLC_SRC}
+        ${TERMINOR_SRC}
+        ${LOCATE_SRC}
+        ${TASK_MANAGER_SRC}
         ${TOOL_SRC}
         ${COMMUNICATION_SRC}
         ${SYSTEM_SRC}
+
         )
 
 target_link_libraries(terminal
-        nnxx
-        nanomsg
-        ${PROTOBUF_LIBRARIES}
         /usr/local/lib/libglog.a
         /usr/local/lib/libgflags.a
+        /usr/local/lib/liblivox_sdk_static.a
+        /usr/local/apr/lib/libapr-1.a
+        nnxx
+        nanomsg
 
-#        ${OpenCV_LIBS}
+        ${PROTOBUF_LIBRARIES}
+        ${OpenCV_LIBS}
         ${GLOG_LIBRARIES}
-#        ${PCL_LIBRARIES}
+        ${PCL_LIBRARIES}
         ${PROTOBUF_LIBRARIES}
 
+        libtensorflow_cc.so
+        #tf_3dcnn_api.so
+        pointSIFT_API.so
+
+        -lpthread
         )
 

+ 10 - 5
communication/communication_socket_base.cpp

@@ -243,9 +243,12 @@ void Communication_socket_base::receive_data_thread()
 		{
 			std::this_thread::yield();
 
-			std::unique_lock<std::mutex> lk(m_mutex);
-			//flags为1, 非阻塞接受消息, 如果接收到消息, 那么接受数据长度大于0
-			std::string t_receive_string = m_socket.recv<std::string>(1);
+			std::string t_receive_string;
+			{//这个大括号表示只对 recv 和 send 加锁, 不要因为后面的复杂逻辑影响通信效率
+				std::unique_lock<std::mutex> lk(m_mutex);
+				//flags为1, 非阻塞接受消息, 如果接收到消息, 那么接受数据长度大于0
+				t_receive_string = m_socket.recv<std::string>(1);
+			}
 			if ( t_receive_string.size()>0 )
 			{
 				//如果这里接受到了消息, 在这提前解析消息最前面的Base_msg (消息公共内容), 用于后续的check
@@ -485,8 +488,10 @@ void Communication_socket_base::send_data_thread()
 			{
 				if ( tp_msg != NULL )
 				{
-					std::unique_lock<std::mutex> lk(m_mutex);
-					int send_size = m_socket.send(tp_msg->get_message_buf());
+					{//这个大括号表示只对 recv 和 send 加锁, 不要因为后面的复杂逻辑影响通信效率
+						std::unique_lock<std::mutex> lk(m_mutex);
+						m_socket.send(tp_msg->get_message_buf());
+					}
 					delete(tp_msg);
 					tp_msg = NULL;
 				}

+ 0 - 82
lidar_locate/Locate_communicator.cpp

@@ -1,82 +0,0 @@
-//
-// Created by zx on 2020/6/18.
-//
-
-#include "Locate_communicator.h"
-//#include "locate_message.pb.h"
-
-
-Locate_communicator* Locate_communicator::mp_locate_communicator=NULL;
-
-Locate_communicator::Locate_communicator()
-{
-
-}
-Locate_communicator::~Locate_communicator()
-{
-
-}
-Error_manager Locate_communicator::locate_request(message::Measure_request_msg request,message::Measure_response_msg& result,unsigned int timeout)
-{
-    /*
-     * 检查request合法性,以及模块状态
-     */
-
-    /*std::string response_string;
-    Error_manager code=m_nnxx_client.request(request.SerializeAsString(),response_string,timeout);
-
-    if(code==SUCCESS)
-    {
-        //解析返回数据
-        message::Locate_response_msg response;
-
-        if(false==response.ParseFromString(response_string))
-        {
-            //解析response数据错误,
-//            return Error_manager(LOCATE_RESPONSE_PARSE_ERROR,MAJOR_ERROR,"response string parse failed");
-        }
-        else if(response.error_manager().error_code()==SUCCESS)
-        {
-            result=response;
-            return SUCCESS;
-        }
-        else
-        {
-            ///将response中的错误信息,转换成错误码,返回
-            return Error_manager(Error_code(response.error_manager().error_code()),MAJOR_ERROR,response.error_manager().error_description().c_str());
-        }
-    }
-    else if(code.get_error_level()==MINOR_ERROR)
-    {
-        //处理底层处理不了的错误
-    }
-    else if(code.get_error_level()==MAJOR_ERROR)
-    {
-        //本模块功能失败的错误,向上抛出
-        return code;
-    }*/
-
-    return SUCCESS;
-}
-
-Error_manager Locate_communicator::create_locate_communicator(std::string str_ip,int port)
-{
-    /*Error_manager code=SUCCESS;
-    if(mp_locate_communicator==NULL)
-    {
-        mp_locate_communicator=new Locate_communicator();
-        char connect_str[255]={0};
-        sprintf(connect_str,"tcp://%s:%d",str_ip.c_str(),port);
-        code=mp_locate_communicator->m_nnxx_client.connect(connect_str);
-        return code;
-    } else
-    {
-        return code;
-    }*/
-
-}
-
-Locate_communicator* Locate_communicator::get_instance()
-{
-    return mp_locate_communicator;
-}

+ 0 - 26
lidar_locate/Locate_communicator.h

@@ -1,26 +0,0 @@
-//
-// Created by zx on 2020/6/18.
-//
-
-#ifndef NNXX_TESTS_LOCATE_COMMUNICATOR_H
-#define NNXX_TESTS_LOCATE_COMMUNICATOR_H
-
-#include <mutex>
-
-//#include "locate_message.pb.h"
-#include "../message/measure_message.pb.h"
-#include "../error_code/error_code.h"
-
-class Locate_communicator {
-public:
-    virtual ~Locate_communicator();
-    Error_manager locate_request(message::Measure_request_msg request,message::Measure_response_msg& result,unsigned int timeout=3000);
-    static Error_manager create_locate_communicator(std::string str_ip,int port);
-    static Locate_communicator* get_instance();
-protected:
-    Locate_communicator();
-    static  Locate_communicator*  mp_locate_communicator;
-};
-
-
-#endif //NNXX_TESTS_LOCATE_COMMUNICATOR_H

+ 214 - 1
main.cpp

@@ -3,10 +3,22 @@
 //
 
 #include <iostream>
+#include "./error_code/error_code.h"
+#include "LogFiles.h"
 #include <glog/logging.h>
 
+#include "./laser/laser_manager.h"
+#include "./laser/Laser.h"
+#include "./laser/LivoxLaser.h"
+
+#include "./locate/locate_manager.h"
+
 #include "./communication/communication_socket_base.h"
 
+#include "./tool/ThreadPool.h"
+
+#define LIVOX_NUMBER	     2
+
 int main(int argc,char* argv[])
 {
 	Communication_socket_base csb;
@@ -21,5 +33,206 @@ int main(int argc,char* argv[])
 	std::cin >> ch ;
 	return 0;
 
-	int a;
+	ThreadPool pool(4);
+	std::vector< std::future<int> > results;
+
+	for(int i = 0; i < 8; ++i) {
+		results.emplace_back(
+		pool.enqueue([i] {
+			std::cout << "hello " << i << std::endl;
+			std::this_thread::sleep_for(std::chrono::seconds(1));
+			std::cout << "world " << i << std::endl;
+			return i*i;
+		})
+		);
+	}
+
+	for(auto && result: results)
+		std::cout << result.get() << ' ';
+	std::cout << std::endl;
+	return 0;
+
+
+
+	LOG(INFO) << " --- main start --- " ;
+
+
+	Error_manager t_error;
+	Error_manager t_result ;
+
+
+
+	std::cout << "huli 101 main start!" << std::endl;
+
+	std::cout << "1111111111111111111111" << std::endl;
+	Laser_manager::get_instance_pointer()->laser_manager_init();
+	Locate_manager::get_instance_pointer()->Locate_manager_init();
+
+	Point_sift_segmentation*                mp_point_sift;
+	int point_size = 8192;
+	int cls_num = 3;
+	double freq = 20.0;
+	std::string graph = "../model_param/seg_model_404500.ckpt.meta";
+	std::string cpkt = "../model_param/seg_model_404500.ckpt";
+	pcl::PointXYZ minp(-10000,-10000,-10000);
+	pcl::PointXYZ maxp(10000,10000,10000);
+
+
+
+
+	while(1)
+	{
+
+
+
+
+		std::cout << "huli 401 connect_laser Error_code::SUCCESS" << std::endl;
+
+		std::cout << " press to start" << std::endl;
+		char ch ;
+//		= getchar();
+
+		std::this_thread::sleep_for(std::chrono::seconds(2));
+		std::cin >> ch ;
+
+		if ( ch == 'b' )
+		{
+			std::cout << "  end scan ------------" << std::endl;
+			break;
+		}
+		std::cout << "  start scan ------------" << std::endl;
+
+		int n = 1;
+		while(n)
+		{
+			n--;
+
+			std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>		point_cloud_map;
+			std::mutex cloud_lock;
+			std::vector<int> select_laser_id_vector;
+			select_laser_id_vector.push_back(0);
+
+
+			time_t nowTime;
+			nowTime = time(NULL);
+			struct tm* sysTime = localtime(&nowTime);
+			char t_save_path[256] = { 0 };
+			sprintf(t_save_path, "../data/%04d%02d%02d_%02d%02d%02d",
+					sysTime->tm_year + 1900, sysTime->tm_mon + 1, sysTime->tm_mday, sysTime->tm_hour, sysTime->tm_min, sysTime->tm_sec);
+
+			Laser_manager_task * laser_manager_task = new Laser_manager_task;
+			laser_manager_task->task_init(TASK_CREATED,"",NULL,std::chrono::milliseconds(15000),
+										  true,t_save_path,&cloud_lock,&point_cloud_map,false,
+										  1000,false,select_laser_id_vector	);
+
+
+
+			t_error = Task_command_manager::get_instance_references().execute_task(laser_manager_task);
+//			tp_laser_manager->execute_task(laser_manager_task);
+
+			if ( t_error != Error_code::SUCCESS )
+			{
+				std::cout << "huli Laser_manager:::::" << t_error.to_string() << std::endl;
+			}
+			else
+			{
+				while ( laser_manager_task->is_task_end() == false)
+				{
+					if ( laser_manager_task->is_over_time() )
+					{
+						//超时处理。取消任务。
+						Laser_manager::get_instance_pointer()->cancel_task();
+						laser_manager_task->set_task_statu(TASK_DEAD);
+						t_error.error_manager_reset(Error_code::LASER_MANAGER_TASK_OVER_TIME, Error_level::MINOR_ERROR,
+													" laser_manager_task is_over_time ");
+						laser_manager_task->set_task_error_manager(t_error);
+					}
+					else
+					{
+						std::this_thread::yield();
+					}
+
+				}
+				std::cout << "huli task_error::::"  << laser_manager_task->get_task_error_manager().to_string() << std::endl;
+
+			}
+			delete(laser_manager_task);
+
+
+			std::cout << "huli laser result---------------------" << t_error.to_string() << std::endl;
+			std::cout << "huli zczxczxczx---------------------" << t_error.to_string() << std::endl;
+			std::cout << "huli zczxczxczx---------------------" << t_error.to_string() << std::endl;
+			std::cout << "huli zczxczxczx---------------------" << t_error.to_string() << std::endl;
+
+
+
+/*
+			pcl::PointCloud<pcl::PointXYZ>::Ptr scan_cloud ;
+			scan_cloud =  point_cloud_map[0];
+
+			//locate
+			pcl::getMinMax3D(*scan_cloud,minp,maxp);
+			std::cout << "huli 112" << std::endl;
+			mp_point_sift = new Point_sift_segmentation(point_size,cls_num,freq,minp,maxp);
+			std::cout << t_error.to_string() << std::endl;
+
+			t_error = mp_point_sift->init(graph,cpkt);
+			std::cout << t_error.to_string() << std::endl;
+
+			std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> segmentation_clouds;
+			t_error = mp_point_sift->segmentation(scan_cloud, segmentation_clouds, true, "../data/locate_data");
+			std::cout << t_error.to_string() << std::endl;
+			*/
+
+			Locate_manager_task * locate_manager_task = new Locate_manager_task;
+			locate_manager_task->task_init(TASK_CREATED,"",NULL,std::chrono::milliseconds(15000),
+										   true,t_save_path,&cloud_lock,&point_cloud_map,true
+			);
+			t_error = Task_command_manager::get_instance_references().execute_task(locate_manager_task);
+
+			if ( t_error != Error_code::SUCCESS )
+			{
+				std::cout << "huli Locate_manager:::::" << t_error.to_string() << std::endl;
+			}
+			else
+			{
+				while ( locate_manager_task->is_task_end() == false)
+				{
+					if ( locate_manager_task->is_over_time() )
+					{
+						//超时处理。取消任务。
+						Locate_manager::get_instance_pointer()->cancel_task();
+						locate_manager_task->set_task_statu(TASK_DEAD);
+						t_error.error_manager_reset(Error_code::LOCATE_MANAGER_TASK_OVER_TIME, Error_level::MINOR_ERROR,
+													" locate_manager_task is_over_time ");
+						locate_manager_task->set_task_error_manager(t_error);
+					}
+					else
+					{
+						std::this_thread::yield();
+					}
+
+				}
+
+				std::cout << "huli task_error:::::"  << locate_manager_task->get_task_error_manager().to_string() << std::endl;
+
+			}
+			delete(locate_manager_task);
+			std::cout << "huli locate result:::::" << t_error.to_string() << std::endl;
+
+		}
+
+		cout << "huli: 601 :" << t_error.to_string() << endl;
+		std::this_thread::sleep_for(std::chrono::seconds(2));
+
+	}
+
+	Laser_manager::get_instance_pointer()->laser_manager_uninit();
+	Locate_manager::get_instance_pointer()->Locate_manager_uninit();
+
+	cout << "huli 1234 main end" << endl;
+	std::this_thread::sleep_for(std::chrono::seconds(3));
+
+
+	return 0;
 }

+ 1 - 1
proto.sh

@@ -1,4 +1,4 @@
 protoc -I=./message message_base.proto --cpp_out=./message
 protoc -I=./message measure_message.proto --cpp_out=./message
 protoc -I=./message hardware_message.proto --cpp_out=./message
-protoc -I=./ setting.proto --cpp_out=./
+#protoc -I=./ setting.proto --cpp_out=./