diff --git a/external/rlbench/tests/__init__.py b/external/rlbench/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/external/rlbench/tests/unit/__init__.py b/external/rlbench/tests/unit/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/36.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/36.png new file mode 100644 index 0000000000000000000000000000000000000000..180f183c618513af2d8d0e90fb8c266f369f2719 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/36.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/41.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/41.png new file mode 100644 index 0000000000000000000000000000000000000000..68259bac29bf9a2c8dc2287510702bf6ccc5833e Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/41.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/43.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/43.png new file mode 100644 index 0000000000000000000000000000000000000000..0aae09ebbd735cc119776a1e1d5f7e6d5ca2c8b2 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/43.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/44.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/44.png new file mode 100644 index 0000000000000000000000000000000000000000..aa86966b84ff9b6cd7dca66335f7c279c4809f58 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/44.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/45.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/45.png new file mode 100644 index 0000000000000000000000000000000000000000..9acee143830c01705b23669318949aa251a67334 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/45.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/46.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/46.png new file mode 100644 index 0000000000000000000000000000000000000000..db5ae50bc06fc7b740a2c1df0efa7f9b3826af0a Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/46.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/47.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/47.png new file mode 100644 index 0000000000000000000000000000000000000000..9f54240fdd6f2311d5e2c5110fba27ef82293f06 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/47.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/48.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/48.png new file mode 100644 index 0000000000000000000000000000000000000000..cc14eea9477f4f31afba355f002e4a101b1f586c Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/48.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/49.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/49.png new file mode 100644 index 0000000000000000000000000000000000000000..f29be5942e0c6091c2bf0f64518206a02a0815f1 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/49.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/5.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/5.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9962e630201c414195c5937e4be806ede5c5fd Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/5.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/50.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/50.png new file mode 100644 index 0000000000000000000000000000000000000000..695609103e6fbe56011f9a8e634a91b8a0bfe8b1 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/50.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/51.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/51.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ada3463e9173cbafc72f377acd1582503de982 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/51.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/52.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/52.png new file mode 100644 index 0000000000000000000000000000000000000000..c0eee40ec8b6ea4a8f26a36f53b0e1a044cdc58a Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/52.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/53.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/53.png new file mode 100644 index 0000000000000000000000000000000000000000..4fea9adb4b5afeae1d532289d2ae40146b958681 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/53.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/54.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/54.png new file mode 100644 index 0000000000000000000000000000000000000000..0f912e0b75292e33d913a6588dcea58d3c50ce40 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/54.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/55.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/55.png new file mode 100644 index 0000000000000000000000000000000000000000..b11d2ef9f09fd850ec2e38c1c14005c73565f3e0 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/55.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/56.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/56.png new file mode 100644 index 0000000000000000000000000000000000000000..c341347fbf0d74b98df98fb42a569eaaf3035c90 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/56.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/57.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/57.png new file mode 100644 index 0000000000000000000000000000000000000000..2112c8e8f3368058135f8740eb2ce13538382fa9 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/57.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/58.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/58.png new file mode 100644 index 0000000000000000000000000000000000000000..c87ce619a35080b901b39a32be1696a2531faf56 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/58.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/59.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/59.png new file mode 100644 index 0000000000000000000000000000000000000000..16fc6f8f935f943194005336a7bd87116431f805 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/59.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/6.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/6.png new file mode 100644 index 0000000000000000000000000000000000000000..f32e867d50e680cd7d2781d245493eb77fdada8c Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/6.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/7.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/7.png new file mode 100644 index 0000000000000000000000000000000000000000..3c519077e8300de95871a484659efd39d0518e09 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/7.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/8.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/8.png new file mode 100644 index 0000000000000000000000000000000000000000..c82bb086e727e5a8bd9f2107bf4ffbcc6825d890 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/8.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/9.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/9.png new file mode 100644 index 0000000000000000000000000000000000000000..53d5dcaee354613e9ffb290bca73518dd0e93328 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_mask/9.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/0.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/0.png new file mode 100644 index 0000000000000000000000000000000000000000..00f27f6f2c4f5bb0d07222dca2613e814df84ba7 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/0.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/1.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/1.png new file mode 100644 index 0000000000000000000000000000000000000000..bdb85c28bdfb03f3174e4d385bfb377ad6d562e6 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/1.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/10.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/10.png new file mode 100644 index 0000000000000000000000000000000000000000..105ad543ecfd058d10528a3e9d52559059c18866 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/10.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/11.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/11.png new file mode 100644 index 0000000000000000000000000000000000000000..401e1867acf4927e021f43281c1ee5154e9c4423 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/11.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/12.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/12.png new file mode 100644 index 0000000000000000000000000000000000000000..40e7a9fb91b12fd9a3e28db50c34ffb916f70c98 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/12.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/13.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/13.png new file mode 100644 index 0000000000000000000000000000000000000000..39379cb53b8f6e54a0bca3c6bda902e1337f08ab Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/13.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/14.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/14.png new file mode 100644 index 0000000000000000000000000000000000000000..9171ebe6f8d7a370ae4bea2bed5f8d8c1adea3e3 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/14.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/15.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/15.png new file mode 100644 index 0000000000000000000000000000000000000000..fee56653f8a0939cd2bb701c60cecc178f62552e Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/15.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/16.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/16.png new file mode 100644 index 0000000000000000000000000000000000000000..d3488c1b80169ef03a3256275b050b9e0efaaf7c Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/16.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/17.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/17.png new file mode 100644 index 0000000000000000000000000000000000000000..a08ee4286581638cdc1a1c83939d04455c19af32 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/17.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/18.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/18.png new file mode 100644 index 0000000000000000000000000000000000000000..62a67222639c75a50d9746bd34d6e19e9045e451 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/18.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/19.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/19.png new file mode 100644 index 0000000000000000000000000000000000000000..1c45fba09037e54f75236584aa88c47d3634cf19 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/19.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/2.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/2.png new file mode 100644 index 0000000000000000000000000000000000000000..66d8c2407ad21f2cdd2966bffd8f1a4b65665d31 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/2.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/20.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/20.png new file mode 100644 index 0000000000000000000000000000000000000000..4b2d7363e641ae31bfe9955a9f3f1127dcbddf34 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/20.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/21.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/21.png new file mode 100644 index 0000000000000000000000000000000000000000..d5591bba370d5f24c9d2a8558754d2f34c510d81 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/21.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/22.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/22.png new file mode 100644 index 0000000000000000000000000000000000000000..aac02e0be2a766d558a401f711b7d3d9cf1a8d95 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/22.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/23.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/23.png new file mode 100644 index 0000000000000000000000000000000000000000..828e3f7bd004d8ea26b5926dac099d6d7eab9657 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/23.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/24.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1e71d7fca01ac28b69a56b95ded2f59470d07349 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/24.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/25.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/25.png new file mode 100644 index 0000000000000000000000000000000000000000..59d76f5d0c21701900a596a463eb4e4bf41d6b55 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/25.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/26.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/26.png new file mode 100644 index 0000000000000000000000000000000000000000..a872f65b44b3f0a7a9b8c736cf05c09ada35e79c Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/26.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/27.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/27.png new file mode 100644 index 0000000000000000000000000000000000000000..60debc8394f4d4a8be3bd3a2f794cfda12ca4a34 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/27.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/28.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/28.png new file mode 100644 index 0000000000000000000000000000000000000000..666caa212628a026398af88f389c765dd10d72c3 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/28.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/29.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/29.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5345431cf622494f1afcabf8577faf6505b3a2 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/29.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/3.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/3.png new file mode 100644 index 0000000000000000000000000000000000000000..0391fdd34d7402fcb022e3fa4e572fab53e592c7 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/3.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/30.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/30.png new file mode 100644 index 0000000000000000000000000000000000000000..11fcc391b20ca71f1abdc227297e72fdd4259594 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/30.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/31.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/31.png new file mode 100644 index 0000000000000000000000000000000000000000..791b59bc3a0ae375d191f6d03c460b1e9e6c5c43 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/31.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/32.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/32.png new file mode 100644 index 0000000000000000000000000000000000000000..49db379dca3283eb61c08a6d7af7d4ec28167303 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/32.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/33.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/33.png new file mode 100644 index 0000000000000000000000000000000000000000..118ef65997ae35fe58478dc90e6ac06f739f9fe3 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/33.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/34.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/34.png new file mode 100644 index 0000000000000000000000000000000000000000..2f3e5c3d0c40c98ad05a8cd81c8ac8454b884a18 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/34.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/35.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/35.png new file mode 100644 index 0000000000000000000000000000000000000000..9afb18cb3c0b87dfd05ff172577adcfce7efe870 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/35.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/36.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/36.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f41cfbf9a7793d423d366497ec30aaee1329ec Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/36.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/37.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/37.png new file mode 100644 index 0000000000000000000000000000000000000000..79c735f4bfd3ddba229978d042266dc327340874 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/37.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/38.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/38.png new file mode 100644 index 0000000000000000000000000000000000000000..122963e61e4b6ada6b59c52514208f11a3a9d950 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/38.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/39.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/39.png new file mode 100644 index 0000000000000000000000000000000000000000..72e043faa92d4c5355f6a6861e90fa6cc9e713de Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/39.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/4.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/4.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0aea2aa2a7cddcf740e605216d088e8866ee2a Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/4.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/40.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/40.png new file mode 100644 index 0000000000000000000000000000000000000000..c3985f6a0b270d7122cbba9b4727e57cb6fe481f Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/40.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/41.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/41.png new file mode 100644 index 0000000000000000000000000000000000000000..f10082536f6d3e5cb9ca17dffa560d7b2547271c Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/41.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/42.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/42.png new file mode 100644 index 0000000000000000000000000000000000000000..235da66f2fa3097b8a7191b972c280b560be7a99 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/42.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/43.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/43.png new file mode 100644 index 0000000000000000000000000000000000000000..2ea1b5060e4c87949c574ec5a5a317a4812eba05 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/43.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/44.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/44.png new file mode 100644 index 0000000000000000000000000000000000000000..ff54ca54bb4f25c19e8f5e9b7375524e6b3225da Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/44.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/45.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/45.png new file mode 100644 index 0000000000000000000000000000000000000000..880c07d6627c5042c78e632b6e6618810295d57f Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/45.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/46.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/46.png new file mode 100644 index 0000000000000000000000000000000000000000..2b44ca12e21898c0d70bb36b31bcc014039b7bb3 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/46.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/47.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/47.png new file mode 100644 index 0000000000000000000000000000000000000000..3bdae9fd52e3d5bc5e1079cca529e0e9bd263358 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/47.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/48.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/48.png new file mode 100644 index 0000000000000000000000000000000000000000..817de1724889166a1845571263ac4514be65e924 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/48.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/49.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/49.png new file mode 100644 index 0000000000000000000000000000000000000000..4268026dfd8f7b0df764e0cffa746d3824a80cb9 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/49.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/5.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/5.png new file mode 100644 index 0000000000000000000000000000000000000000..22132fbfdd33f09f768e439fc38cb7550082b822 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/5.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/50.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/50.png new file mode 100644 index 0000000000000000000000000000000000000000..7e11811f922912f2afd1bb5086aa54c698d2c51f Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/50.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/51.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/51.png new file mode 100644 index 0000000000000000000000000000000000000000..b27f8ef4b46749dcf8656d125ffc604db1364656 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/51.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/52.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/52.png new file mode 100644 index 0000000000000000000000000000000000000000..96041f035674951e026a7953ee1819c75860c6fd Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/52.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/53.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/53.png new file mode 100644 index 0000000000000000000000000000000000000000..9545c6655cca5f1b3175b2d7f86f36cbbfaae37d Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/53.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/54.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/54.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5832117570ccd543e50f0dfd76103ee2a9295d Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/54.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/55.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/55.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ccdcf6a5df6c3a3673718ddb24c4c599fc56b2 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/55.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/56.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/56.png new file mode 100644 index 0000000000000000000000000000000000000000..7d16cc3c0da85a39e3d9e21b38fe9f4107f0ac65 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/56.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/57.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/57.png new file mode 100644 index 0000000000000000000000000000000000000000..3852f0072459d8f36cb338c40e106f689e6ff8c4 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/57.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/58.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/58.png new file mode 100644 index 0000000000000000000000000000000000000000..b0000964b8f1bfe00e2c02708f0b84c20c7df341 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/58.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/59.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/59.png new file mode 100644 index 0000000000000000000000000000000000000000..60b7cd586b2f84a3377013115951a6430949c2f2 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/59.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/6.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/6.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b827f1c9a2d5e3bb87bd978d5ae841d78a1dc4 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/6.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/7.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/7.png new file mode 100644 index 0000000000000000000000000000000000000000..040d402ad4000b27ec88258696ddefd586207a61 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/7.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/8.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/8.png new file mode 100644 index 0000000000000000000000000000000000000000..6643e36f6cc350b54e75d48bc7907023c4b8ff42 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/8.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/9.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/9.png new file mode 100644 index 0000000000000000000000000000000000000000..208b3efd298d7f257a3f680dc5812d72cdb666ac Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/right_shoulder_rgb/9.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/0.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/0.png new file mode 100644 index 0000000000000000000000000000000000000000..b3235c0a627128c794de155b2098e461398f3265 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/0.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/1.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/1.png new file mode 100644 index 0000000000000000000000000000000000000000..55ecb73d0ce5c47330fea4b7cfee591e38646768 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/1.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/10.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/10.png new file mode 100644 index 0000000000000000000000000000000000000000..252dd316599222c1ce256100147afe1fea6d760f Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/10.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/12.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/12.png new file mode 100644 index 0000000000000000000000000000000000000000..1d558394b05be8e7395ad77c90a8da53acc1ba0e Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/12.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/13.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/13.png new file mode 100644 index 0000000000000000000000000000000000000000..3e848eada2f5dd1811cda0508119e175067b0f79 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/13.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/14.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/14.png new file mode 100644 index 0000000000000000000000000000000000000000..36339735c1b793546f9ed793892e7c9cc438272e Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/14.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/15.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/15.png new file mode 100644 index 0000000000000000000000000000000000000000..5e3094e5668e126305b0c71e4731d20e175ed4ce Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/15.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/16.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/16.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf2aab8a91548f3e8a475ca477272076dc9ef83 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/16.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/17.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/17.png new file mode 100644 index 0000000000000000000000000000000000000000..341d0f5be7da61df29ad0e62be5d1c866cfb0a2a Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/17.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/18.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/18.png new file mode 100644 index 0000000000000000000000000000000000000000..658f572ade8413018515b4bed1c8a9dbedabf940 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/18.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/19.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/19.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5518c0dab4d52422ae643dfdcb785760e793fa Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/19.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/2.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/2.png new file mode 100644 index 0000000000000000000000000000000000000000..5ddf2ce011fa8cfc56589b32581a04c773388a60 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/2.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/20.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/20.png new file mode 100644 index 0000000000000000000000000000000000000000..56541d60a22c36289618fb98829e7a22024819d2 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/20.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/22.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/22.png new file mode 100644 index 0000000000000000000000000000000000000000..c4189ff51e043a5c81e498631d5a330378d6eebb Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/22.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/24.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/24.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3b6f82b6b892a074f40f5e8117f38681c964e5 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/24.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/26.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/26.png new file mode 100644 index 0000000000000000000000000000000000000000..be1368a9e0d1d8f0a21c4226d29689fa5c35abc4 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_depth/26.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/50.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/50.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1d9d1cfa0f78486e1b7b2b7285d626ac28c02a Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/50.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/51.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/51.png new file mode 100644 index 0000000000000000000000000000000000000000..71122ddbf0e4c2ca5320c0f7be610029298a6f05 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/51.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/52.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/52.png new file mode 100644 index 0000000000000000000000000000000000000000..71b6410f31a3a26500d7e5a18a4528aa9504e5ed Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/52.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/53.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/53.png new file mode 100644 index 0000000000000000000000000000000000000000..a0a5df6eb5bcc97c9f745bd2660fa1f12201ea65 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/53.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/54.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/54.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1225b3e0fb6fcc02b7f389a58051466ca305c2 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/54.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/55.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/55.png new file mode 100644 index 0000000000000000000000000000000000000000..f28d88ab3cd5824fa82164de802d98aa6dc06108 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/55.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/56.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/56.png new file mode 100644 index 0000000000000000000000000000000000000000..7d247b2c58c5d05d3db2b53a8ecf6c0b16de352e Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/56.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/57.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/57.png new file mode 100644 index 0000000000000000000000000000000000000000..21da2b222327c9a9a8614fef1773381fe1881761 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/57.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/58.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/58.png new file mode 100644 index 0000000000000000000000000000000000000000..f19cfaac274185e26461a3ef20d12eccb16b0cec Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/58.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/59.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/59.png new file mode 100644 index 0000000000000000000000000000000000000000..acb32b4e9bddb9c3e252b05c5e1edd33605bd4f5 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/59.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/6.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/6.png new file mode 100644 index 0000000000000000000000000000000000000000..d01749d2d63cf3948273cb1d6404a079b7f1cb69 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/6.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/7.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/7.png new file mode 100644 index 0000000000000000000000000000000000000000..cc787c36c3a0a08e34749afae5df6d711014d0ff Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/7.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/8.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/8.png new file mode 100644 index 0000000000000000000000000000000000000000..df3f498c436dcf1ee466d3377d6d35b8add9bd62 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/8.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/9.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/9.png new file mode 100644 index 0000000000000000000000000000000000000000..a8893e239d5d7049cc2f8c7bd15f173bab4b042d Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_mask/9.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/0.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/0.png new file mode 100644 index 0000000000000000000000000000000000000000..c377095ef8db2ce9ef4307b2e069e59f99bf0d83 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/0.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/1.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/1.png new file mode 100644 index 0000000000000000000000000000000000000000..7b301a1f9ee11a1cd3e06692e1b3b7e0f371d850 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/1.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/10.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/10.png new file mode 100644 index 0000000000000000000000000000000000000000..abc8182e62ab93c9687dabfede482e94f334a05a Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/10.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/11.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/11.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d0abe42327980177ff1ec12855a22278da6eb4 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/11.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/12.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/12.png new file mode 100644 index 0000000000000000000000000000000000000000..22414d57c1dde6779a9bb0a6b6fcde5c8f648794 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/12.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/13.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/13.png new file mode 100644 index 0000000000000000000000000000000000000000..17e1429a0ac66703b2a4f9fe1012c3ec92787d5e Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/13.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/14.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/14.png new file mode 100644 index 0000000000000000000000000000000000000000..d8af0b4a19879a9093b594f457d9936890f8faf0 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/14.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/15.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/15.png new file mode 100644 index 0000000000000000000000000000000000000000..f21e97845bcfb126fd5e48dfbdab104cfcd7db09 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/15.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/16.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/16.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd4f2067f39bb428ba229e5e9d8bf69c5481e10 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/16.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/17.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/17.png new file mode 100644 index 0000000000000000000000000000000000000000..052e66777094536af7b273711fda51f795f663ea Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/17.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/18.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/18.png new file mode 100644 index 0000000000000000000000000000000000000000..7959af4aef30f114744bc6ef0c4c88d24f16d291 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/18.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/19.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/19.png new file mode 100644 index 0000000000000000000000000000000000000000..3d794a53a342ff2dff6ee6f79349ca8262daab91 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/19.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/2.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/2.png new file mode 100644 index 0000000000000000000000000000000000000000..21652c13343b7dfefdd4457c9c97907ee3fea06a Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/2.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/20.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/20.png new file mode 100644 index 0000000000000000000000000000000000000000..a104a6113e6b0fe3d6abe2ee7628368fc37cf595 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/20.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/21.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/21.png new file mode 100644 index 0000000000000000000000000000000000000000..92376bb578123e7daabd00c69682a0b8fc739e13 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/21.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/22.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/22.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdc1a2c01d56f9b6693d8c385768374f5de08ab Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/22.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/23.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/23.png new file mode 100644 index 0000000000000000000000000000000000000000..de5ca9b1bfaa82ecdeac41ca7bd96bd2b0cba4dd Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/23.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/24.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/24.png new file mode 100644 index 0000000000000000000000000000000000000000..289bfffed6c9f3b2f236f09eb0c4724591d16eee Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/24.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/25.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/25.png new file mode 100644 index 0000000000000000000000000000000000000000..44afb99fede013f34554016d053a329bf9fe715c Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/25.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/26.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/26.png new file mode 100644 index 0000000000000000000000000000000000000000..e06c3180af7cda5af3c3a753839ad1e1ccb2003f Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/26.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/27.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/27.png new file mode 100644 index 0000000000000000000000000000000000000000..893218b78ee9fb394b609b21172e2c2cee2e29c8 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/27.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/28.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/28.png new file mode 100644 index 0000000000000000000000000000000000000000..b04178678ad2ea18fbdea012830c6019e8eec638 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/28.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/29.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/29.png new file mode 100644 index 0000000000000000000000000000000000000000..4a2161a7a232b63efdd4c737624014399a5fb30c Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/29.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/3.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/3.png new file mode 100644 index 0000000000000000000000000000000000000000..44c21d36642cb7168294c33cf0fbcc69cad8cb7d Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/3.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/30.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/30.png new file mode 100644 index 0000000000000000000000000000000000000000..615133d451ed97b2902da1c85caf36814ee62b89 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/30.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/31.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/31.png new file mode 100644 index 0000000000000000000000000000000000000000..847e77a39f61b07383082f77797775a4c4258d9a Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/31.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/32.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/32.png new file mode 100644 index 0000000000000000000000000000000000000000..046519220fafc70b61f1307c2705ebc18a693182 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/32.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/33.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/33.png new file mode 100644 index 0000000000000000000000000000000000000000..10c3d455a04d0a3c1f1e234e4331a2e22ddc6d72 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/33.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/34.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/34.png new file mode 100644 index 0000000000000000000000000000000000000000..aa278e040fe6c6e768e4663f73f7cfdae4685ba5 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/34.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/35.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/35.png new file mode 100644 index 0000000000000000000000000000000000000000..50dba91fe25f82ee91a2346a343d0568b9dc04db Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/35.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/36.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/36.png new file mode 100644 index 0000000000000000000000000000000000000000..1090e76035933568e160e62c551940d58a25481d Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/36.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/37.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/37.png new file mode 100644 index 0000000000000000000000000000000000000000..3b63487ddc32480196a3f3040e6eb3cf0612f5d3 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/37.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/38.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/38.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfa8efb44dc0515e0eb9c77a216159845421fbb Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/38.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/39.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/39.png new file mode 100644 index 0000000000000000000000000000000000000000..3ee3a9371184cc7beb0fec9048c709cab4606df1 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/39.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/4.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/4.png new file mode 100644 index 0000000000000000000000000000000000000000..9d7ed5bb948d2d57ca9b91a65ea48ee3c51acf4a Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/4.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/40.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/40.png new file mode 100644 index 0000000000000000000000000000000000000000..71f610fb83d4f3a9f7ebb1359d10c76488dc59d4 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/40.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/41.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/41.png new file mode 100644 index 0000000000000000000000000000000000000000..b7cb9df5363686c4064b3eeb0fd6f9485758336f Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/41.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/42.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/42.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ac35223da44a5b2d87d29ff52c029b988178c9 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/42.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/43.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/43.png new file mode 100644 index 0000000000000000000000000000000000000000..8d283310b0e663eb110908a154ca6b05951d7841 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/43.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/44.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/44.png new file mode 100644 index 0000000000000000000000000000000000000000..fdcf799b27e58e6e07c96c7b76c75c0604e96f90 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/44.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/45.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/45.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa1c6521a75b53599427979a86da7e835848b4e Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/45.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/46.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/46.png new file mode 100644 index 0000000000000000000000000000000000000000..e0f2b525f5b1b72d897c83bd8e701ab8ccde72a8 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/46.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/47.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/47.png new file mode 100644 index 0000000000000000000000000000000000000000..79c6c6445229faad6119a65585a4243155888114 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/47.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/48.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/48.png new file mode 100644 index 0000000000000000000000000000000000000000..325edaba8b4f186f383267d28bd667e153ba3d6f Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/48.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/49.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/49.png new file mode 100644 index 0000000000000000000000000000000000000000..73fcd50c54f8ed1c204e1fd44f482b42c11773ea Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/49.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/5.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/5.png new file mode 100644 index 0000000000000000000000000000000000000000..ade4711108d63d3b201c2e721af311579751bad8 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/5.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/50.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/50.png new file mode 100644 index 0000000000000000000000000000000000000000..62c9c4de652abaa69129477b2821bcfb40c6c656 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/50.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/51.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/51.png new file mode 100644 index 0000000000000000000000000000000000000000..b6ea56ec40060183bb73c55f300a54a0de0c1660 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/51.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/52.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/52.png new file mode 100644 index 0000000000000000000000000000000000000000..60b747d9e454681d2b7fb214cb8a415deb65bfa2 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/52.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/53.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/53.png new file mode 100644 index 0000000000000000000000000000000000000000..875d8857796f81133484da2a0a34ca40b21ddb9e Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/53.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/54.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/54.png new file mode 100644 index 0000000000000000000000000000000000000000..8221186113971221939bd7cf850f618b40cf6caf Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/54.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/55.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/55.png new file mode 100644 index 0000000000000000000000000000000000000000..4747b28a77d0b8f98f9b7c53732bee2991584b93 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/55.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/56.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/56.png new file mode 100644 index 0000000000000000000000000000000000000000..35c793342fe6f67a26f4eac9bd9ddf04952bea11 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/56.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/57.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/57.png new file mode 100644 index 0000000000000000000000000000000000000000..f77dc75d95fb8152affe8d480058e897ed260c35 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/57.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/58.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/58.png new file mode 100644 index 0000000000000000000000000000000000000000..034a2a47cf9ce2d362f51913fd09d300f0ba0d4d Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/58.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/59.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/59.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe50e2a8f787beac71325ad7d014d5002a7b0b1 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/59.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/6.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/6.png new file mode 100644 index 0000000000000000000000000000000000000000..7ecb1970896d954e8cd13ebbfc9dfeadf0443e80 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/6.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/7.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/7.png new file mode 100644 index 0000000000000000000000000000000000000000..5f3adbf7f32527e301e31516e5db90ab09ecbec0 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/7.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/8.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/8.png new file mode 100644 index 0000000000000000000000000000000000000000..89141703b18ca401c9dda2202d508538e7e40822 Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/8.png differ diff --git a/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/9.png b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/9.png new file mode 100644 index 0000000000000000000000000000000000000000..d2dac0be3fc56376c7d533402f97ce1d63a8e18b Binary files /dev/null and b/external/rlbench/tests/unit/assets/tasks/reach_target/variation0/episodes/episode3/wrist_rgb/9.png differ diff --git a/external/rlbench/tests/unit/assets/textures/0.png b/external/rlbench/tests/unit/assets/textures/0.png new file mode 100644 index 0000000000000000000000000000000000000000..bed181b10989d10f7b2e224675bdd3962fad2be0 Binary files /dev/null and b/external/rlbench/tests/unit/assets/textures/0.png differ diff --git a/external/rlbench/tests/unit/assets/textures/1.png b/external/rlbench/tests/unit/assets/textures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..28358c8fca5e6a776ae87e300c6b2539ec24a0bf Binary files /dev/null and b/external/rlbench/tests/unit/assets/textures/1.png differ diff --git a/external/rlbench/tests/unit/assets/textures/10.png b/external/rlbench/tests/unit/assets/textures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..87b8bf155f3b05ba551e5836489e0f6a941a4bd3 Binary files /dev/null and b/external/rlbench/tests/unit/assets/textures/10.png differ diff --git a/external/rlbench/tests/unit/assets/textures/2.png b/external/rlbench/tests/unit/assets/textures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..9245b6c862de72dc2fdccf4360afa38cbb6c7e9a Binary files /dev/null and b/external/rlbench/tests/unit/assets/textures/2.png differ diff --git a/external/rlbench/tests/unit/assets/textures/3.png b/external/rlbench/tests/unit/assets/textures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..28f3d69f547cadfd970e2a10bebcf10e1770bdd6 Binary files /dev/null and b/external/rlbench/tests/unit/assets/textures/3.png differ diff --git a/external/rlbench/tests/unit/assets/textures/5.png b/external/rlbench/tests/unit/assets/textures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..895ece0535c998e09611a873176b024724d42e2f Binary files /dev/null and b/external/rlbench/tests/unit/assets/textures/5.png differ diff --git a/external/rlbench/tests/unit/assets/textures/6.png b/external/rlbench/tests/unit/assets/textures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..365a55c023d8314620aa1d01ef68e8f46b6d736f Binary files /dev/null and b/external/rlbench/tests/unit/assets/textures/6.png differ diff --git a/external/rlbench/tests/unit/assets/textures/7.png b/external/rlbench/tests/unit/assets/textures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4b5f2f185bf1c0a4bae94970cc9662f98dfd1434 Binary files /dev/null and b/external/rlbench/tests/unit/assets/textures/7.png differ diff --git a/external/rlbench/tests/unit/assets/textures/8.png b/external/rlbench/tests/unit/assets/textures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..2a72dca9e0ebba2396a133a9b7a4289bc0850690 Binary files /dev/null and b/external/rlbench/tests/unit/assets/textures/8.png differ diff --git a/external/rlbench/tests/unit/assets/textures/9.png b/external/rlbench/tests/unit/assets/textures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..b78f9fb008ae986ee9d2a60776ff706036971547 Binary files /dev/null and b/external/rlbench/tests/unit/assets/textures/9.png differ diff --git a/external/rlbench/tests/unit/test_domain_randomization_environment.py b/external/rlbench/tests/unit/test_domain_randomization_environment.py new file mode 100644 index 0000000000000000000000000000000000000000..407b4078160146e3f293619d6ada98f6d8b1d0b6 --- /dev/null +++ b/external/rlbench/tests/unit/test_domain_randomization_environment.py @@ -0,0 +1,68 @@ +import unittest +from os import path + +import numpy as np +from pyrep.const import RenderMode + +from rlbench import Environment +from rlbench.action_modes.action_mode import MoveArmThenGripper +from rlbench.action_modes.arm_action_modes import JointVelocity +from rlbench.action_modes.gripper_action_modes import Discrete +from rlbench.observation_config import ObservationConfig, CameraConfig +from rlbench.sim2real.domain_randomization import RandomizeEvery, \ + VisualRandomizationConfig +from rlbench.tasks.open_microwave import OpenMicrowave + +ASSET_DIR = path.join(path.dirname(path.abspath(__file__)), 'assets', 'textures') + + +class TestDomainRandomizaionEnvironment(unittest.TestCase): + + def tearDown(self): + self.env.shutdown() + + def get_task(self, randomize_every, frequency, visual_config=None, + dynamics_config=None): + cam_config = CameraConfig(render_mode=RenderMode.OPENGL) + obs_config = ObservationConfig(right_shoulder_camera=cam_config) + obs_config.set_all(False) + obs_config.set_all_low_dim(True) + obs_config.right_shoulder_camera.rgb = True + mode = MoveArmThenGripper(JointVelocity(), Discrete()) + self.env = Environment( + mode, ASSET_DIR, obs_config, True, True, 'panda', + randomize_every, frequency, visual_config, dynamics_config) + self.env.launch() + return self.env.get_task(OpenMicrowave) + + def test_visual_randomize_every_2_episodes(self): + visual_config = VisualRandomizationConfig(ASSET_DIR) + task = self.get_task(RandomizeEvery.EPISODE, 2, visual_config) + _, obs1 = task.reset() + _, obs2 = task.reset() + _, obs3 = task.reset() + # obs1 and obs2 should be almost identical + self.assertLess( + np.mean(np.abs(obs1.right_shoulder_rgb - obs2.right_shoulder_rgb)), + 5) + # obs2 and obs3 should be very different + self.assertGreater( + np.mean(np.abs(obs2.right_shoulder_rgb - obs3.right_shoulder_rgb)), + 5) + + def test_visual_randomize_every_2_transitions(self): + visual_config = VisualRandomizationConfig(ASSET_DIR) + task = self.get_task(RandomizeEvery.TRANSITION, 2, visual_config) + _, _ = task.reset() + a = ([0.0] * 7) + [1.0] + obs1, _, _ = task.step(a) + obs2, _, _ = task.step(a) + obs3, _, _ = task.step(a) + # obs1 and obs2 should be almost identical + self.assertLess( + np.mean(np.abs(obs1.right_shoulder_rgb - obs2.right_shoulder_rgb)), + 5) + # obs2 and obs3 should be very different + self.assertGreater( + np.mean(np.abs(obs2.right_shoulder_rgb - obs3.right_shoulder_rgb)), + 5) diff --git a/external/rlbench/tests/unit/test_environment.py b/external/rlbench/tests/unit/test_environment.py new file mode 100644 index 0000000000000000000000000000000000000000..eef574996484cf90382a90ffee75175958e36c0e --- /dev/null +++ b/external/rlbench/tests/unit/test_environment.py @@ -0,0 +1,265 @@ +import unittest +from os import path + +import numpy as np +from pyrep.objects import Dummy + +from rlbench import environment +from rlbench.action_modes.action_mode import MoveArmThenGripper +from rlbench.action_modes.arm_action_modes import JointVelocity, JointPosition, \ + EndEffectorPoseViaPlanning, JointTorque, EndEffectorPoseViaIK +from rlbench.action_modes.gripper_action_modes import Discrete +from rlbench.observation_config import ObservationConfig +from rlbench.task_environment import TaskEnvironment +from rlbench.tasks import TakeLidOffSaucepan, ReachTarget + +ASSET_DIR = path.join(path.dirname(path.abspath(__file__)), 'assets', 'tasks') + + +class TestEnvironment(unittest.TestCase): + + def tearDown(self): + self.env.shutdown() + + def get_task(self, task_class, arm_action_mode, obs_config=None): + if obs_config is None: + obs_config = ObservationConfig() + obs_config.set_all(False) + obs_config.set_all_low_dim(True) + obs_config.right_shoulder_camera.rgb = True + obs_config.left_shoulder_camera.point_cloud = True + mode = MoveArmThenGripper(arm_action_mode, Discrete()) + self.env = environment.Environment( + mode, ASSET_DIR, obs_config, headless=True) + self.env.launch() + return self.env.get_task(task_class) + + def test_get_task(self): + task = self.get_task( + ReachTarget, JointVelocity()) + self.assertIsInstance(task, TaskEnvironment) + self.assertEqual(task.get_name(), 'reach_target') + + def test_reset(self): + task = self.get_task( + ReachTarget, JointVelocity()) + desc, obs = task.reset() + self.assertIsNotNone(obs.right_shoulder_rgb) + self.assertIsNone(obs.left_shoulder_rgb) + self.assertIsInstance(desc, list) + + def test_get_all_camera_observations(self): + obs_config = ObservationConfig() + obs_config.left_shoulder_camera.rgb = True + obs_config.right_shoulder_camera.rgb = True + obs_config.overhead_camera.rgb = True + obs_config.front_camera.rgb = True + obs_config.wrist_camera.rgb = True + task = self.get_task( + ReachTarget, JointVelocity(), obs_config) + desc, obs = task.reset() + self.assertIsNotNone(obs.left_shoulder_rgb) + self.assertIsNotNone(obs.right_shoulder_rgb) + self.assertIsNotNone(obs.overhead_rgb) + self.assertIsNotNone(obs.front_rgb) + self.assertIsNotNone(obs.wrist_rgb) + + def test_step(self): + task = self.get_task( + ReachTarget, JointVelocity()) + task.reset() + obs, reward, term = task.step(np.random.uniform(size=8)) + self.assertIsNotNone(obs.right_shoulder_rgb) + self.assertIsNone(obs.left_shoulder_rgb) + self.assertEqual(reward, 0) + self.assertFalse(term) + + def test_get_invalid_number_of_demos(self): + task = self.get_task( + ReachTarget, JointVelocity()) + with self.assertRaises(RuntimeError): + task.get_demos(10, live_demos=False, image_paths=True) + + def test_get_stored_demos_paths(self): + task = self.get_task( + ReachTarget, JointVelocity()) + demos = task.get_demos(2, live_demos=False, image_paths=True) + self.assertEqual(len(demos), 2) + self.assertGreater(len(demos[0]), 0) + self.assertIsInstance(demos[0][0].right_shoulder_rgb, str) + self.assertIsNone(demos[0][0].left_shoulder_rgb) + + def test_get_stored_demos_images(self): + task = self.get_task( + ReachTarget, JointVelocity()) + demos = task.get_demos(2, live_demos=False, image_paths=False) + self.assertEqual(len(demos), 2) + self.assertGreater(len(demos[0]), 0) + self.assertIsInstance(demos[0][0].right_shoulder_rgb, np.ndarray) + self.assertIsNone(demos[0][0].left_shoulder_rgb) + self.assertIsInstance(demos[0][0].left_shoulder_point_cloud, np.ndarray) + + def test_get_stored_demos_images_without_init_sim(self): + obs_config = ObservationConfig() + obs_config.set_all(False) + obs_config.set_all_low_dim(True) + obs_config.right_shoulder_camera.rgb = True + action_mode = MoveArmThenGripper(JointVelocity(), Discrete()) + self.env = environment.Environment( + action_mode, ASSET_DIR, obs_config, headless=True) + demos = self.env.get_demos('reach_target', 2) + self.assertEqual(len(demos), 2) + self.assertGreater(len(demos[0]), 0) + self.assertIsInstance(demos[0][0].right_shoulder_rgb, np.ndarray) + self.assertIsNone(demos[0][0].left_shoulder_rgb) + + def test_get_live_demos(self): + task = self.get_task( + ReachTarget, JointVelocity()) + demos = task.get_demos(2, live_demos=True) + self.assertEqual(len(demos), 2) + self.assertGreater(len(demos[0]), 0) + self.assertIsInstance(demos[0][0].right_shoulder_rgb, np.ndarray) + + def test_observation_shape_constant_across_demo(self): + task = self.get_task( + TakeLidOffSaucepan, JointVelocity()) + demos = task.get_demos(1, live_demos=True) + self.assertEqual(len(demos), 1) + self.assertGreater(len(demos[0]), 0) + self.assertGreater(demos[0][0].task_low_dim_state.size, 0) + shapes = [step.task_low_dim_state.shape for step in demos[0]] + first_shape = shapes[0] + self.assertListEqual(shapes, [first_shape] * len(demos[0])) + + def test_reset_to_demos(self): + task = self.get_task( + TakeLidOffSaucepan, JointVelocity()) + demo = task.get_demos(1, live_demos=True)[0] + obs = demo[0] + task.reset_to_demo(demo) + reset_obs = task.get_observation() + + # Now check that the state has been properly restored + np.testing.assert_allclose( + reset_obs.joint_positions, obs.joint_positions, atol=1e-1) + np.testing.assert_allclose( + reset_obs.gripper_open, obs.gripper_open, atol=1e-1) + + def test_action_mode_abs_joint_velocity(self): + task = self.get_task( + ReachTarget, JointVelocity()) + task.reset() + action = [0.1] * 7 + [1] + obs, reward, term = task.step(action) + [self.assertAlmostEqual(0.1, a, delta=0.05) + for a in obs.joint_velocities] + + def test_action_mode_abs_joint_position(self): + task = self.get_task( + ReachTarget, JointPosition(True)) + _, obs = task.reset() + init_angles = np.append(obs.joint_positions, 1.) # for gripper + target_angles = np.array(init_angles) + 0.05 + [task.step(target_angles) for _ in range(5)] + obs, reward, term = task.step(target_angles) + [self.assertAlmostEqual(a, actual, delta=0.05) + for a, actual in zip(target_angles, obs.joint_positions)] + + def test_action_mode_delta_joint_position(self): + task = self.get_task( + ReachTarget, JointPosition(False)) + _, obs = task.reset() + init_angles = obs.joint_positions + target_angles = np.array(init_angles) + 0.06 + [task.step([0.01] * 7 + [1]) for _ in range(5)] + obs, reward, term = task.step([0.01] * 8) + [self.assertAlmostEqual(a, actual, delta=0.05) + for a, actual in zip(target_angles, obs.joint_positions)] + + def test_action_mode_abs_ee_pose_ik_world_frame(self): + task = self.get_task( + ReachTarget, EndEffectorPoseViaIK(True, 'world')) + _, obs = task.reset() + init_pose = obs.gripper_pose + new_pose = np.append(init_pose, 1.0) # for gripper + new_pose[2] -= 0.1 # 10cm down + obs, reward, term = task.step(new_pose) + [self.assertAlmostEqual(a, p, delta=0.01) + for a, p in zip(new_pose, obs.gripper_pose)] + + def test_action_mode_delta_ee_pose_ik_world_frame(self): + task = self.get_task( + ReachTarget, EndEffectorPoseViaIK(False, 'world')) + _, obs = task.reset() + init_pose = obs.gripper_pose + new_pose = [0, 0, -0.1, 0, 0, 0, 1.0, 1.0] # 10cm down + expected_pose = list(init_pose) + expected_pose[2] -= 0.1 + obs, reward, term = task.step(new_pose) + [self.assertAlmostEqual(a, p, delta=0.01) + for a, p in zip(expected_pose, obs.gripper_pose)] + + def test_action_mode_abs_ee_pose_plan_world_frame(self): + task = self.get_task( + ReachTarget, EndEffectorPoseViaPlanning(True, 'world')) + _, obs = task.reset() + init_pose = obs.gripper_pose + new_pose = np.append(init_pose, 1.0) # for gripper + new_pose[2] -= 0.1 # 10cm down + obs, reward, term = task.step(new_pose) + [self.assertAlmostEqual(a, p, delta=0.001) + for a, p in zip(new_pose, obs.gripper_pose)] + + def test_action_mode_delta_ee_pose_plan_world_frame(self): + task = self.get_task( + ReachTarget, EndEffectorPoseViaPlanning(False, 'world')) + _, obs = task.reset() + init_pose = obs.gripper_pose + new_pose = [0, 0, -0.1, 0, 0, 0, 1.0, 1.0] # 10cm down + expected_pose = list(init_pose) + expected_pose[2] -= 0.1 + obs, reward, term = task.step(new_pose) + [self.assertAlmostEqual(a, p, delta=0.001) + for a, p in zip(expected_pose, obs.gripper_pose)] + + def test_action_mode_ee_pose_ik_ee_frame(self): + task = self.get_task( + ReachTarget, EndEffectorPoseViaIK(True, 'end effector')) + _, obs = task.reset() + dummy = Dummy.create() + dummy.set_position([0, 0, 0.05], relative_to=task._robot.arm.get_tip()) + action = [0, 0, 0.05, 0, 0, 0, 1, 1] + obs, reward, term = task.step(action) + [self.assertAlmostEqual(a, p, delta=0.01) + for a, p in zip(dummy.get_position(), obs.gripper_pose[:3])] + + def test_action_mode_ee_pose_plan_ee_frame(self): + task = self.get_task( + ReachTarget, EndEffectorPoseViaPlanning(True, 'end effector')) + _, obs = task.reset() + dummy = Dummy.create() + dummy.set_position([0, 0, 0.05], relative_to=task._robot.arm.get_tip()) + action = [0, 0, 0.05, 0, 0, 0, 1, 1] + obs, reward, term = task.step(action) + [self.assertAlmostEqual(a, p, delta=0.01) + for a, p in zip(dummy.get_position(), obs.gripper_pose[:3])] + + def test_action_mode_abs_joint_torque(self): + task = self.get_task( + ReachTarget, JointTorque()) + task.reset() + action = [0.1, -0.1, 0.1, -0.1, 0.1, -0.1, 0.1, 1.0] + obs, reward, term = task.step(action) + # Difficult to test given gravity, so just check for exceptions. + + def test_swap_arm(self): + # Checks if the environment can be setup with each arm + action_mode = MoveArmThenGripper(JointVelocity(), Discrete()) + for robot_config in environment.SUPPORTED_ROBOTS.keys(): + with self.subTest(robot_config=robot_config): + self.env = environment.Environment( + action_mode, headless=True, + robot_setup=robot_config) + self.env.launch() + self.env.shutdown() diff --git a/external/rlbench/tests/unit/test_gym.py b/external/rlbench/tests/unit/test_gym.py new file mode 100644 index 0000000000000000000000000000000000000000..e08fbda732bcde860f851308cde7c016ccdfe040 --- /dev/null +++ b/external/rlbench/tests/unit/test_gym.py @@ -0,0 +1,40 @@ +import unittest +import numpy as np +import gym +import rlbench.gym + + +class TestGym(unittest.TestCase): + + def test_state_env(self): + env = gym.make('reach_target-state-v0') + env.reset() + obs, _, _, _ = env.step(env.action_space.sample()) + self.assertEqual(env.observation_space.shape, + obs.shape) + env.close() + + def test_vision_env(self): + env = gym.make('reach_target-vision-v0') + env.reset() + obs, _, _, _ = env.step(env.action_space.sample()) + self.assertEqual(env.observation_space['state'].shape, + obs['state'].shape) + self.assertEqual(env.observation_space['left_shoulder_rgb'].shape, + obs['left_shoulder_rgb'].shape) + self.assertEqual(env.observation_space['right_shoulder_rgb'].shape, + obs['right_shoulder_rgb'].shape) + self.assertEqual(env.observation_space['wrist_rgb'].shape, + obs['wrist_rgb'].shape) + self.assertEqual(env.observation_space['front_rgb'].shape, + obs['front_rgb'].shape) + env.close() + + def test_env_render(self): + env = gym.make('reach_target-vision-v0', render_mode='rgb_array') + env.reset() + obs, _, _, _ = env.step(env.action_space.sample()) + img = env.render('rgb_array') + self.assertGreater(np.mean(img), 0) + env.close() + diff --git a/external/rlbench/tests/unit/test_scene.py b/external/rlbench/tests/unit/test_scene.py new file mode 100644 index 0000000000000000000000000000000000000000..4ea126d0f8c07280e753babb5fbc05756f9d217d --- /dev/null +++ b/external/rlbench/tests/unit/test_scene.py @@ -0,0 +1,66 @@ +import unittest +from os import path +from os.path import join +from pyrep import PyRep +from pyrep.robots.arms.panda import Panda +from pyrep.robots.end_effectors.panda_gripper import PandaGripper +from rlbench import environment +from rlbench.backend.const import TTT_FILE +from rlbench.backend.scene import Scene +from rlbench.noise_model import GaussianNoise +from rlbench.observation_config import ObservationConfig, CameraConfig +import numpy as np +from rlbench.backend.robot import Robot +from rlbench.backend.robot import UnimanualRobot +from rlbench.tasks.reach_target import ReachTarget + +ASSET_DIR = path.join(path.dirname(path.abspath(__file__)), 'assets', 'tasks') + + +class TestScene(unittest.TestCase): + """Tests the following: + - Getting observations from the scene + - Applying noise + - Applying domain randomization + """ + + def setUp(self): + self.pyrep = PyRep() + self.pyrep.launch(join(environment.DIR_PATH, TTT_FILE), headless=True) + self.pyrep.set_simulation_timestep(0.005) + self.robot = UnimanualRobot(Panda(), PandaGripper()) + + def tearDown(self): + self.pyrep.shutdown() + + def test_sensor_noise_images(self): + cam_config = CameraConfig(rgb_noise=GaussianNoise(0.05, (.0, 1.))) + obs_config = ObservationConfig( + left_shoulder_camera=cam_config, + joint_forces=False, + task_low_dim_state=False) + scene = Scene(self.pyrep, self.robot, obs_config) + scene.load(ReachTarget(self.pyrep, self.robot)) + obs1 = scene.get_observation() + obs2 = scene.get_observation() + self.assertTrue( + np.array_equal(obs1.right_shoulder_rgb, obs2.right_shoulder_rgb)) + self.assertFalse( + np.array_equal(obs1.left_shoulder_rgb, obs2.left_shoulder_rgb)) + self.assertTrue(obs1.left_shoulder_rgb.max() <= 255) + self.assertTrue(obs1.left_shoulder_rgb.min() >= 0) + + def test_sensor_noise_robot(self): + obs_config = ObservationConfig( + joint_velocities_noise=GaussianNoise(0.01), + joint_forces=False, + task_low_dim_state=False) + scene = Scene(self.pyrep, self.robot, obs_config) + scene.load(ReachTarget(self.pyrep, self.robot)) + obs1 = scene.get_observation() + obs2 = scene.get_observation() + self.assertTrue( + np.array_equal(obs1.joint_positions, obs2.joint_positions)) + self.assertFalse( + np.array_equal(obs1.joint_velocities, obs2.joint_velocities)) + diff --git a/external/rlbench/tests/unit/test_task_sets.py b/external/rlbench/tests/unit/test_task_sets.py new file mode 100644 index 0000000000000000000000000000000000000000..e93ecbc3f22bb0b90503f1165a16178a2b18eaf3 --- /dev/null +++ b/external/rlbench/tests/unit/test_task_sets.py @@ -0,0 +1,38 @@ +import unittest +from rlbench.tasks import (FS10_V1, FS25_V1, FS50_V1, FS95_V1, MT15_V1, + MT30_V1, MT55_V1, MT100_V1) + + +FS_V1 = [ + (FS10_V1, 10, 5), + (FS25_V1, 25, 5), + (FS50_V1, 50, 5), + (FS95_V1, 95, 5)] + +MT_V1 = [ + (MT15_V1, 15), + (MT30_V1, 30), + (MT55_V1, 55), + (MT100_V1, 100)] + + +class TestTaskSet(unittest.TestCase): + + def test_fs_v1(self): + for ts, train, test in FS_V1: + with self.subTest(task_set='FS%d_V1' % train): + self.assertEqual(len(ts['train']), train) + self.assertEqual(len(ts['test']), test) + # Test no duplicates + self.assertEqual(len(ts['train'] + ts['test']), + len(set(ts['train'] + ts['test']))) + self.assertFalse(any(i in ts['test'] for i in ts['train'])) + + def test_mt_v1(self): + for ts, train in MT_V1: + with self.subTest(task_set='MT%d_V1' % train): + self.assertEqual(len(ts['train']), train) + # Test no duplicates + self.assertEqual(len(ts['train']), len(set(ts['train']))) + + diff --git a/external/rlbench/tests/unit/test_tasks.py b/external/rlbench/tests/unit/test_tasks.py new file mode 100644 index 0000000000000000000000000000000000000000..b64491d53c316a5c497283aa86b6eecb9313a474 --- /dev/null +++ b/external/rlbench/tests/unit/test_tasks.py @@ -0,0 +1,55 @@ +import unittest +import rlbench.backend.task as task +import os +from rlbench.backend.utils import task_file_to_task_class +from pyrep import PyRep +from pyrep.robots.arms.panda import Panda +from pyrep.robots.end_effectors.panda_gripper import PandaGripper +from rlbench.backend.const import TTT_FILE +from tools.task_validator import task_smoke, TaskValidationError +from rlbench.observation_config import ObservationConfig +from rlbench.backend.scene import Scene +from rlbench.backend.robot import Robot +from rlbench.backend.robot import UnimanualRobot + + +TASKS = [t for t in os.listdir(task.TASKS_PATH) + if t != '__init__.py' and t.endswith('.py')] +DIR_PATH = os.path.dirname(os.path.abspath(__file__)) + + +class TestTasks(unittest.TestCase): + """Tests all of the tasks via the task_validator tool but not testing demos. + + This is a lighter-weight test than the full demo smoke that is run in the + `tasks` test directory. + """ + + def test_run_task_validator(self): + sim = PyRep() + ttt_file = os.path.join( + DIR_PATH, '..', '..', 'rlbench', TTT_FILE) + sim.launch(ttt_file, headless=True) + sim.step_ui() + sim.set_simulation_timestep(50.0) + sim.step_ui() + sim.start() + robot = UnimanualRobot(Panda(), PandaGripper()) + obs = ObservationConfig() + obs.set_all(False) + scene = Scene(sim, robot, obs) + + for task_file in TASKS: + test_name = task_file.split('.py')[0] + with self.subTest(task=test_name): + sim.start() + task_class = task_file_to_task_class(task_file) + active_task = task_class(sim, robot) + try: + task_smoke(active_task, scene, variation=-1, + test_demos=False, max_variations=9999) + except Exception as e: + sim.stop() + raise e + sim.stop() + sim.shutdown() diff --git a/external/rlbench/tools/assets/bimanual_task_template.txt b/external/rlbench/tools/assets/bimanual_task_template.txt new file mode 100644 index 0000000000000000000000000000000000000000..b87d5c0492667d9754e98423211599352bf75af5 --- /dev/null +++ b/external/rlbench/tools/assets/bimanual_task_template.txt @@ -0,0 +1,26 @@ +from typing import List +from rlbench.backend.task import Task +from rlbench.backend.task import BimanualTask + + +class %s(BimanualTask): + + def init_task(self) -> None: + # TODO: This is called once when a task is initialised. + pass + + def init_episode(self, index: int) -> List[str]: + # TODO: This is called at the start of each episode. + return [''] + + def variation_count(self) -> int: + # TODO: The number of variations for this task. + return 1 + + def step(self) -> None: + # Called during each sim step. Remove this if not using. + pass + + def cleanup(self) -> None: + # Called during at the end of each episode. Remove this if not using. + pass diff --git a/external/rlbench/tools/assets/task_template.txt b/external/rlbench/tools/assets/task_template.txt new file mode 100644 index 0000000000000000000000000000000000000000..4cc8c4d0736ce63b39f45e876098fdc0e1130070 --- /dev/null +++ b/external/rlbench/tools/assets/task_template.txt @@ -0,0 +1,25 @@ +from typing import List +from rlbench.backend.task import Task + + +class %s(Task): + + def init_task(self) -> None: + # TODO: This is called once when a task is initialised. + pass + + def init_episode(self, index: int) -> List[str]: + # TODO: This is called at the start of each episode. + return [''] + + def variation_count(self) -> int: + # TODO: The number of variations for this task. + return 1 + + def step(self) -> None: + # Called during each sim step. Remove this if not using. + pass + + def cleanup(self) -> None: + # Called during at the end of each episode. Remove this if not using. + pass diff --git a/external/rlbench/tools/cinematic_recorder.py b/external/rlbench/tools/cinematic_recorder.py new file mode 100644 index 0000000000000000000000000000000000000000..fed238c77efd7c05f6c526ea3ff30302c5a9914c --- /dev/null +++ b/external/rlbench/tools/cinematic_recorder.py @@ -0,0 +1,158 @@ +import os +from typing import Type +import numpy as np +from absl import app +from absl import flags +from pyrep.objects.dummy import Dummy +from pyrep.objects.vision_sensor import VisionSensor + +from rlbench import Environment +from rlbench.action_modes.action_mode import MoveArmThenGripper +from rlbench.action_modes.arm_action_modes import JointVelocity +from rlbench.action_modes.gripper_action_modes import Discrete +from rlbench.backend.observation import Observation +from rlbench.backend.task import TASKS_PATH +from rlbench.backend.task import Task +from rlbench.backend.utils import task_file_to_task_class +from rlbench.observation_config import ObservationConfig +from rlbench.sim2real.domain_randomization import RandomizeEvery, \ + VisualRandomizationConfig + +FLAGS = flags.FLAGS + +flags.DEFINE_string( + 'save_dir', '/tmp/rlbench_videos/', + 'Where to save the generated videos.') +flags.DEFINE_list( + 'tasks', [], 'The tasks to record. If empty, all tasks are recorded.') +flags.DEFINE_boolean( + 'individual', True, 'One long clip of all the tasks, or individual videos.') +flags.DEFINE_boolean( + 'domain_randomization', False, 'If domain randomization should be applied.') +flags.DEFINE_string( + 'textures_path', '', + 'Where to locate textures if using domain randomization.') +flags.DEFINE_boolean('headless', True, 'Run in headless mode.') +flags.DEFINE_list( + 'camera_resolution', [1280, 720], 'The camera resolution') + + +class CameraMotion(object): + def __init__(self, cam: VisionSensor): + self.cam = cam + + def step(self): + raise NotImplementedError() + + def save_pose(self): + self._prev_pose = self.cam.get_pose() + + def restore_pose(self): + self.cam.set_pose(self._prev_pose) + + +class CircleCameraMotion(CameraMotion): + + def __init__(self, cam: VisionSensor, origin: Dummy, + speed: float, init_rotation: float = np.deg2rad(0)): + super().__init__(cam) + self.origin = origin + self.speed = speed # in radians + self.origin.rotate([0, 0, init_rotation]) + + def step(self): + self.origin.rotate([0, 0, self.speed]) + + +class TaskRecorder(object): + + def __init__(self, env: Environment, cam_motion: CameraMotion, fps=30): + self._env = env + self._cam_motion = cam_motion + self._fps = fps + self._snaps = [] + self._current_snaps = [] + + def take_snap(self, obs: Observation): + self._cam_motion.step() + self._current_snaps.append( + (self._cam_motion.cam.capture_rgb() * 255.).astype(np.uint8)) + + def record_task(self, task: Type[Task]): + task = self._env.get_task(task) + self._cam_motion.save_pose() + while True: + try: + task.get_demos( + 1, live_demos=True, callable_each_step=self.take_snap, + max_attempts=1) + break + except RuntimeError: + self._cam_motion.restore_pose() + self._current_snaps = [] + self._snaps.extend(self._current_snaps) + self._current_snaps = [] + return True + + def save(self, path): + print('Converting to video ...') + os.makedirs(os.path.dirname(path), exist_ok=True) + # OpenCV QT version can conflict with PyRep, so import here + import cv2 + video = cv2.VideoWriter( + path, cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), self._fps, + tuple(self._cam_motion.cam.get_resolution())) + for image in self._snaps: + video.write(cv2.cvtColor(image, cv2.COLOR_RGB2BGR)) + video.release() + self._snaps = [] + + +def main(argv): + + obs_config = ObservationConfig(record_gripper_closing=True) + obs_config.set_all(False) + + vrc = rand_every = None + frequency = 0 + if FLAGS.domain_randomization: + vrc = VisualRandomizationConfig(FLAGS.textures_path) + rand_every = RandomizeEvery.TRANSITION + frequency = 10 + + action_mode = MoveArmThenGripper( + arm_action_mode=JointVelocity(), gripper_action_mode=Discrete()) + env = Environment(action_mode, obs_config=obs_config, + randomize_every=rand_every, frequency=frequency, + visual_randomization_config=vrc, headless=FLAGS.headless) + env.launch() + + # Add the camera to the scene + cam_placeholder = Dummy('cam_cinematic_placeholder') + cam = VisionSensor.create(FLAGS.camera_resolution) + cam.set_pose(cam_placeholder.get_pose()) + cam.set_parent(cam_placeholder) + + cam_motion = CircleCameraMotion(cam, Dummy('cam_cinematic_base'), 0.005) + tr = TaskRecorder(env, cam_motion, fps=30) + + if len(FLAGS.tasks) > 0: + task_names = FLAGS.tasks + else: + task_names = [t.split('.py')[0] for t in os.listdir(TASKS_PATH) + if t != '__init__.py' and t.endswith('.py')] + task_classes = [task_file_to_task_class( + task_file) for task_file in task_names] + + for i, (name, cls) in enumerate(zip(task_names, task_classes)): + good = tr.record_task(cls) + if FLAGS.individual and good: + tr.save(os.path.join(FLAGS.save_dir, '%s.avi' % name)) + + if not FLAGS.individual: + tr.save(os.path.join(FLAGS.save_dir, 'recorded_tasks.mp4')) + env.shutdown() + + +if __name__ == '__main__': + app.run(main) diff --git a/external/rlbench/tools/create_videos.py b/external/rlbench/tools/create_videos.py new file mode 100644 index 0000000000000000000000000000000000000000..a36881bbe05790d0079bd2b6701955c9600c6476 --- /dev/null +++ b/external/rlbench/tools/create_videos.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 + + +import os +import traceback + +from pyrep import PyRep +from pyrep.const import RenderMode +from pyrep.robots.arms.dual_panda import PandaLeft, PandaRight +from pyrep.robots.end_effectors.dual_panda_gripper import PandaGripperLeft, PandaGripperRight +from pyrep.objects.shape import Shape + +from yarr.utils.video_utils import CircleCameraMotion +from yarr.utils.video_utils import TaskRecorder + +from pyrep.objects.dummy import Dummy +from pyrep.objects.vision_sensor import VisionSensor + + +from rlbench.backend.exceptions import * +from rlbench.observation_config import ObservationConfig +from rlbench.observation_config import CameraConfig + +from rlbench.backend.robot import Robot +from rlbench.backend.robot import BimanualRobot +from rlbench.backend.scene import Scene + +from rlbench.backend.task import BIMANUAL_TASKS_PATH +from rlbench.backend.const import BIMANUAL_TTT_FILE + +import rich_click as click +from click_prompt import choice_option + + +from rlbench.utils import name_to_task_class + +def main(): + render_videos_for_task() + + +def get_bimanual_tasks(): + return [t.replace('.py', '') for t in + os.listdir(BIMANUAL_TASKS_PATH) if t != '__init__.py' and t.endswith('.py')] + + +@click.command() +@choice_option('--bimanual-task-files', type=click.Choice(sorted(get_bimanual_tasks())), multiple=True) +@click.option('--add-task-description/--no-task-description', default=False) +@click.option('--add-gripper-color/--no-gripper-color', default=False) +def render_videos_for_task(bimanual_task_files, add_task_description, add_gripper_color): + + CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) + + pr = PyRep() + ttt_file = os.path.join(CURRENT_DIR, '..', 'rlbench', BIMANUAL_TTT_FILE) + pr.launch(ttt_file, responsive_ui=True) + pr.step_ui() + + robot = BimanualRobot(PandaRight(), PandaGripperRight(), PandaLeft(), PandaGripperLeft()) + + if add_gripper_color: + robot.colorize_gripper() + + cam_config = CameraConfig(rgb=True, depth=False, mask=False, + render_mode=RenderMode.OPENGL3) + obs_config = ObservationConfig() + obs_config.set_all(False) + obs_config.right_shoulder_camera = cam_config + obs_config.left_shoulder_camera = cam_config + obs_config.overhead_camera = cam_config + obs_config.wrist_camera = cam_config + obs_config.front_camera = cam_config + + scene = Scene(pr, robot, obs_config) + + for task_file in bimanual_task_files: + + + if add_task_description: + task_name_mapping = {} + task_description = task_name_mapping.get(task_file, f"Demo for task {task_file}") + else: + task_description = "" + + task_class = name_to_task_class(task_file, True) + task = task_class(pr, robot, task_file.replace('.py', '')) + try: + print(f"Loading {task_file}") + scene.load(task) + pr.start() + pr.step_ui() + + record_demo(scene, task, task_file, task_description) + scene.reset() + scene.unload() + + pr.stop() + pr.step_ui() + + + except Exception as e: + print("error while loading task") + print(e) + + + pr.step_ui() + + pr.stop() + pr.shutdown() + + +def record_demo(scene, task, task_file, task_description): + + cam_placeholder = Dummy('cam_cinematic_placeholder') + cam = VisionSensor.create([1920, 1200], background_color=[1.0, 1.0, 1.0]) + cam.set_pose(cam_placeholder.get_pose()) + cam.set_parent(cam_placeholder) + + scene_background = ["Wall1", "Wall2", "Wall3", "Wall4", "Floor", "Roof", "ResizableFloor_5_25_visibleElement"] + + for object_name in scene_background: + Shape(object_name).set_renderable(False) + + cam_motion = CircleCameraMotion(cam, Dummy('cam_cinematic_base'), 0.005) + tr = TaskRecorder(None, cam_motion, fps=30) + + try: + scene.get_demo(False, callable_each_step=tr.take_snap, randomly_place=False) + except (WaypointError, NoWaypointsError, DemoError, Exception) as e: + traceback.print_exc() + return + success, terminate = task.success() + + task_result = "success" if success else "failed" + + recording_output_path = f"/tmp/{task_result}/rlbench_video_{task_file}.mp4" + + os.makedirs(os.path.dirname(recording_output_path), exist_ok=True) + + tr.save(recording_output_path, task_description, None) + + print(f"Saving video to {recording_output_path}") + + for object_name in scene_background: + Shape(object_name).set_renderable(True) + + if success: + print("Demo was a success!") + + +if __name__ == '__main__': + main() diff --git a/external/rlbench/tools/dataset_generator.py b/external/rlbench/tools/dataset_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..a7ffc511524fb92eec5cd8ea06a594c1d2ceeacd --- /dev/null +++ b/external/rlbench/tools/dataset_generator.py @@ -0,0 +1,461 @@ +from multiprocessing import Process, Manager + +from pyrep.const import RenderMode + +from rlbench import ObservationConfig +from rlbench.action_modes.action_mode import MoveArmThenGripper +from rlbench.action_modes.arm_action_modes import JointVelocity +from rlbench.action_modes.gripper_action_modes import Discrete +from rlbench.backend.utils import task_file_to_task_class +from rlbench.environment import Environment +import rlbench.backend.task as task + +import os +import pickle +from PIL import Image +from rlbench.backend import utils +from rlbench.backend.const import * +import numpy as np + +from absl import app +from absl import flags + +FLAGS = flags.FLAGS + +flags.DEFINE_string('save_path', + '/tmp/rlbench_data/', + 'Where to save the demos.') +flags.DEFINE_list('tasks', [], + 'The tasks to collect. If empty, all tasks are collected.') +flags.DEFINE_list('image_size', [128, 128], + 'The size of the images tp save.') +flags.DEFINE_enum('renderer', 'opengl3', ['opengl', 'opengl3'], + 'The renderer to use. opengl does not include shadows, ' + 'but is faster.') +flags.DEFINE_integer('processes', 1, + 'The number of parallel processes during collection.') +flags.DEFINE_integer('episodes_per_task', 10, + 'The number of episodes to collect per task.') +flags.DEFINE_integer('variations', -1, + 'Number of variations to collect per task. -1 for all.') +flags.DEFINE_bool('all_variations', True, + 'Include all variations when sampling epsiodes') + + +def check_and_make(dir): + if not os.path.exists(dir): + os.makedirs(dir) + + +def save_demo(demo, example_path, variation): + + # Save image data first, and then None the image data, and pickle + left_shoulder_rgb_path = os.path.join( + example_path, LEFT_SHOULDER_RGB_FOLDER) + left_shoulder_depth_path = os.path.join( + example_path, LEFT_SHOULDER_DEPTH_FOLDER) + left_shoulder_mask_path = os.path.join( + example_path, LEFT_SHOULDER_MASK_FOLDER) + right_shoulder_rgb_path = os.path.join( + example_path, RIGHT_SHOULDER_RGB_FOLDER) + right_shoulder_depth_path = os.path.join( + example_path, RIGHT_SHOULDER_DEPTH_FOLDER) + right_shoulder_mask_path = os.path.join( + example_path, RIGHT_SHOULDER_MASK_FOLDER) + overhead_rgb_path = os.path.join( + example_path, OVERHEAD_RGB_FOLDER) + overhead_depth_path = os.path.join( + example_path, OVERHEAD_DEPTH_FOLDER) + overhead_mask_path = os.path.join( + example_path, OVERHEAD_MASK_FOLDER) + wrist_rgb_path = os.path.join(example_path, WRIST_RGB_FOLDER) + wrist_depth_path = os.path.join(example_path, WRIST_DEPTH_FOLDER) + wrist_mask_path = os.path.join(example_path, WRIST_MASK_FOLDER) + front_rgb_path = os.path.join(example_path, FRONT_RGB_FOLDER) + front_depth_path = os.path.join(example_path, FRONT_DEPTH_FOLDER) + front_mask_path = os.path.join(example_path, FRONT_MASK_FOLDER) + + check_and_make(left_shoulder_rgb_path) + check_and_make(left_shoulder_depth_path) + check_and_make(left_shoulder_mask_path) + check_and_make(right_shoulder_rgb_path) + check_and_make(right_shoulder_depth_path) + check_and_make(right_shoulder_mask_path) + check_and_make(overhead_rgb_path) + check_and_make(overhead_depth_path) + check_and_make(overhead_mask_path) + check_and_make(wrist_rgb_path) + check_and_make(wrist_depth_path) + check_and_make(wrist_mask_path) + check_and_make(front_rgb_path) + check_and_make(front_depth_path) + check_and_make(front_mask_path) + + for i, obs in enumerate(demo): + left_shoulder_rgb = Image.fromarray(obs.left_shoulder_rgb) + left_shoulder_depth = utils.float_array_to_rgb_image( + obs.left_shoulder_depth, scale_factor=DEPTH_SCALE) + left_shoulder_mask = Image.fromarray( + (obs.left_shoulder_mask * 255).astype(np.uint8)) + right_shoulder_rgb = Image.fromarray(obs.right_shoulder_rgb) + right_shoulder_depth = utils.float_array_to_rgb_image( + obs.right_shoulder_depth, scale_factor=DEPTH_SCALE) + right_shoulder_mask = Image.fromarray( + (obs.right_shoulder_mask * 255).astype(np.uint8)) + overhead_rgb = Image.fromarray(obs.overhead_rgb) + overhead_depth = utils.float_array_to_rgb_image( + obs.overhead_depth, scale_factor=DEPTH_SCALE) + overhead_mask = Image.fromarray( + (obs.overhead_mask * 255).astype(np.uint8)) + wrist_rgb = Image.fromarray(obs.wrist_rgb) + wrist_depth = utils.float_array_to_rgb_image( + obs.wrist_depth, scale_factor=DEPTH_SCALE) + wrist_mask = Image.fromarray((obs.wrist_mask * 255).astype(np.uint8)) + front_rgb = Image.fromarray(obs.front_rgb) + front_depth = utils.float_array_to_rgb_image( + obs.front_depth, scale_factor=DEPTH_SCALE) + front_mask = Image.fromarray((obs.front_mask * 255).astype(np.uint8)) + + left_shoulder_rgb.save( + os.path.join(left_shoulder_rgb_path, IMAGE_FORMAT % i)) + left_shoulder_depth.save( + os.path.join(left_shoulder_depth_path, IMAGE_FORMAT % i)) + left_shoulder_mask.save( + os.path.join(left_shoulder_mask_path, IMAGE_FORMAT % i)) + right_shoulder_rgb.save( + os.path.join(right_shoulder_rgb_path, IMAGE_FORMAT % i)) + right_shoulder_depth.save( + os.path.join(right_shoulder_depth_path, IMAGE_FORMAT % i)) + right_shoulder_mask.save( + os.path.join(right_shoulder_mask_path, IMAGE_FORMAT % i)) + overhead_rgb.save( + os.path.join(overhead_rgb_path, IMAGE_FORMAT % i)) + overhead_depth.save( + os.path.join(overhead_depth_path, IMAGE_FORMAT % i)) + overhead_mask.save( + os.path.join(overhead_mask_path, IMAGE_FORMAT % i)) + wrist_rgb.save(os.path.join(wrist_rgb_path, IMAGE_FORMAT % i)) + wrist_depth.save(os.path.join(wrist_depth_path, IMAGE_FORMAT % i)) + wrist_mask.save(os.path.join(wrist_mask_path, IMAGE_FORMAT % i)) + front_rgb.save(os.path.join(front_rgb_path, IMAGE_FORMAT % i)) + front_depth.save(os.path.join(front_depth_path, IMAGE_FORMAT % i)) + front_mask.save(os.path.join(front_mask_path, IMAGE_FORMAT % i)) + + # We save the images separately, so set these to None for pickling. + obs.left_shoulder_rgb = None + obs.left_shoulder_depth = None + obs.left_shoulder_point_cloud = None + obs.left_shoulder_mask = None + obs.right_shoulder_rgb = None + obs.right_shoulder_depth = None + obs.right_shoulder_point_cloud = None + obs.right_shoulder_mask = None + obs.overhead_rgb = None + obs.overhead_depth = None + obs.overhead_point_cloud = None + obs.overhead_mask = None + obs.wrist_rgb = None + obs.wrist_depth = None + obs.wrist_point_cloud = None + obs.wrist_mask = None + obs.front_rgb = None + obs.front_depth = None + obs.front_point_cloud = None + obs.front_mask = None + + # Save the low-dimension data + with open(os.path.join(example_path, LOW_DIM_PICKLE), 'wb') as f: + pickle.dump(demo, f) + + + with open(os.path.join(example_path, VARIATION_NUMBER), 'wb') as f: + pickle.dump(variation, f) + + +def run(i, lock, task_index, variation_count, results, file_lock, tasks): + """Each thread will choose one task and variation, and then gather + all the episodes_per_task for that variation.""" + + # Initialise each thread with random seed + np.random.seed(None) + num_tasks = len(tasks) + + img_size = list(map(int, FLAGS.image_size)) + + obs_config = ObservationConfig() + obs_config.set_all(True) + obs_config.right_shoulder_camera.image_size = img_size + obs_config.left_shoulder_camera.image_size = img_size + obs_config.overhead_camera.image_size = img_size + obs_config.wrist_camera.image_size = img_size + obs_config.front_camera.image_size = img_size + + # Store depth as 0 - 1 + obs_config.right_shoulder_camera.depth_in_meters = False + obs_config.left_shoulder_camera.depth_in_meters = False + obs_config.overhead_camera.depth_in_meters = False + obs_config.wrist_camera.depth_in_meters = False + obs_config.front_camera.depth_in_meters = False + + # We want to save the masks as rgb encodings. + obs_config.left_shoulder_camera.masks_as_one_channel = False + obs_config.right_shoulder_camera.masks_as_one_channel = False + obs_config.overhead_camera.masks_as_one_channel = False + obs_config.wrist_camera.masks_as_one_channel = False + obs_config.front_camera.masks_as_one_channel = False + + if FLAGS.renderer == 'opengl': + obs_config.right_shoulder_camera.render_mode = RenderMode.OPENGL + obs_config.left_shoulder_camera.render_mode = RenderMode.OPENGL + obs_config.overhead_camera.render_mode = RenderMode.OPENGL + obs_config.wrist_camera.render_mode = RenderMode.OPENGL + obs_config.front_camera.render_mode = RenderMode.OPENGL + + rlbench_env = Environment( + action_mode=MoveArmThenGripper(JointVelocity(), Discrete()), + obs_config=obs_config, + headless=True) + rlbench_env.launch() + + task_env = None + + tasks_with_problems = results[i] = '' + + while True: + # Figure out what task/variation this thread is going to do + with lock: + + if task_index.value >= num_tasks: + print('Process', i, 'finished') + break + + my_variation_count = variation_count.value + t = tasks[task_index.value] + task_env = rlbench_env.get_task(t) + var_target = task_env.variation_count() + if FLAGS.variations >= 0: + var_target = np.minimum(FLAGS.variations, var_target) + if my_variation_count >= var_target: + # If we have reached the required number of variations for this + # task, then move on to the next task. + variation_count.value = my_variation_count = 0 + task_index.value += 1 + + variation_count.value += 1 + if task_index.value >= num_tasks: + print('Process', i, 'finished') + break + t = tasks[task_index.value] + + variation_path = os.path.join( + FLAGS.save_path, task_env.get_name(), + VARIATIONS_FOLDER % my_variation_count) + check_and_make(variation_path) + + episodes_path = os.path.join(variation_path, EPISODES_FOLDER) + check_and_make(episodes_path) + + abort_variation = False + for ex_idx in range(FLAGS.episodes_per_task): + print('Process', i, '// Task:', task_env.get_name(), + '// Variation:', my_variation_count, '// Demo:', ex_idx) + attempts = 10 + while attempts > 0: + try: + task_env = rlbench_env.get_task(t) + task_env.set_variation(my_variation_count) + descriptions, obs = task_env.reset() + + # TODO: for now we do the explicit looping. + demo, = task_env.get_demos( + amount=1, + live_demos=True) + except Exception as e: + attempts -= 1 + if attempts > 0: + continue + problem = ( + 'Process %d failed collecting task %s (variation: %d, ' + 'example: %d). Skipping this task/variation.\n%s\n' % ( + i, task_env.get_name(), my_variation_count, ex_idx, + str(e)) + ) + print(problem) + tasks_with_problems += problem + abort_variation = True + break + episode_path = os.path.join(episodes_path, EPISODE_FOLDER % ex_idx) + with file_lock: + save_demo(demo, episode_path, my_variation_count) + + with open(os.path.join( + episode_path, VARIATION_DESCRIPTIONS), 'wb') as f: + pickle.dump(descriptions, f) + break + if abort_variation: + break + + results[i] = tasks_with_problems + rlbench_env.shutdown() + + +def run_all_variations(i, lock, task_index, variation_count, results, file_lock, tasks): + """Each thread will choose one task and variation, and then gather + all the episodes_per_task for that variation.""" + + # Initialise each thread with random seed + np.random.seed(None) + num_tasks = len(tasks) + + img_size = list(map(int, FLAGS.image_size)) + + obs_config = ObservationConfig() + obs_config.set_all(True) + obs_config.right_shoulder_camera.image_size = img_size + obs_config.left_shoulder_camera.image_size = img_size + obs_config.overhead_camera.image_size = img_size + obs_config.wrist_camera.image_size = img_size + obs_config.front_camera.image_size = img_size + + # Store depth as 0 - 1 + obs_config.right_shoulder_camera.depth_in_meters = False + obs_config.left_shoulder_camera.depth_in_meters = False + obs_config.overhead_camera.depth_in_meters = False + obs_config.wrist_camera.depth_in_meters = False + obs_config.front_camera.depth_in_meters = False + + # We want to save the masks as rgb encodings. + obs_config.left_shoulder_camera.masks_as_one_channel = False + obs_config.right_shoulder_camera.masks_as_one_channel = False + obs_config.overhead_camera.masks_as_one_channel = False + obs_config.wrist_camera.masks_as_one_channel = False + obs_config.front_camera.masks_as_one_channel = False + + if FLAGS.renderer == 'opengl': + obs_config.right_shoulder_camera.render_mode = RenderMode.OPENGL + obs_config.left_shoulder_camera.render_mode = RenderMode.OPENGL + obs_config.overhead_camera.render_mode = RenderMode.OPENGL + obs_config.wrist_camera.render_mode = RenderMode.OPENGL + obs_config.front_camera.render_mode = RenderMode.OPENGL + + rlbench_env = Environment( + action_mode=MoveArmThenGripper(JointVelocity(), Discrete()), + obs_config=obs_config, + headless=True) + rlbench_env.launch() + + task_env = None + + tasks_with_problems = results[i] = '' + + while True: + # with lock: + if task_index.value >= num_tasks: + print('Process', i, 'finished') + break + + t = tasks[task_index.value] + + task_env = rlbench_env.get_task(t) + possible_variations = task_env.variation_count() + + variation_path = os.path.join( + FLAGS.save_path, task_env.get_name(), + VARIATIONS_ALL_FOLDER) + check_and_make(variation_path) + + episodes_path = os.path.join(variation_path, EPISODES_FOLDER) + check_and_make(episodes_path) + + abort_variation = False + for ex_idx in range(FLAGS.episodes_per_task): + attempts = 10 + while attempts > 0: + try: + variation = np.random.randint(possible_variations) + task_env = rlbench_env.get_task(t) + task_env.set_variation(variation) + descriptions, obs = task_env.reset() + + print('Process', i, '// Task:', task_env.get_name(), + '// Variation:', variation, '// Demo:', ex_idx) + + # TODO: for now we do the explicit looping. + demo, = task_env.get_demos( + amount=1, + live_demos=True) + except Exception as e: + attempts -= 1 + if attempts > 0: + continue + problem = ( + 'Process %d failed collecting task %s (variation: %d, ' + 'example: %d). Skipping this task/variation.\n%s\n' % ( + i, task_env.get_name(), variation, ex_idx, + str(e)) + ) + print(problem) + tasks_with_problems += problem + abort_variation = True + break + episode_path = os.path.join(episodes_path, EPISODE_FOLDER % ex_idx) + with file_lock: + save_demo(demo, episode_path, variation) + + with open(os.path.join( + episode_path, VARIATION_DESCRIPTIONS), 'wb') as f: + pickle.dump(descriptions, f) + break + if abort_variation: + break + + # with lock: + task_index.value += 1 + + results[i] = tasks_with_problems + rlbench_env.shutdown() + + +def main(argv): + + task_files = [t.replace('.py', '') for t in os.listdir(task.TASKS_PATH) + if t != '__init__.py' and t.endswith('.py')] + + if len(FLAGS.tasks) > 0: + for t in FLAGS.tasks: + if t not in task_files: + raise ValueError('Task %s not recognised!.' % t) + task_files = FLAGS.tasks + + tasks = [task_file_to_task_class(t) for t in task_files] + + manager = Manager() + + result_dict = manager.dict() + file_lock = manager.Lock() + + task_index = manager.Value('i', 0) + variation_count = manager.Value('i', 0) + lock = manager.Lock() + + check_and_make(FLAGS.save_path) + + if FLAGS.all_variations: + # multiprocessing for all_variations not support (for now) + run_all_variations(0, lock, task_index, variation_count, result_dict, file_lock, tasks) + else: + processes = [Process( + target=run, args=( + i, lock, task_index, variation_count, result_dict, file_lock, + tasks)) + for i in range(FLAGS.processes)] + [t.start() for t in processes] + [t.join() for t in processes] + + print('Data collection done!') + for i in range(FLAGS.processes): + print(result_dict[i]) + + +if __name__ == '__main__': + app.run(main) diff --git a/external/rlbench/tutorials/tutorial_images/adjust_shape_color_labeled.png b/external/rlbench/tutorials/tutorial_images/adjust_shape_color_labeled.png new file mode 100644 index 0000000000000000000000000000000000000000..9408cae3e8d757677b392f677128eb0a7df09ce8 Binary files /dev/null and b/external/rlbench/tutorials/tutorial_images/adjust_shape_color_labeled.png differ diff --git a/external/rlbench/tutorials/tutorial_images/create_cuboid_dialog.png b/external/rlbench/tutorials/tutorial_images/create_cuboid_dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..00198c0c29e14235f93e3f44a08562d49ebc29ab Binary files /dev/null and b/external/rlbench/tutorials/tutorial_images/create_cuboid_dialog.png differ diff --git a/external/rlbench/tutorials/tutorial_images/create_new_task_labeled.png b/external/rlbench/tutorials/tutorial_images/create_new_task_labeled.png new file mode 100644 index 0000000000000000000000000000000000000000..e08199bba587eb539922158b111ceb02f71434f1 Binary files /dev/null and b/external/rlbench/tutorials/tutorial_images/create_new_task_labeled.png differ