|
@@ -199,9 +199,111 @@ void System_executor::execute_for_measure(int command_id, int terminal_id)
|
|
|
Error_manager t_error;
|
|
|
|
|
|
LOG(INFO) << " System_executor::execute_for_measure run "<< this;
|
|
|
- //这里要处理.......以后再写
|
|
|
|
|
|
- //创建一条答复消息
|
|
|
+ //第一步, 创建点云缓存, 和 指定雷达,目前就一个
|
|
|
+ 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
|
|
|
+ Laser_manager_task 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 )
|
|
|
+ {
|
|
|
+ LOG(INFO) << " Laser_manager execute_task error "<< this;
|
|
|
+ }
|
|
|
+ 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::sleep_for(std::chrono::microseconds(1));
|
|
|
+ std::this_thread::yield();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //提取任务单 的错误码
|
|
|
+ t_error = laser_manager_task.get_task_error_manager();
|
|
|
+ std::cout << "huli laser_manager_task error :::::::" << laser_manager_task.get_task_error_manager().to_string() << std::endl;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Locate_manager_task locate_manager_task ;
|
|
|
+ //第五步, 创建定位模块的任务单, 并发送到 Locate_manager
|
|
|
+ if ( t_error != Error_code::SUCCESS )
|
|
|
+ {
|
|
|
+ LOG(INFO) << " laser_manager_task error "<< this;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ 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 )
|
|
|
+ {
|
|
|
+ LOG(INFO) << " Locate_manager execute_task error "<< this;
|
|
|
+ }
|
|
|
+ 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::sleep_for(std::chrono::microseconds(1));
|
|
|
+ std::this_thread::yield();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //提取任务单 的错误码
|
|
|
+ t_error = locate_manager_task.get_task_error_manager();
|
|
|
+ std::cout << "huli locate_manager_task error :::::::" << locate_manager_task.get_task_error_manager().to_string() << std::endl;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //第七步, 创建一条答复消息
|
|
|
message::Measure_response_msg t_measure_response_msg;
|
|
|
t_measure_response_msg.mutable_base_info()->set_msg_type(message::Message_type::eLocate_response_msg);
|
|
|
t_measure_response_msg.mutable_base_info()->set_timeout_ms(5000);
|
|
@@ -214,17 +316,24 @@ void System_executor::execute_for_measure(int command_id, int terminal_id)
|
|
|
t_measure_response_msg.mutable_error_manager()->set_error_level((message::Error_level)t_error.get_error_level());
|
|
|
t_measure_response_msg.mutable_error_manager()->set_error_description(t_error.get_error_description(), t_error.get_description_length());
|
|
|
|
|
|
- t_measure_response_msg.mutable_locate_information()->set_locate_x(0);
|
|
|
- t_measure_response_msg.mutable_locate_information()->set_locate_y(0);
|
|
|
- t_measure_response_msg.mutable_locate_information()->set_locate_angle(0);
|
|
|
- t_measure_response_msg.mutable_locate_information()->set_locate_length(0);
|
|
|
- t_measure_response_msg.mutable_locate_information()->set_locate_width(0);
|
|
|
- t_measure_response_msg.mutable_locate_information()->set_locate_height(0);
|
|
|
- t_measure_response_msg.mutable_locate_information()->set_locate_wheel_base(0);
|
|
|
- t_measure_response_msg.mutable_locate_information()->set_locate_wheel_width(0);
|
|
|
- t_measure_response_msg.mutable_locate_information()->set_locate_correct(0);
|
|
|
+ if ( t_error == Error_code::SUCCESS )
|
|
|
+ {
|
|
|
+ t_measure_response_msg.mutable_locate_information()->set_locate_x(locate_manager_task.get_task_locate_information_ex()->locate_x);
|
|
|
+ t_measure_response_msg.mutable_locate_information()->set_locate_y(locate_manager_task.get_task_locate_information_ex()->locate_y);
|
|
|
+ t_measure_response_msg.mutable_locate_information()->set_locate_angle(locate_manager_task.get_task_locate_information_ex()->locate_angle);
|
|
|
+ t_measure_response_msg.mutable_locate_information()->set_locate_length(locate_manager_task.get_task_locate_information_ex()->locate_length);
|
|
|
+ t_measure_response_msg.mutable_locate_information()->set_locate_width(locate_manager_task.get_task_locate_information_ex()->locate_width);
|
|
|
+ t_measure_response_msg.mutable_locate_information()->set_locate_height(locate_manager_task.get_task_locate_information_ex()->locate_height);
|
|
|
+ t_measure_response_msg.mutable_locate_information()->set_locate_wheel_base(locate_manager_task.get_task_locate_information_ex()->locate_wheel_base);
|
|
|
+ t_measure_response_msg.mutable_locate_information()->set_locate_wheel_width(locate_manager_task.get_task_locate_information_ex()->locate_wheel_width);
|
|
|
+ t_measure_response_msg.mutable_locate_information()->set_locate_correct(locate_manager_task.get_task_locate_information_ex()->locate_correct);
|
|
|
+ }
|
|
|
|
|
|
string t_msg = t_measure_response_msg.SerializeAsString();
|
|
|
System_communication::get_instance_references().encapsulate_msg(t_msg);
|
|
|
+
|
|
|
+ std::cout << "huli t_measure_response_msg = " << t_measure_response_msg.DebugString() << std::endl;
|
|
|
+
|
|
|
+
|
|
|
return ;
|
|
|
}
|