message: pickle function for labels front, behind, right
diff: @@ -190,7 +190,16 @@ void python_ltl(py::module m) {
  py::class_<RightOfLabelFunction, BaseLabelFunction,
  std::shared_ptr<RightOfLabelFunction>>(m, "RightOfLabelFunction")
  - .def(py::init<const std::string&>());
  + .def(py::init<const std::string&>())
  + .def(py::pickle(
  + [](const RightOfLabelFunction& b) {
  + return py::make_tuple(b.GetLabelStr());
  + },
  + [](py::tuple t) {
  + if (t.size() != 1)
  + throw std::runtime_error("Invalid label evaluator state!");
  + return new RightOfLabelFunction(t[0].cast<std::string>());
  + }));
  py::class_<LeftOfLabelFunction, BaseLabelFunction,
  std::shared_ptr<LeftOfLabelFunction>>(m, "LeftOfLabelFunction")
  @@ -207,11 +216,29 @@ void python_ltl(py::module m) {
  py::class_<BehindOfLabelFunction, BaseLabelFunction,
  std::shared_ptr<BehindOfLabelFunction>>(m, "BehindOfLabelFunction")
  - .def(py::init<const std::string&>());
  + .def(py::init<const std::string&>())
  + .def(py::pickle(
  + [](const BehindOfLabelFunction& b) {
  + return py::make_tuple(b.GetLabelStr());
  + },
  + [](py::tuple t) {
  + if (t.size() != 1)
  + throw std::runtime_error("Invalid label evaluator state!");
  + return new BehindOfLabelFunction(t[0].cast<std::string>());
  + }));
  py::class_<FrontOfLabelFunction, BaseLabelFunction,
  std::shared_ptr<FrontOfLabelFunction>>(m, "FrontOfLabelFunction")
  - .def(py::init<const std::string&>());
  + .def(py::init<const std::string&>())
  + .def(py::pickle(
  + [](const FrontOfLabelFunction& b) {
  + return py::make_tuple(b.GetLabelStr());
  + },
  + [](py::tuple t) {
  + if (t.size() != 1)
  + throw std::runtime_error("Invalid label evaluator state!");
  + return new FrontOfLabelFunction(t[0].cast<std::string>());
  + }));
  py::class_<AgentBeyondPointLabelFunction, BaseLabelFunction,
  std::shared_ptr<AgentBeyondPointLabelFunction>>(
  