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.
77 lines
2.7 KiB
C++
77 lines
2.7 KiB
C++
#include <iostream>
|
|
#include <std_msgs/String.h>
|
|
#include <string>
|
|
#include <ros/ros.h>
|
|
#include "rapidjson/document.h"
|
|
|
|
rapidjson::Document document;
|
|
|
|
void callBack(const std_msgs::String::ConstPtr &data){
|
|
|
|
document.Parse(data->data.c_str());
|
|
std::cout <<"original message "<< data->data << std::endl;
|
|
std::cout <<"parse message "<< document["lat"].GetInt() << std::endl;
|
|
std::cout <<"parse message "<< document["lon"].GetInt() << std::endl;
|
|
std::cout <<"parse message "<< document["alt"].GetInt() << std::endl;
|
|
std::cout <<"parse message "<< document["heading"].GetInt() << std::endl;
|
|
// std::cout <<"parse message"<< j_data["lat"] << std::endl;
|
|
|
|
// std::string k = j_data["lat"] , q = j_data["lon"];
|
|
// int lat = std::stoi(k) ,lon = std::stoi(q);
|
|
// std::cout <<"lat:"<< k << std::endl;
|
|
// std::cout <<"lon:"<< q << std::endl;
|
|
|
|
}
|
|
|
|
int main(int argc ,char **argv)
|
|
{
|
|
// create JSON arrays
|
|
std::string j,q,k;
|
|
std_msgs::String mes;
|
|
std::string data ="{\"lat\": \"241218859\", \"lon\": \"1206743161\", \"alt\": \"8489\", \"heading\": \"128\"}";
|
|
// std::string data = "{'lat': 241217244, 'lon': '1206741391', 'alt': '8937', 'heading': 8800}";
|
|
// std::string data ='"{"lat": "241218859", "lon": "1206743161", "alt": "8489", "heading": "128"}"';
|
|
|
|
// Init ROS node
|
|
ros::init(argc, argv, "ros_node");
|
|
ros::NodeHandle json_node;
|
|
// reate Assync spiner
|
|
ros::AsyncSpinner spinner(0);
|
|
spinner.start();
|
|
|
|
std::string rostopicName = "jsonData";
|
|
ros::Publisher data_pub = json_node.advertise<std_msgs::String>(rostopicName,100);
|
|
// ros::Subscriber data_receive = json_node.subscribe<std_msgs::String>(rostopicName,100,callBack);
|
|
ros::Subscriber data_receive1 = json_node.subscribe<std_msgs::String>("/uav_message",100,callBack);
|
|
|
|
mes.data = data;
|
|
while(ros::ok()){
|
|
data_pub.publish(mes);
|
|
}
|
|
// json j_no_init_list = json::array();
|
|
// json j_empty_init_list = json::array({});
|
|
// json j_nonempty_init_list = json::array({1, 2, 3, 4});
|
|
// json j_list_of_pairs = json::array({ {"one", 1}, {"two", 2} });
|
|
// json j_data_list = json::parse(data) ;
|
|
|
|
// j = j_data_list["lat"];
|
|
// q = j_data_list["lon"];
|
|
// k = j_data_list["alt"];
|
|
|
|
|
|
// serialize the JSON arrays
|
|
// std::cout << j_no_init_list << '\n';
|
|
// std::cout << j_empty_init_list << '\n';
|
|
// std::cout << j_nonempty_init_list << '\n';
|
|
// std::cout << j_list_of_pairs << '\n';
|
|
// while(true){
|
|
// std::cout << j_data_list << '\n';
|
|
// std::cout << j_data_list["lat"] << '\n';
|
|
// std::cout << std::stoi(j)<< std::stoi(q)<< std::stoi(k) << "\n";
|
|
// }
|
|
|
|
ros::waitForShutdown();
|
|
|
|
return 0;
|
|
}
|