Custom Action Interface not detected when compiling

Hi,

Sorry for taking up your time, I’ve really tried solving this problem but couldn’t. Currently my custom action interface is not being detected when compiling and gives this error:

I’ve tried rm -rf ./build ./install ./log and recompiled the actions_quiz_msg package, which has compiled succesfully. I’ve typed ros2 interface list to find that the interface is there, and checked that ros2 interface show actions_quiz_msg/action/Distance outputs the correct result! Good!

I must be missing something small here but can you help check my codes?

actions_quiz_msg package, CMake and XML:

cmake_minimum_required(VERSION 3.8)
project(actions_quiz_msg)

# Default to C99
if(NOT CMAKE_C_STANDARD)
  set(CMAKE_C_STANDARD 99)
endif()

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(action_msgs REQUIRED)
find_package(rosidl_default_generators REQUIRED)

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  ament_lint_auto_find_test_dependencies()
endif()

rosidl_generate_interfaces(${PROJECT_NAME}
  "action/Distance.action"
  DEPENDENCIES action_msgs
)

ament_package()
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>actions_quiz_msg</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="user@todo.todo">user</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <depend>rclcpp</depend>
  <depend>action_msgs</depend>
  <depend>rosidl_default_generators</depend>
  
  <member_of_group>rosidl_interface_packages</member_of_group>

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

actions_quiz package, CMake and XML:

cmake_minimum_required(VERSION 3.8)
project(actions_quiz)

# Default to C99
if(NOT CMAKE_C_STANDARD)
  set(CMAKE_C_STANDARD 99)
endif()

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclcpp_action REQUIRED)
find_package(nav_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(actions_quiz_msg REQUIRED)

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  ament_lint_auto_find_test_dependencies()
endif()

add_executable(actions_server_node src/actions_quiz_server.cpp)
ament_target_dependencies(actions_server_node rclcpp rclcpp_action geometry_msgs nav_msgs actions_quiz_msg)

add_executable(actions_client_node src/actions_quiz_client.cpp)
ament_target_dependencies(actions_client_node rclcpp rclcpp_action actions_quiz_msg)

install(TARGETS
   actions_server_node
   actions_client_node
   DESTINATION lib/${PROJECT_NAME}
 )

install(DIRECTORY
  launch
  DESTINATION share/${PROJECT_NAME}/
)

ament_package()

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>actions_quiz</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="user@todo.todo">user</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <depend>rclcpp</depend>
  <depend>rclcpp_action</depend>
  <depend>nav_msgs</depend>
  <depend>geometry_msgs</depend>
  <depend>actions_quiz_msg</depend>

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

Headers in main cpp server file:

#include "actions_quiz_msg/action/Distance.hpp"
#include "geometry_msgs/msg/twist.hpp"
#include "nav_msgs/msg/odometry.hpp"
#include "rclcpp/rclcpp.hpp"
#include "rclcpp_action/rclcpp_action.hpp"

#include <chrono>
#include <memory>
#include <thread>

Hi,

Nevermind, it seems I found the problem to be the include section at the top.

Instead of

#include "actions_quiz_msg/action/Distance.hpp"

it should be camel-case

#include "actions_quiz_msg/action/distance.hpp"
1 Like