15 void init(XmlRpc::XmlRpcValue& config)
17 ROS_ASSERT(config.getType() == XmlRpc::XmlRpcValue::TypeArray);
18 for (
int i = 0; i < config.size(); i++)
20 ROS_ASSERT(config[i].getType() == XmlRpc::XmlRpcValue::TypeArray);
21 ROS_ASSERT(config[i].size() == 2);
22 ROS_ASSERT(config[i][0].getType() == XmlRpc::XmlRpcValue::TypeDouble ||
23 config[i][0].getType() == XmlRpc::XmlRpcValue::TypeInt);
24 ROS_ASSERT(config[i][1].getType() == XmlRpc::XmlRpcValue::TypeDouble ||
25 config[i][1].getType() == XmlRpc::XmlRpcValue::TypeInt);
26 if (!input_vector_.empty())
27 if ((
double)config[i][0] < input_vector_.back())
29 ROS_ERROR(
"Please sort the point's abscissa from smallest to largest. %lf < %lf", (
double)config[i][0],
30 input_vector_.back());
33 input_vector_.push_back(config[i][0]);
34 output_vector_.push_back(config[i][1]);
39 if (input >= input_vector_.back())
40 return output_vector_.back();
41 else if (input <= input_vector_.front())
42 return output_vector_.front();
43 for (
size_t i = 0; i < input_vector_.size(); i++)
45 if (input >= input_vector_[i] && input <= input_vector_[i + 1])
46 return output_vector_[i] +
47 ((output_vector_[i + 1] - output_vector_[i]) / (input_vector_[i + 1] - input_vector_[i])) *
48 (input - input_vector_[i]);
50 ROS_ERROR(
"The point's abscissa aren't sorted from smallest to largest.");