Skip to content

Error when trying to create a custom service #441

Closed
@fabmene

Description

@fabmene

Bug report

Required Info:

  • Operating System:
    • Ubuntu 18.04
  • Installation type:
    • Binaries
  • Version or commit hash:
    • Eloquent
  • DDS implementation:
    • CycloneDDS
  • Client library (if applicable):
    • rclcpp

Steps to reproduce issue

package.xml

<?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>my_pkg</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="[email protected]">john doe</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>
  <depend>rmw_cyclonedds_cpp</depend>

  <!-- required for msg/srv gen -->
  <member_of_group>rosidl_interface_packages</member_of_group>

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

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(my_pkg)

# 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(rosidl_default_generators REQUIRED)

rosidl_generate_interfaces(${PROJECT_NAME}_srv
  "srv/MySrv.srv"
)

add_executable(my_node
  src/my_node.cpp)

rosidl_target_interfaces(my_node
  ${PROJECT_NAME}_srv "rosidl_typesupport_cpp")

ament_target_dependencies(my_node rclcpp)

install(TARGETS
  my_node
  ARCHIVE DESTINATION lib/${PROJECT_NAME}
  RUNTIME DESTINATION lib/${PROJECT_NAME}
  LIBRARY DESTINATION lib
)

ament_package()

srv/MySrv.srv

bool foo
---
int64 bar

src/my_node.cpp

#include <rclcpp/rclcpp.hpp>
#include "my_pkg/srv/my_srv.hpp"

class MyNode : public rclcpp ::Node
{

public:
  MyNode(const rclcpp::NodeOptions& options)
      : rclcpp::Node("my_node", rclcpp::NodeOptions(options)
                                    .start_parameter_event_publisher(false)
                                    .start_parameter_services(false))
  {
    mSrv = this->create_service<my_pkg::srv::MySrv>(
        "/foo", std::bind(&MyNode::execEvalCB, this,
                                          std::placeholders::_1, std::placeholders::_2));
  }

  void execEvalCB(const my_pkg::srv::MySrv::Request::SharedPtr pReq,
                                       const my_pkg::srv::MySrv::Response::SharedPtr pRes){}


  rclcpp::Service<my_pkg::srv::MySrv>::SharedPtr mSrv;
};

int main(int argc, char** argv)
{
  rclcpp::init(argc, argv);

  rclcpp::Node::SharedPtr node = std::make_shared<MyNode>(rclcpp::NodeOptions());
  rclcpp::spin(node);

  return 0;
}

Expected behavior

Service is offered

Actual behavior

Error thrown:

Failed to find library 'my_pkg__rosidl_typesupport_introspection_cpp'

>>> [rcutils|error_handling.c:107] rcutils_set_error_state()
This error state is being overwritten:

  'service type support not from this implementation, at /tmp/binarydeb/ros-eloquent-rmw-cyclonedds-cpp-0.4.4/src/rmw_node.cpp:2302'

with this new error message:

  'type_support is null, at /tmp/binarydeb/ros-eloquent-rmw-cyclonedds-cpp-0.4.4/src/rmw_node.cpp:2320'

rcutils_reset_error() should be called after error handling to avoid this.
<<<
terminate called after throwing an instance of 'rclcpp::exceptions::RCLError'
  what():  could not create service: type_support is null, at /tmp/binarydeb/ros-eloquent-rmw-cyclonedds-cpp-0.4.4/src/rmw_node.cpp:2320, at /tmp/binarydeb/ros-eloquent-rcl-0.8.4/src/rcl/service.c:179

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions