Closed
Description
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