5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pyrealsense2 読み込んだbagファイがループ再生されてしまう件

Last updated at Posted at 2021-05-28

bagファイルを読み込んで再生させると永久ループしてしまうので,ループさせずに終わらせる方法を紹介します.

bagファイルを読み込むコードはRealsenseの公式サンプルコードが参考になります.
Example: Read Bag File

ループフラグをFalseに設定

永久ループされてしまう原因は以下のbagファイルを読み込んでいる部分にあります.

rs.config.enable_device_from_file(config, file_name)

このenable_device_from_file関数にはrepeat_playbackというbool型のデフォルト引数があり初期値はTrueに設定されています.
このrepeat_playbackがTrueに設定されていると,ループ再生されてしまいます.
そのため,Falseに設定することでループ再生は解消されます.

rs.config.enable_device_from_file(config, file_name, repeat_playback=False)

出典:Pyrealsense2 Documents: pyrealsense2.config

しかし,Falseに設定したことで次のようなエラーが発生してしまうかと思います.

Traceback (most recent call last):
  File "/Users/user/realsense/play_bug.py", line 54, in <module>
    frames = pipeline.wait_for_frames()
RuntimeError: Frame didn't arrive within 5000

このエラーの解消方法について説明します.

タイムアウトエラーの解消

エラー文にもあるようにエラーの原因はwait_for_frames関数のタイムアウトによるものです.

frames = pipeline.wait_for_frames()

wait_for_frames関数は次のフレームが利用できるようになるまで待ち続ける関数で,timeout_msというint型のデフォルト引数があり,初期値は5000に設定されています.
そのため,5000ms待っても次のフレームがなければ,タイムアウトエラーとなります.
解消方法として,wait_for_frames関数の代わりにtry_wait_for_frames関数を使うか,try-except構文で処理する方法が考えられます.
try_wait_for_frames関数を使う場合は,次のように書くことでタイムアウトエラーに陥ることを解消できます.

while Ture:
    flag,frames = pipeline.try_wait_for_frames()
    if flag == False: break

try-except構文で処理する場合は,次のように書くことでタイムアウトエラーに陥ることを解消できます.

while Ture:
    try: frames = pipeline.wait_for_frames()
    except: break

出典:Pyrealsense2 Documents: pyrealsense2.pipeline

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?