OpenRTM / OpenRTP-aist

OpenRTP-aist: RT-Middleware and OMG RTC based component and system development tools implemented by AIST
Other
1 stars 6 forks source link

RT System Editorでコネクタが表示されない場合がある #472

Open Nobu19800 opened 2 years ago

Nobu19800 commented 2 years ago

Describe the bug 以下のConsoleInとConsoleOutはデータポートを接続しているが、コネクタが表示されない場合がある。

image

To Reproduce Steps to reproduce the behavior:

  1. OpenRTM-aistをomniORBではなくTAOでビルドする(https://www.openrtm.org/openrtm/ja/node/7131)
  2. 以下のrtc.confでConsoleIn、ConsoleOutを起動する
    
    logger.enable: YES
    logger.log_level: DEBUG
    #logger.file_name: stdout

corba.args: -ORBEndpoint iiop://: -ORBEndpoint diop://: -ORBSvcConf C:/workspace/openrtm/buildtao/install/2.0.0/ext/tao_diop/svc.conf

4. RT System EditorでConsoleInとConsoleOutのデータポートを接続する
5. See error

**Reproducibility**
100%

**Expected behavior**
コネクタが表示されてほしい。

**Screenshots or Logs**

**Environment**
 - OS: Windows 10
 - OpenRTM-aist master branch
 - OpenRTP 1.2

**Additional context**
RT System Editorでどのようにしてコネクタを表示するか、コネクタをどのポートから伸ばすかという判定をしているかは不明だが、PythonとomniORBで以下のようにネームサーバーから取得したオブジェクトリファレンスとコネクタから取得したオブジェクトリファレンスを`_is_equivalent`関数で比較したところ、特に問題なく比較できているようなのでRTCの通信やリファレンスに異常があるという事ではないようです。

```Python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# -*- Python -*-

import sys

import OpenRTM_aist
import OpenRTM_aist.CORBA_RTCUtil
from omniORB import CORBA

def main():
    mgr = OpenRTM_aist.Manager.init(sys.argv)
    mgr.activateManager()
    mgr.runManager(True)

    port_in_var = OpenRTM_aist.CORBA_RTCUtil.get_port_by_url(
        "rtcname://localhost:2809/*/ConsoleOut0.in")

    port_out_var = OpenRTM_aist.CORBA_RTCUtil.get_port_by_url(
        "rtcname://localhost:2809/*/ConsoleIn0.out")

    prof = port_out_var.get_connector_profiles()[0]
    ports = prof.ports
    print(ports[0].get_port_profile())
    print(ports[1].get_port_profile())

    print(port_out_var._is_equivalent(ports[0]))
    print(port_out_var._is_equivalent(ports[1]))
    print(port_in_var._is_equivalent(ports[0]))
    print(port_in_var._is_equivalent(ports[1]))

    prof = port_in_var.get_connector_profiles()[0]
    ports = prof.ports
    print(ports[0].get_port_profile())
    print(ports[1].get_port_profile())

    print(port_out_var._is_equivalent(ports[0]))
    print(port_out_var._is_equivalent(ports[1]))
    print(port_in_var._is_equivalent(ports[0]))
    print(port_in_var._is_equivalent(ports[1]))

    mgr.shutdown()

if __name__ == "__main__":
    main()