CyberRT通信模式问题排查与强制启用方法

我这里使用的 cyber.pb.conf 这个默认的配置文件。

  1. 撤销其注释,修改为本机地址
transport_conf {
    shm_conf {
        # "multicast" "condition"
        notifier_type: "condition"
        # "posix" "xsi"
        shm_type: "xsi"
        shm_locator {
            # ip: "239.255.0.100"
            ip: "127.0.0.1"
            port: 8888
        }
    }
    participant_attr {
        lease_duration: 12
        announcement_period: 3
        domain_id_gain: 200
        port_base: 10000
    }
    communication_mode {
        same_proc: INTRA
        diff_proc: SHM
        diff_host: RTPS
    }
    resource_limit {
        max_history_depth: 1000
    }
}
  1. 不知道是不是我们缺少什么config文件,我这里的排查后发现,通信会在 transmit 中 进入 Hybrid 模式。这个模式的说法是会自动选择通信方式,但是其类型指针却不会变。所以当自动选择 Hybird –> shm 后,它不会进入 Enable(),也就是说它调度了个寂寞,最后还是没有发送数据。代码位置在 cyber/transport/transport.h;
  RETURN_VAL_IF_NULL(transmitter, nullptr);
  if (mode != OptionalMode::HYBRID) {
    std::cout << " ???? " << std::endl;
    transmitter->Enable();
  }
  std::cout << " !!!! " << std::endl;
  # 强制启用
  transmitter->Enable();

  RETURN_VAL_IF_NULL(receiver, nullptr);
  if (mode != OptionalMode::HYBRID) {
    receiver->Enable();
  }
  # 强制启用
  receiver->Enable();
  1. 强制启用后,代码能够通信,有接受打印,证明这两者没有问题。但我使用 相关工具,依旧没有反应。因此我怀疑我们应该是少了什么配置。类似于全局设置一样的东西,规定了一些基础的参数。
./bin/cyber/tools/cyber_channel list
The number of channels is:  0
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共6条

请登录后发表评论

    暂无评论内容