diff --git a/.github/workflows/build_agent.yml b/.github/workflows/build_agent.yml index 7bd38afd..958775e3 100755 --- a/.github/workflows/build_agent.yml +++ b/.github/workflows/build_agent.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - ros_distribution: [ foxy, galactic ] + ros_distribution: [ galactic ] runs-on: rpi-ros2-${{ matrix.ros_distribution }} steps: # - uses: ros-tooling/setup-ros@0.2.1 @@ -23,7 +23,7 @@ jobs: with: path: ros_ws/src/micro_ros_renesas_testbench submodules: recursive - ref: ${{ matrix.ros_distribution }} + ref: feature/agent_API token: ${{ secrets.PRIVATE_KEY }} - name: Download dependencies run: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 609ae0ea..850ed956 100755 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - ros_distribution: [ foxy, galactic ] + ros_distribution: [ galactic ] runs-on: rpi-ros2-${{ matrix.ros_distribution }} steps: # - uses: ros-tooling/setup-ros@0.2.1 @@ -27,7 +27,7 @@ jobs: with: path: ros_ws/src/micro_ros_renesas_testbench submodules: recursive - ref: ${{ matrix.ros_distribution }} + ref: feature/agent_API token: ${{ secrets.PRIVATE_KEY }} - name: Download dependencies run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index 8692552d..a46659d6 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,12 +26,20 @@ if(BUILD_TESTING) find_package(fastrtps REQUIRED) find_package(fastrtps_cmake_module REQUIRED) find_package(microxrcedds_agent REQUIRED) + find_package(micro_ros_agent REQUIRED) find_package(rclcpp REQUIRED) find_package(rmw REQUIRED) find_package(std_msgs REQUIRED) find_package(sensor_msgs REQUIRED) find_package(example_interfaces REQUIRED) + find_package(rosidl_typesupport_fastrtps_cpp REQUIRED) + find_package(rosidl_runtime_cpp REQUIRED) + find_package(rosidl_typesupport_cpp REQUIRED) + find_package(rmw_dds_common REQUIRED) + find_package(rmw_fastrtps_shared_cpp REQUIRED) + find_package(micro_ros_msgs REQUIRED) + # ament_lint_auto_find_test_dependencies() ament_add_gtest(${PROJECT_NAME}_test @@ -40,17 +48,20 @@ if(BUILD_TESTING) string(TOUPPER $ENV{ROS_DISTRO} ROS_DISTRO) target_compile_options(${PROJECT_NAME}_test PRIVATE -DROS_DISTRO_${ROS_DISTRO}) - target_include_directories(${PROJECT_NAME}_test PRIVATE include src test) + target_include_directories(${PROJECT_NAME}_test PRIVATE include src test micro_ros_agent_INCLUDE_DIR) target_link_libraries(${PROJECT_NAME}_test fastcdr fastrtps - microxrcedds_agent) + microxrcedds_agent + micro_ros_agent + ) ament_target_dependencies(${PROJECT_NAME}_test fastcdr fastrtps microxrcedds_agent + micro_ros_agent rclcpp rmw std_msgs diff --git a/package.xml b/package.xml index b7383d5d..89e3257d 100755 --- a/package.xml +++ b/package.xml @@ -19,6 +19,7 @@ example_interfaces microxrcedds_agent + micro_ros_agent ament_cmake diff --git a/requirements.repos b/requirements.repos index d55eef28..2501befb 100644 --- a/requirements.repos +++ b/requirements.repos @@ -7,7 +7,7 @@ repositories: micro-ROS-Agent: type: git url: https://github.com/micro-ROS/micro-ROS-Agent.git - version: galactic + version: feature/stop_agent Micro-XRCE-DDS-Agent: type: git url: https://github.com/eProsima/Micro-XRCE-DDS-Agent.git diff --git a/test/micro_ros_renesas_testbench/test.hpp b/test/micro_ros_renesas_testbench/test.hpp index bdb3b1e9..dc04d734 100644 --- a/test/micro_ros_renesas_testbench/test.hpp +++ b/test/micro_ros_renesas_testbench/test.hpp @@ -109,7 +109,7 @@ class HardwareTestBase : public ::testing::Test // Set domain id rcl_allocator_t allocator = rcl_get_default_allocator(); - rcl_init_options_t init_options = rcl_get_zero_initialized_init_options(); + init_options = rcl_get_zero_initialized_init_options(); ASSERT_EQ(rcl_init_options_init(&init_options, allocator), RCL_RET_OK); rmw_init_options_t* rmw_options = rcl_init_options_get_rmw_init_options(&init_options); @@ -126,6 +126,7 @@ class HardwareTestBase : public ::testing::Test void TearDown() override { agent->stop(); rclcpp::shutdown(); + (void) rcl_init_options_fini(&init_options); } bool checkConnection(){ @@ -204,6 +205,7 @@ class HardwareTestBase : public ::testing::Test std::shared_ptr agent; std::shared_ptr node; rclcpp::InitOptions options; + rcl_init_options_t init_options; std::string cwd; std::string project_name; diff --git a/test/micro_ros_renesas_testbench/test_agent.hpp b/test/micro_ros_renesas_testbench/test_agent.hpp index bee9364f..23d9c70a 100644 --- a/test/micro_ros_renesas_testbench/test_agent.hpp +++ b/test/micro_ros_renesas_testbench/test_agent.hpp @@ -27,6 +27,8 @@ #include #include +#include + class TestAgent { public: @@ -73,61 +75,77 @@ class TestAgent static std::string getIPAddress(); private: - std::shared_ptr agent_thread_; - uint16_t port_; + uros::agent::Agent& micro_ros_agent; + std::vector agent_args; + std::string port_; std::string dev_; - std::string command_; + std::string verbosity_; }; TestAgent::TestAgent(uint16_t port, uint8_t verbosity = 6) +: micro_ros_agent(micro_ros_agent.getInstance()) { - port_ = port; - command_ = "ros2 run micro_ros_agent micro_ros_agent udp4 --port " + std::to_string(port_) + " -v" + std::to_string(verbosity); + verbosity_ = "-v" + std::to_string(verbosity); + port_ = std::to_string(port); + + agent_args.push_back(""); + agent_args.push_back("udp4"); + agent_args.push_back("--port"); + agent_args.push_back(port_.c_str()); + agent_args.push_back(verbosity_.c_str()); } TestAgent::TestAgent(std::string dev, uint8_t verbosity = 6) +: micro_ros_agent(micro_ros_agent.getInstance()) { + verbosity_ = "-v" + std::to_string(verbosity); dev_ = dev; - command_ = "ros2 run micro_ros_agent micro_ros_agent serial --dev " + dev_ + " -v" + std::to_string(verbosity); + + agent_args.push_back(""); + agent_args.push_back("serial"); + agent_args.push_back("--dev"); + agent_args.push_back(dev_.c_str()); + agent_args.push_back(verbosity_.c_str()); } TestAgent::TestAgent(Transport transport, std::string args, uint8_t verbosity = 6) +: micro_ros_agent(micro_ros_agent.getInstance()) { - std::string transport_type; - + verbosity_ = "-v" + std::to_string(verbosity); + agent_args.push_back(""); + switch (transport) { case Transport::UDP_THREADX_TRANSPORT: case Transport::UDP_FREERTOS_TRANSPORT: - transport_type = "udp4"; + port_ = args; + agent_args.push_back("udp4"); + agent_args.push_back("--port"); + agent_args.push_back(port_.c_str()); break; case Transport::SERIAL_TRANSPORT: case Transport::USB_TRANSPORT: - transport_type = "serial"; + dev_ = args; + agent_args.push_back("serial"); + agent_args.push_back("--dev"); + agent_args.push_back(dev_.c_str()); break; default: break; } - command_ = "ros2 run micro_ros_agent micro_ros_agent " + transport_type + " " + args + " -v" + std::to_string(verbosity); + agent_args.push_back(verbosity_.c_str()); } void TestAgent::start() { - stop(); - agent_thread_.reset(new std::thread( - [&]() -> void { - system(command_.c_str()); - } - )); + micro_ros_agent.create(agent_args.size(), const_cast (agent_args.data())); + agent_args.clear(); } void TestAgent::stop() { - system("pkill micro_ros_agent"); - if(agent_thread_) { - agent_thread_->join(); - } + micro_ros_agent.stop(); } std::string TestAgent::getIPAddress(){