void interpolateBetweenColors(std_msgs::ColorRGBA& color, const std_msgs::ColorRGBA& colorForLowerValue,
                              const std_msgs::ColorRGBA& colorForUpperValue, const double value,
                              const double lowerValueBound, const double upperValueBound)
{
  setColorChannelFromValue(color.r, value, lowerValueBound, upperValueBound, false, colorForLowerValue.r, colorForUpperValue.r);
  setColorChannelFromValue(color.g, value, lowerValueBound, upperValueBound, false, colorForLowerValue.g, colorForUpperValue.g);
  setColorChannelFromValue(color.b, value, lowerValueBound, upperValueBound, false, colorForLowerValue.b, colorForUpperValue.b);
}
std_msgs::ColorRGBA interpolateBetweenColors(
    const float value,
    const float lowerValueBound,
    const float upperValueBound,
    const std_msgs::ColorRGBA& colorForLowerValue,
    const std_msgs::ColorRGBA& colorForUpperValue)
{
  std_msgs::ColorRGBA color;
  color.a = 1.0;
  setColorChannelFromValue(
        color.r, value, lowerValueBound, upperValueBound,
        false, colorForLowerValue.r, colorForUpperValue.r);
  setColorChannelFromValue(
        color.g, value, lowerValueBound, upperValueBound,
        false, colorForLowerValue.g, colorForUpperValue.g);
  setColorChannelFromValue(
        color.b, value, lowerValueBound, upperValueBound,
        false, colorForLowerValue.b, colorForUpperValue.b);
  return color;
}