鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    我在使用ros2-foxy服务时,明明有服务节点,但是客户端却无法链接,手动call也无法链接。

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    service foxy
    4
    11
    1.3k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 哦哦哦哦
      哦哦哦
      最后由 编辑

      我定义了一个节点,里面有一个启动cartographer的service,启动节点之后,有时候能通过服务端发送信息给服务端来启动cartographer,有时候却启动不了,启动客户端之后客户端一直等待服务端启动,但是服务端已经启动了,打印service list也显示有服务/carto_mode1.png手动call /carto_mode也说服务端未启动 2.png 明明已经启动了,这个情况困扰我很久了,请问有人知道是怎么回事吗,谢谢!

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @哦哦哦
        最后由 编辑

        @哦哦哦 在 我在使用ros2-foxy服务时,明明有服务节点,但是客户端却无法链接,手动call也无法链接。 中说:

        /carto_mode

        不知道你的服务内部是如何实现的,如果启动后没有spin即使可以看到服务,但是依然无法通信,具体要看代码了。

        你的命令行和客户端都显示服务未启动,这可以排除你的客户端代码问题。

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        哦哦哦哦 1 条回复 最后回复 回复 引用 0
        • 哦哦哦哦
          哦哦哦 @小鱼
          最后由 编辑

          @小鱼 我是创建了一个节点,这个节点有三个服务,一个用于启动nav2,一个用于启动cartographer,还有一个服务用于关闭nav和cartographer,目前是这样,我先用启动cartographer的服务来启动cartographer,然后用关闭的服务关闭它,关闭之后有时能再次启动,有时就启动不了了,前面说的那种情况。

          小鱼小 1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @哦哦哦
            最后由 小鱼 编辑

            @哦哦哦 你是通过什么启动的nav2,子进程吗?

            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            哦哦哦哦 1 条回复 最后回复 回复 引用 0
            • 哦哦哦哦
              哦哦哦 @小鱼
              最后由 编辑

              @小鱼 我在服务端用的Popen启动的launch文件,结束通过客户端发送请求,服务端收到请求后,通过查找launch启动的节点的pid来kill的

              1 条回复 最后回复 回复 引用 0
              • 小鱼小
                小鱼 技术大佬
                最后由 编辑

                @哦哦哦 popen机制其实有很大问题,你启动了子进程,再用pid杀可能是杀不死的(该进程极有可能变成僵尸进程),在ros2中其实有更好的方案,生命周期节点(详细见动手学ros2中介绍)

                新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                哦哦哦哦 1 条回复 最后回复 回复 引用 0
                • 哦哦哦哦
                  哦哦哦 @小鱼
                  最后由 编辑

                  @小鱼 会不会是一个节点不能同时提供多个服务,多个服务同时运行会不会导致节点卡死,或者锁死之类的问题,导致我这种情况?

                  小鱼小 1 条回复 最后回复 回复 引用 0
                  • 小鱼小
                    小鱼 技术大佬 @哦哦哦
                    最后由 编辑

                    @哦哦哦 同一个节点肯定是可以提供多个服务的,但是默认情况服务的对请求处理是顺序的,不能并行,如果其中某一个处理堵塞,就会导致后续的无法处理也进不来,解决方法可以使用回调组(详见动手学ROS2教程),不过最好不要堵塞.

                    新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                    哦哦哦哦 1 条回复 最后回复 回复 引用 0
                    • 哦哦哦哦
                      哦哦哦 @小鱼
                      最后由 编辑

                      @小鱼 好的 谢谢 我去调试一下看看

                      8468634288 1 条回复 最后回复 回复 引用 0
                      • 8468634288
                        大魔王&木头人 @哦哦哦
                        最后由 编辑

                        @哦哦哦 老哥,你的问题解决了吗,我也遇到了类似的问题

                        10195315261 1 条回复 最后回复 回复 引用 0
                        • 10195315261
                          Extraordinaryº @846863428
                          最后由 编辑

                          @846863428 可以ros2 service list -t 查看参数接口是否正确,如果是empty的话,不用加传参,有参数就必须要传参的,如果是多个node同时调用同意给service,可以加callback_group来排队处理

                          1 条回复 最后回复 回复 引用 0
                          • 第一个帖子
                            最后一个帖子
                          皖ICP备16016415号-7
                          Powered by NodeBB | 鱼香ROS