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

コード生成時に、mergeボタンが表示されないことがある #490

Closed yukimeat1999 closed 1 year ago

yukimeat1999 commented 2 years ago

Describe the bug Builderでコンポーネントを作成し、あとで仕様変更する必要があった時、3回目以降のコード生成時に、mergeボタンが表示されない。

To Reproduce Steps to reproduce the behavior:

  1. 新しいプロジェクトを作って、「コード生成」からコンポーネントを作成。(C++を選択)
  2. ソースやヘッダを編集。
  3. Builderでポート等を編集し、「コード生成」。この時「merge」が表示され使える。
  4. 再度、ソースやヘッダを編集。
  5. Builderでポート等を編集し、「コード生成」。この時、「merge」が表示されない。
  6. これ以降は「merge」が表示されない場合が多い。

Reproducibility 5台のWindows10のPCにおいて、15個以上のプロジェクトで30回近く発生。

Expected behavior ソースやヘッダが編集された状態で、コード生成を行うと「merge」が表示される必要がある。

Screenshots or Logs If applicable, add screenshots or logs to help explain your problem.

Environment

Additional context

ga-sakamoto commented 2 years ago

RTCBuilderのマージ機能なのですが,こちらは生成コード中に埋め込んである   というタグを利用して判断を行っております. このため,こちらのタグを修正/削除されてしまいますと,正常にマージ機能が働くなくなってしまいます.

ソースやヘッダを編集された際に,こちらのタグを変更もしくは,削除してしまっておりませんでしょうか?

また,もしも可能であれば,マージ機能が働くなってしまったプロジェクトの内容を拝見させて頂けませんでしょうか?

yukimeat1999 commented 2 years ago

タグがRTCBuilderで自動生成されるコードのどの部分かわかりませんが、生成されたコードの削除や変更はしていません。

プロジェクトはRTミドルウェアサマーキャンプ2022の岡山大学チームが作成したLocalizationです。 https://openrtm.org/openrtm/ja/project/SummerCamp2022_group3

ga-sakamoto commented 2 years ago

ソースファイルなどプロジェクトのご提供ありがとうございました. ご提供頂きましたプロジェクト内のファイルを確認させて頂きました所,RTCBuilderで生成しているタグは残されておりました. また,ご連絡頂きましたプロジェクトを使用して,ポートの追加/削除を行いながら,何度かコード生成を繰り返してみたのですが,こちらの環境では,毎回「merge」ボタンが表示され,ご連絡された現象を再現することができませんでした.

そこで,再度のご確認なのですが,

  1. Builderでポート等を編集し、「コード生成」。この時、「merge」が表示されない。

と書かれていた部分なのですが,「ポート等を編集」につきまして,具体的にどのような編集を行われたか覚えていらっしゃいますでしょうか?

ちなみに,対象ヘッダ/ソースに関係のない部分をRTCBuilder上で変更した場合には,「merge」ボタンは表示されません. 例えば,「基本」タブの「実行周期」を変更した場合ですと,この内容はヘッダ/ソース内ではなく,confファイル内で指定する内容なので,ヘッダ/ソースファイルでは「merge」ボタンは表示されません.

yukimeat1999 commented 2 years ago

ご返信が遅くなり申し訳ございません。

私が行った編集は以下の例のとおりです。

例) ・データポートの新規追加 ・データポート名の変更 ・データポートのデータ型の変更 ・コンフィグレーション・パラメータの新規追加 ・コンフィグレーション・パラメータのデータ型のデフォルト値の変更

これらの編集を同時ではなく、このうち一つを変更したりしました。

n-ando commented 2 years ago

mergeボタンが表示されない場合、Generatedボタンを押すと生成されるコードはどうなりますでしょうか? また、コード生成時に日付のついたバックアップファイルが同時に生成されますが、mergeボタンが出なかった現象が発生したときのバックアップファイルを含めたRTCのファイル一式を送ってもらえないでしょうか?

