ros2 service call /controller_manager/load_controller std_msgs/msg/Empty {} The passed type is not a service
时间: 2024-11-03 16:17:03 浏览: 14
当你尝试通过`ros2 service call`命令调用一个非服务接口时,确实会遇到错误,因为`load_controller`似乎不是一个标准的服务名称。根据引用[1]中提到的警告信息,这可能表明你正在尝试呼叫的是一个publisher(发布者),而不是service(服务)。
为了正确地调用`/controller_manager/load_controller`服务,你需要确认两个事情:
1. **服务存在**:首先,使用`rosservice list`命令检查该服务是否存在。如果服务不存在,说明你可能输入了错误的服务名,或者服务还未启动。
```bash
rosservice list | grep load_controller
```
2. **服务类型匹配**:确认你使用的消息类型`std_msgs/msg/Empty`与服务期望的消息类型相匹配。你可以使用`rosservice introspect`来查看服务的具体定义:
```bash
rosservice introspect /controller_manager/load_controller
```
如果消息类型不匹配,你需要找到正确的服务消息类型并替换掉`std_msgs/msg/Empty`。
如果你确定服务存在并且消息类型正确,但仍然收到"passed type is not a service"的错误,那可能是命令格式有误,应该这样调用服务:
```bash
ros2 service call /controller_manager/load_controller std_msgs/msg/Empty {}
```
阅读全文