model_fitting_demo.cpp
Go to the documentation of this file.
00001 /*
00002  * model_fitting_demo.cpp
00003  *
00004  *  Created on: Jun 8, 2010
00005  *      Author: sturm
00006  */
00007 
00008 #include <ros/ros.h>
00009 
00010 #include "articulation_models/models/factory.h"
00011 
00012 #include "articulation_msgs/ModelMsg.h"
00013 #include "articulation_msgs/TrackMsg.h"
00014 #include "articulation_msgs/ParamMsg.h"
00015 
00016 using namespace std;
00017 using namespace articulation_models;
00018 using namespace articulation_msgs;
00019 
00020 #include <boost/random.hpp>
00021 #include <boost/random/normal_distribution.hpp>
00022 
00023 int main(int argc, char** argv) {
00024         ros::init(argc, argv, "model_fitting");
00025         ros::NodeHandle n;
00026         ros::Publisher model_pub = n.advertise<ModelMsg> ("model", 5);
00027         ros::Rate loop_rate(5);
00028         int count = 0;
00029 
00030         boost::normal_distribution<> nd(0.0, 0.01);
00031         boost::mt19937 rng;
00032         boost::variate_generator<boost::mt19937&, boost::normal_distribution<> >
00033                         var_nor(rng, nd);
00034 
00035         MultiModelFactory factory;
00036 
00037         ModelMsg model_msg;
00038         model_msg.name = "rotational";
00039         ParamMsg sigma_param;
00040         sigma_param.name = "sigma_position";
00041         sigma_param.value = 0.02;
00042         sigma_param.type = ParamMsg::PRIOR;
00043         sigma_param.name = "sigma_orientation";
00044         sigma_param.value = M_PI*10;
00045         sigma_param.type = ParamMsg::PRIOR;
00046         model_msg.params.push_back(sigma_param);
00047 
00048         model_msg.track.header.stamp = ros::Time();
00049         model_msg.track.header.frame_id = "/";
00050 
00051         while (ros::ok()) {
00052 
00053                 geometry_msgs::Pose pose;
00054                 pose.position.x = cos(count / 30.0)+var_nor();
00055                 pose.position.y = sin(count / 30.0)+var_nor();
00056                 pose.position.z = var_nor();
00057                 pose.orientation.x = 0;
00058                 pose.orientation.y = 0;
00059                 pose.orientation.z = 0;
00060                 pose.orientation.w = 1;
00061                 model_msg.track.pose.push_back(pose);
00062 
00063                 if(model_msg.track.pose.size()<3) continue;
00064 
00065                 cout <<"creating object"<<endl;
00066                 GenericModelPtr model_instance = factory.restoreModel(model_msg);
00067                 cout <<"fitting"<<endl;
00068                 model_instance->fitModel();
00069                 cout <<"evaluating"<<endl;
00070                 model_instance->evaluateModel();
00071                 cout <<"done"<<endl;
00072 
00073                 cout << "model class = "<< model_instance->getModelName() << endl;
00074                 cout << "       radius = "<<model_instance->getParam("rot_radius")<< endl;
00075                 cout << "       center.x = "<<model_instance->getParam("rot_center.x")<< endl;
00076                 cout << "       center.y = "<<model_instance->getParam("rot_center.y")<< endl;
00077                 cout << "       center.z = "<<model_instance->getParam("rot_center.z")<< endl;
00078                 cout << "       log LH = " << model_instance->getParam("loglikelihood")<< endl;
00079 
00080                 ModelMsg fitted_model_msg = model_instance->getModel();
00081                 model_pub.publish(fitted_model_msg);
00082 
00083                 ros::spinOnce();
00084                 loop_rate.sleep();
00085                 ++count;
00086         }
00087 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Friends


articulation_tutorials
Author(s): Juergen Sturm
autogenerated on Wed Dec 26 2012 15:38:56