transform_tree.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #define BOOST_TEST_DYN_LINK
  2. #include "core/transform_tree.h"
  3. #include "core/basic_obj_types.hpp"
  4. #include "utility/debug_utility.hpp"
  5. #include <boost/test/unit_test.hpp>
  6. #include <boost/asio/awaitable.hpp>
  7. #include <boost/asio/co_spawn.hpp>
  8. #include <boost/asio/detached.hpp>
  9. #include <nlohmann/json.hpp>
  10. #include <fstream>
  11. using namespace nlohmann;
  12. using namespace sophiar;
  13. using boost::asio::awaitable;
  14. using boost::asio::co_spawn;
  15. using boost::asio::detached;
  16. BOOST_AUTO_TEST_CASE(test_transform_tree) {
  17. spdlog::set_level(spdlog::level::trace);
  18. REGISTER_TYPE(transform_obj_watcher);
  19. REGISTER_TYPE(transform_tree);
  20. std::ifstream config_file("data/transform_tree_config.json");
  21. BOOST_TEST(config_file.is_open());
  22. using namespace std::chrono_literals;
  23. auto c_in_b_index = global_sophiar_manager.register_global_obj<transform_obj>("C_in_B");
  24. auto worker_a = make_interval_coro_worker(global_context, 1s, [=, cur_y = int(0)]() mutable -> awaitable<bool> {
  25. auto new_trans = Eigen::Isometry3d(Eigen::Translation3d(0, ++cur_y, 0));
  26. UPDATE_GLOBAL_OBJ_VALUE(transform_obj, c_in_b_index, std::move(new_trans));
  27. co_return true;
  28. });
  29. worker_a->run();
  30. auto d_in_root_index = global_sophiar_manager.register_global_obj<transform_obj>("D_in_Root");
  31. auto worker_b = make_interval_coro_worker(global_context, 2s, [=, cur_z = int(0)]() mutable -> awaitable<bool> {
  32. auto new_trans = Eigen::Isometry3d(Eigen::Translation3d(0, 0, --cur_z));
  33. UPDATE_GLOBAL_OBJ_VALUE(transform_obj, d_in_root_index, std::move(new_trans));
  34. co_return true;
  35. });
  36. worker_b->run();
  37. global_sophiar_manager.load_config_and_start(nlohmann::json::parse(config_file));
  38. global_context.run();
  39. }