Robotics StackExchange | Archived questions

Service not being created when passing pointer as parameter.

Hi all

I'm trying to parameterize some services I'm creating. In such, I'm passing the services I want to create as a parameter. I'm running into an issue where the service isn't being created when the service is being set as a parameter. As a test, I created one using a member variable and one with a parameter, and the parametrized service was not created

void SomeService::createServices(std::string name, 
    rclcpp::Service<interface::srv::Reader>::SharedPtr reader, 
    rclcpp::Service<interface::srv::Writer>::SharedPtr writer)
{        
    ...
    ...
    reader = this->create_service<interface::srv::Reader>(
        readerTopic,         
        readerCallBack,
        rmw_qos_profile_services_default,
        callbackGroup);

    this->Writer1_ = this->create_service<interface::srv::Writer>(
        writerTopic,
        writerCallBack,
        rmw_qos_profile_services_default,
        callbackGroup)
}

some where else:

//some where else
this->init(names[1], this->Reader1_, this->Writer1_);

I have the member varables in my headers as such:

rclcpp::Service<interface::srv::Reader>::SharedPtr Reader1_;
rclcpp::Service<interface::srv::Reader>::SharedPtr Reader2_;

rclcpp::Service<interface::srv::Writer>::SharedPtr Writer1_;
rclcpp::Service<interface::srv::Writer>::SharedPtr Writer2_;

I don't see the service in the command line:

ros2 node info /zach/SomeService
    Service Servers:
    /dev/name1/Writer: interfaces/srv/Writer
    /zach/ChildIsInitNameSomeService: interfaces/srv/ChildInit
    /zach/SomeService/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /zach/SomeService/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /zach/SomeService/get_parameters: rcl_interfaces/srv/GetParameters
    /zach/SomeService/list_parameters: rcl_interfaces/srv/ListParameters
    /zach/SomeService/set_parameters: rcl_interfaces/srv/SetParameters
    /zach/SomeService/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically

I think it's how I'm passing the shared pointers.

Thanks for any help :)

Zach

Asked by zsnafu on 2022-09-18 14:31:13 UTC

Comments

Answers

Oh man. I'm dumb. I've been looking at the computer screen too long.

I needed to change the parameters to pointers and point to the pointer members.

Asked by zsnafu on 2022-09-18 16:03:38 UTC

Comments