10 #include "mf_common/Array2D.h" 11 #include "mf_common/Float32Array.h" 12 #include <sensor_msgs/Image.h> 13 #include <sensor_msgs/image_encodings.h> 15 #include <eigen3/Eigen/Dense> 20 using Eigen::VectorXf;
21 using Eigen::MatrixXf;
26 void GPNodelet::publish_gp_state()
29 mf_common::Float32Array mean_msg;
30 mean_msg.data = vector<float>(gp_mean_.data(), gp_mean_.data() + gp_mean_.size());
31 gp_mean_pub_.publish(mean_msg);
34 mf_common::Array2D cov_msg;
35 cov_msg.data.resize(size_gp_);
37 for (
int i = 0; i < size_gp_; i++) {
38 cov_msg.data[i].data.resize(size_gp_);
40 for (
int j = 0; j <= i; j++) {
41 cov_msg.data[i].data[j] = gp_cov_(i, j);
42 cov_msg.data[j].data[i] = gp_cov_(i, j);
46 gp_cov_pub_.publish(cov_msg);
50 void GPNodelet::publish_gp_eval()
53 int size_obs = idx_obs_.size();
58 prepare_eval(idx_obs_, gp_mean_, x_obs, y_obs, W);
61 float delta_x = size_wall_x_ / size_img_x_;
62 float delta_y = size_wall_y_ / size_img_y_;
67 for (
unsigned int i = 0; i < size_img_x_; i++) {
68 for (
unsigned int j = 0; j < size_img_y_; j++) {
69 if (changed_pxl_[k]) {
70 out_values_[k] = eval_gp(x, y, x_obs, y_obs, W);
71 changed_pxl_[k] =
false;
82 mf_common::Array2D out_msg;
83 out_msg.data.resize(size_img_x_);
85 for (
int k = 0; k < size_img_x_; k++) {
86 out_msg.data[k].data.resize(size_img_y_);
88 for (
int l = 0; l < size_img_y_; l++) {
89 out_msg.data[k].data[l] = out_values_[k*size_img_y_ + l];
93 gp_eval_pub_.publish(out_msg);
96 sensor_msgs::Image img;
97 img.header.stamp = ros::Time::now();
98 img.height = size_img_x_;
99 img.width = size_img_y_;
100 img.encoding = sensor_msgs::image_encodings::MONO8;
101 img.is_bigendian =
false;
102 img.step = size_img_y_;
103 img.data.resize(size_img_);
105 for (
unsigned int k = 0; k < size_img_; k++) {
106 img.data[k] = 255 * out_values_[k];
109 wall_img_pub_.publish(img);
112 img.header.stamp = ros::Time::now();
113 img.height = size_gp_x_;
114 img.width = size_gp_y_;
115 img.encoding = sensor_msgs::image_encodings::MONO8;
116 img.is_bigendian =
false;
117 img.step = size_gp_y_;
118 img.data.resize(size_gp_);
120 for (
unsigned int k = 0; k < size_gp_; k++) {
121 img.data[k] = (1 - gp_cov_(k, k)*gp_noise_var_) * 255;
124 cov_img_pub_.publish(img);
Declaration of a nodelet for Gaussian Process mapping of an algae wall.