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

ロボットプログラミングの発展課題について #400

Open
sugihara-16 opened this issue Oct 19, 2021 · 2 comments
Open

ロボットプログラミングの発展課題について #400

sugihara-16 opened this issue Oct 19, 2021 · 2 comments

Comments

@sugihara-16
Copy link

sugihara-16 commented Oct 19, 2021

ロボットプログラミングの発展課題について

/face_detection/faces トピックは、以下のような構成になっています。

std_msgs/Header header
  uint32 seq
  time stamp
  string frame_id
opencv_apps/Face[] faces
  opencv_apps/Rect face
    float64 x
    float64 y
    float64 width
    float64 height
  opencv_apps/Rect[] eyes
    float64 x
    float64 y
    float64 width
    float64 height
  string label
  float64 confidence

このため、例えばmsg.faces.face.xとして受けると、エラーがでます。
私はmsg.faces[0].face.xとすることで返り値を得ることができましたが、結局なぜこうなるのかわかりません(faces[1]はout of rangeなようです)。
また、前述のよう記述する場合も、例えば大域変数rectに値をストアしてmain関数でrect.faces[0].face.xとすると
IndexError: list index out of range
となりエラーを吐きます。

@k-okada
Copy link
Member

k-okada commented Oct 19, 2021

opencv_apps/Face[] faces

[] がついているので,リストになっています.

>>> from opencv_apps.msg import FaceArrayStamped
>>> msg = FaceArrayStamped()
>>> msg.faces
[]

としてもわかるとおもいます.
顔が見つかると,その分,このリストにデータが入るので
msg.faces[0]msg.faces[1] で値を取ることができます.
しかし,顔が1個しか見つかっていないと,msg.faces[1] がエラーになります.

値をアクセスするときはlen(msg.faces) として,リストの長さを調べてこれが0より大きいときだけ,処理するとよいです.

というので,答えになったでしょうか?

@sugihara-16
Copy link
Author

ご丁寧にありがとうございます.
理解できました.

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