yukimeat1999 commented 1 year ago

たびたび遅くなってしまい申し訳ございません。

mergeボタンが表示されない場合、Generatedボタンを押すと生成されるコードはどうなりますでしょうか?

この場合,OpenRTMで再設定した状態かつ,.cppファイルのonExecuteなどの部分に記述したコードがすべて削除された状態になります.

また、コード生成時に日付のついたバックアップファイルが同時に生成されますが、mergeボタンが出なかった現象が発生したときのバックアップファイルを含めたRTCのファイル一式を送ってもらえないでしょうか?

Localizationのプロジェクトを新規生成しました. Googleドライブで共有します. リンク: https://drive.google.com/drive/folders/1cMQqcclviRsfflNP9rVvgjVydM9Hp4zj?usp=sharing

このプロジェクトは最初にデータポート>OutPort>omapのデータ型を間違えた状態で生成しコード記述後,データ型を修正して再生成するとmergeが表示されませんでした. このプロジェクトのLocalization_test.cppとLocalization_test.hでmergeが表示されませんでした. ただし,メモできてませんがこれ以外のモノでmergeが表示されてました.

データポート>OutPort>omapのデータ型について 1回目) 誤:RTC::TimedPose2D 2回目) 正:RTC::TimedShortSeq

build/ Localization_test.slnをVS2019で起動し,ソリューション'Localization_test'にある, Localization_test>Header Files と Localization_testComp>Header Filesに include/Localization_test/random.cpp include/Localization_test/slam.cpp この二つのファイルをドラッグアンドドロップして追加.

同じくLocalization_test>Source Files と Localization_testComp>Source Filesに src/random.cpp src/slam.cpp この二つのファイルをドラッグアンドドロップして追加.

Localization_test.hは編集せず,Localization_test.cppを編集しました. Localization_test.cppは, 一番上のinclude直下に追加

// -- C++ -- // /*!

  • @file Localization_test.cpp
  • @brief ModuleDescription
  • */ //

include "Localization_test.h"

//slam.h

include "slam.h"

//extern double MAPRATE; //extern int T2, GANM;

onActivatedとonExecuteにコードを記述しました.

ga-sakamoto commented 1 year ago

ご連絡が遅くなってしまい,たいへん申し訳ございません. また,操作内容の詳細なご説明ありがとうございました.

ご連絡を頂きました内容を基に,こちらでも動作確認を行わせて頂きました. 結論といたしましては,上記のような修正を行った場合には,Localization_test.cppでは「merge」ボタンは表示されません. 理由といたしましては,変更したデータポート>OutPort>omapのデータ型が元々Localization_test.cppには記述されていないためです.

もう少し具体的にご説明しますと,「merge」ボタンが表示される条件といたしましては,以下のようになります. 生成コードの中に埋め込んでいる

// <rtc-template block="XXXXX">
// </rtc-template>

ブロック内の記述が変更となり, かつ上記のブロック以外の部分でコードの変更がある場合 (なお,rtc-templateブロック以外の中身はRTCBuilderが自動生成します)

そして,今回の例では,Localization_test.cppにつきましては,上記のrtc-templateブロック以外の部分は変更されているのですが, (元々rtc-templateブロックの中にデータポートの型が記述されていませんので,)データポートの型を変更してもrtc-templateブロック内容は変化しません. このため「merge」ボタンが表示されません. (この場合,修正したコードを残したい場合には,「Original」ボタンを選択して頂く事となります)

逆に,Localization_test.cppのrtc-templateブロックに記載されている内容(例えば「ベンダ名」など)を変更して,「コード生成」を実行すると,「merge」ボタンは表示されます.

よろしくお願いいたします.

yukimeat1999 commented 1 year ago

ありがとうございます.

バグではなく,私の操作に問題があったようですね. 解決しました. お手数をおかけしました.

n-ando commented 1 year ago

では、クローズします。