Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ベースノードのsub_registerについて #22

Open
yuzoo0226 opened this issue Feb 16, 2023 · 4 comments
Open

ベースノードのsub_registerについて #22

yuzoo0226 opened this issue Feb 16, 2023 · 4 comments

Comments

@yuzoo0226
Copy link

sub_registerの説明書きが少し不足しているように感じました.

第一引数となっているnameと対応させて,事前に
self.{name} = Int64()
のように定義しておかなければならないことがわかりにくかったです.

少し説明書きに追記をお願いしたいです.

@haganelego
Copy link
Contributor

これよく分からないので,サンプルコード載せてください

@yuzoo0226
Copy link
Author

yuzoo0226 commented Feb 16, 2023

self.sub_register("temp", "topic/name", queue_size=10, callback_func=self.cb)

と書いたとき,以下のようなエラーが出ます.

Traceback (most recent call last):
  File "/home/yuga/hsrc_project/ros_ws/src/tam_speech_recog/speech_recog/script/speech_recognition_server.py", line 339, in <module>
    srs = SpeechRecogServer()
  File "/home/yuga/hsrc_project/ros_ws/src/tam_speech_recog/speech_recog/script/speech_recognition_server.py", line 44, in __init__
    self.sub_register("temp", "topic/name", queue_size=10, callback_func=self.run)
  File "/home/yuga/hsrc_project/tamlib/src/tamlib/node_template/base.py", line 112, in sub_register
    Subscriber.register(self, name, topic, queue_size, callback_func, execute_func)
  File "/home/yuga/hsrc_project/tamlib/src/tamlib/rosutils/subscriber.py", line 129, in register
    raise AttributeError(
AttributeError: 'SpeechRecogServer' object has no attribute 'temp'.

エラーの原因は, sub_register関数は引数にtopicの型情報を必要としておらず,self.tempの型情報を参照している点にあります.

  • def register(
    self,
    name: str,
    topic: str,
    queue_size=10,
    callback_func: Optional[Callable] = None,
    execute_func: Optional[Callable] = None,
    ) -> None:
    """Subscriberを登録する
    Args:
    name (str): 登録するSubsciberの名前.self.sub.{name}で取り出せる.
    また,self.subf_{name}でcallback関数が作成される.変数はself.{name}で取り出せる.
    topic (str): Subscribeするtopic名
    queue_size (int, optional): キューサイズ. Defaults to 10.
    callback_func (Optional[Callable], optional):
    コールバック関数.Defaults to None.
    execute_func (Optional[Callable], optional):
    コールバック関数内で実行する関数.Defaults to None.
    Raises:
    AttributeError: callback関数用の変数が定義されていない場合.
    """
    if not hasattr(self, name):
    raise AttributeError(
    f"'{self.__class__.__name__}' object has no attribute '{name}'."
    )

そのため,事前に以下のように型情報を定義する必要があります.

self.temp = Int64()
self.sub_register("temp", "topic/name", queue_size=10, callback_func=self.cb)

@yuzoo0226
Copy link
Author

yuzoo0226 commented Feb 16, 2023

変数はself.{name}で取り出せる.

を実現するためにこのような構成になっているのかと推察しましたが,少しわかりにくかったです.

@yuzoo0226
Copy link
Author

AttributeError: callback関数用の変数が定義されていない場合.

この説明をもう少し詳しくしていただければなという意図です.
コレだけだとちょっとわかりづらかったです....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants