You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.7 KiB
C++

4 years ago
#include"class_model/requestData.h"
#include <cstdlib>
#include <iostream>
3 years ago
int command;
// json j_data; //Don't set json as global variable
4 years ago
RequestClass::RequestClass() : node_handle_(""){
3 years ago
mqtt_data = node_handle_.subscribe("/uav_message", 100,
4 years ago
&RequestClass::Data_callback, this);
4 years ago
formation_data = node_handle_.subscribe("/formation_message", 10,
&RequestClass::Message_callback, this);
4 years ago
}
RequestClass::~RequestClass() { ros::shutdown(); }
void RequestClass::Data_callback(const std_msgs::String::ConstPtr &sensor) {
3 years ago
StringToJson(sensor->data);
4 years ago
}
4 years ago
void RequestClass::Message_callback(const std_msgs::String::ConstPtr &message) {
std::string data = message->data;
3 years ago
jsonToString(data);
4 years ago
}
4 years ago
global_location RequestClass::get_leader_GPS(){
return leader_position;
}
float RequestClass::get_leader_heading(){
return heading;
}
3 years ago
int RequestClass::get_formation_message(){
4 years ago
return command;
}
void RequestClass::jsonToString(std::string data){
std::string list[1]={""};
int j = 0;
for(int i=0;i<data.length();i++){
if(data[i] == ':'){
i+=3;
while(data[i] != ','){
if(data[i] == ',' || data[i] == '}'){
j++;
break;
}
list[j]=list[j]+data[i];
i++;
if(j>sizeof(list)){
break;
}
}
}
}
3 years ago
command = std::stoi(list[1]);
4 years ago
3 years ago
// ROS_INFO("command: %s",command);
}
4 years ago
3 years ago
void RequestClass::StringToJson(std::string data){
3 years ago
3 years ago
std::cout <<"string: "<< data << std::endl;
3 years ago
// document.Parse(data.c_str()); //china's library
// leader_position.lat=document["lat"].GetInt();
// leader_position.lon=document["lon"].GetInt();
// leader_position.alt=document["alt"].GetInt();
// heading = document["heading"].GetInt();
// std::cout << document["lat"].GetInt() << std::endl;
// std::cout << document["lon"].GetInt() << std::endl;
// std::cout << document["alt"].GetInt() << std::endl;
// std::cout << document["heading"].GetInt() << std::endl;
//********************************************//
j_data = json::parse(data); //open source
// std::string lat = "",lon = "",alt = "",degree = "";
3 years ago
// lat = j_data["lat"];
// lon = j_data["lon"];
// alt = j_data["alt"];
// degree = j_data["heading"];
3 years ago
leader_position.lat=j_data["lat"];
leader_position.lon=j_data["lon"];
leader_position.alt=j_data["alt"];
heading = j_data["heading"];
3 years ago
3 years ago
std::cout <<"Json: " <<j_data << std::endl;
// std::cout << leader_position.lat << std::endl;
// std::cout << leader_position.lon << std::endl;
// std::cout << leader_position.alt << std::endl;
// std::cout << heading << std::endl;
4 years ago
}