aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuneChul Roh2021-04-14 10:12:01 -0500
committerJuneChul Roh2021-04-14 10:12:01 -0500
commit8c164ac623d0eacc6856d621ff8bad07d52c7041 (patch)
tree9baeb43ee8ff17e6fb486b6b33fb1835b3397dc3
parentef9a1d7ae184cef51dd80431d62dd5e49e87d1fb (diff)
downloadjacinto_ros_perception-8c164ac623d0eacc6856d621ff8bad07d52c7041.tar.gz
jacinto_ros_perception-8c164ac623d0eacc6856d621ff8bad07d52c7041.tar.xz
jacinto_ros_perception-8c164ac623d0eacc6856d621ff8bad07d52c7041.zip
REL.00.03.00.02. Compatible with: J7 PSDK-RTOS 07_03_00_07, tidl-semseg-model_2.0.0.7.tar.gz, ros-bag_2020_1109.tar.gz
-rw-r--r--README.md49
-rw-r--r--cmake/common.cmake13
-rw-r--r--docker/Dockerfile.ros-perception111
-rw-r--r--docker/Dockerfile.rosdep (renamed from docker/Dockerfile)19
-rw-r--r--docker/Makefile30
-rw-r--r--docker/README.md175
-rw-r--r--docker/docs/tiovx_ros_demo_diagram.pngbin33726 -> 32749 bytes
-rw-r--r--docker/docs/tiovx_ros_demo_diagram.svg1001
-rwxr-xr-xdocker/ros_setup.sh16
-rwxr-xr-xdocker/scripts/config_opkg_repo.sh43
-rwxr-xr-xdocker/scripts/install_tivision_apps_ipk.sh16
-rw-r--r--docker/setup_ti_processor_sdk.sh23
-rw-r--r--drivers/zed_capture/CMakeLists.txt40
-rw-r--r--drivers/zed_capture/README.md88
-rw-r--r--drivers/zed_capture/config/README.txt2
-rw-r--r--drivers/zed_capture/config/SN29788442.conf105
-rw-r--r--drivers/zed_capture/config/SN29788442_FHD_LUT_left.binbin0 -> 537664 bytes
-rw-r--r--drivers/zed_capture/config/SN29788442_FHD_LUT_right.binbin0 -> 537664 bytes
-rw-r--r--drivers/zed_capture/config/SN29788442_FHD_camera_info_left.yaml35
-rw-r--r--drivers/zed_capture/config/SN29788442_FHD_camera_info_right.yaml35
-rw-r--r--drivers/zed_capture/config/SN29788442_HD2_LUT_left.binbin0 -> 243264 bytes
-rw-r--r--drivers/zed_capture/config/SN29788442_HD2_LUT_right.binbin0 -> 243264 bytes
-rw-r--r--drivers/zed_capture/config/SN29788442_HD2_camera_info_left.yaml35
-rw-r--r--drivers/zed_capture/config/SN29788442_HD2_camera_info_right.yaml35
-rw-r--r--drivers/zed_capture/config/SN29788442_HD_LUT_left.binbin0 -> 243264 bytes
-rw-r--r--drivers/zed_capture/config/SN29788442_HD_LUT_right.binbin0 -> 243264 bytes
-rw-r--r--drivers/zed_capture/config/SN29788442_HD_camera_info_left.yaml35
-rw-r--r--drivers/zed_capture/config/SN29788442_HD_camera_info_right.yaml35
-rw-r--r--drivers/zed_capture/config/SN29788442_HD_remap_LUT_left.txt921600
-rw-r--r--drivers/zed_capture/config/SN29788442_HD_remap_LUT_right.txt921600
-rw-r--r--drivers/zed_capture/config/SN5867575.conf105
-rw-r--r--drivers/zed_capture/config/SN5867575_FHD_LUT_left.binbin0 -> 537664 bytes
-rw-r--r--drivers/zed_capture/config/SN5867575_FHD_LUT_right.binbin0 -> 537664 bytes
-rw-r--r--drivers/zed_capture/config/SN5867575_FHD_camera_info_left.yaml35
-rw-r--r--drivers/zed_capture/config/SN5867575_FHD_camera_info_right.yaml35
-rw-r--r--drivers/zed_capture/config/SN5867575_HD2_LUT_left.binbin0 -> 243264 bytes
-rw-r--r--drivers/zed_capture/config/SN5867575_HD2_LUT_right.binbin0 -> 243264 bytes
-rw-r--r--drivers/zed_capture/config/SN5867575_HD2_camera_info_left.yaml35
-rw-r--r--drivers/zed_capture/config/SN5867575_HD2_camera_info_right.yaml35
-rw-r--r--drivers/zed_capture/config/SN5867575_HD_LUT_left.binbin0 -> 243264 bytes
-rw-r--r--drivers/zed_capture/config/SN5867575_HD_LUT_right.binbin0 -> 243264 bytes
-rw-r--r--drivers/zed_capture/config/SN5867575_HD_camera_info_left.yaml35
-rw-r--r--drivers/zed_capture/config/SN5867575_HD_camera_info_right.yaml35
-rw-r--r--drivers/zed_capture/include/nodeletT.h88
-rw-r--r--drivers/zed_capture/include/usb_stereo_camera.h110
-rw-r--r--drivers/zed_capture/include/zed_capture_node.h104
-rw-r--r--drivers/zed_capture/launch/recordbag.launch6
-rw-r--r--drivers/zed_capture/launch/recordbag_split.launch6
-rw-r--r--drivers/zed_capture/launch/zed_capture.launch33
-rw-r--r--drivers/zed_capture/package.xml35
-rwxr-xr-xdrivers/zed_capture/script/generate_undist_rect_map.py281
-rw-r--r--drivers/zed_capture/script/requirements.txt6
-rw-r--r--drivers/zed_capture/src/usb_stereo_camera.cpp222
-rw-r--r--drivers/zed_capture/src/zed_capture_node.cpp225
-rw-r--r--drivers/zed_capture/src/zed_capture_nodelet.cpp72
-rw-r--r--drivers/zed_capture/zed_capture_nodelet.xml9
-rw-r--r--manifest.html38
-rw-r--r--nodes/common/cm_common.cpp581
-rw-r--r--nodes/common/cm_common.h247
-rw-r--r--nodes/common/cm_dlr_node_cntxt.cpp514
-rw-r--r--nodes/common/cm_dlr_node_cntxt.h297
-rw-r--r--nodes/common/cm_ldc_node_cntxt.cpp497
-rw-r--r--nodes/common/cm_ldc_node_cntxt.h240
-rw-r--r--nodes/common/cm_postproc_node_cntxt.cpp570
-rw-r--r--nodes/common/cm_postproc_node_cntxt.h290
-rw-r--r--nodes/common/cm_preproc_node_cntxt.cpp372
-rw-r--r--nodes/common/cm_preproc_node_cntxt.h237
-rw-r--r--nodes/common/cm_profile.cpp119
-rw-r--r--nodes/common/cm_profile.h89
-rw-r--r--nodes/common/cm_scaler_node_cntxt.cpp449
-rw-r--r--nodes/common/cm_scaler_node_cntxt.h225
-rw-r--r--nodes/ti_estop/CMakeLists.txt21
-rw-r--r--nodes/ti_estop/README.md130
-rw-r--r--nodes/ti_estop/config/params.yaml199
-rw-r--r--nodes/ti_estop/docs/estop_demo_block_diagram.svg814
-rw-r--r--nodes/ti_estop/docs/estop_rviz.pngbin0 -> 268995 bytes
-rw-r--r--nodes/ti_estop/docs/ti_estop_data_flow.pngbin0 -> 38852 bytes
-rw-r--r--nodes/ti_estop/launch/bag_estop.launch12
-rw-r--r--nodes/ti_estop/launch/estop.launch42
-rw-r--r--nodes/ti_estop/launch/rviz.launch15
-rw-r--r--nodes/ti_estop/launch/rviz_ogmap.launch9
-rw-r--r--nodes/ti_estop/launch/zed_estop.launch11
-rw-r--r--nodes/ti_estop/package.xml44
-rw-r--r--nodes/ti_estop/rviz/estop.rviz136
-rw-r--r--nodes/ti_estop/rviz/ogmap.rviz163
-rw-r--r--nodes/ti_estop/src/estop.cpp1182
-rw-r--r--nodes/ti_estop/src/estop.h1052
-rw-r--r--nodes/ti_estop/src/estop_main.cpp107
-rw-r--r--nodes/ti_estop/src/estop_manage_graph.cpp1875
-rw-r--r--nodes/ti_estop/src/estop_node.cpp1397
-rw-r--r--nodes/ti_estop/src/estop_node.h260
-rw-r--r--nodes/ti_sde/CMakeLists.txt7
-rw-r--r--nodes/ti_sde/README.md155
-rw-r--r--nodes/ti_sde/config/params.yaml96
-rw-r--r--nodes/ti_sde/docs/sde_disparity_rviz.pngbin0 -> 424716 bytes
-rw-r--r--nodes/ti_sde/docs/stereo_demo_block_diagram.svg607
-rw-r--r--nodes/ti_sde/docs/ti_sde_data_flow.pngbin9659 -> 24169 bytes
-rw-r--r--nodes/ti_sde/docs/triangulation_process.pngbin0 -> 12156 bytes
-rw-r--r--nodes/ti_sde/launch/bag_sde_pcl.launch14
-rw-r--r--nodes/ti_sde/launch/rviz_pcl.launch6
-rw-r--r--nodes/ti_sde/launch/sde.launch14
-rw-r--r--nodes/ti_sde/launch/zed_sde.launch11
-rw-r--r--nodes/ti_sde/launch/zed_sde_pcl.launch13
-rw-r--r--nodes/ti_sde/launch/zed_sde_semseg.launch14
-rw-r--r--nodes/ti_sde/rviz/sde_pcl.rviz132
-rw-r--r--nodes/ti_sde/src/sde.cpp492
-rw-r--r--[-rwxr-xr-x]nodes/ti_sde/src/sde.h951
-rw-r--r--nodes/ti_sde/src/sde_main.cpp142
-rw-r--r--nodes/ti_sde/src/sde_manage_graph.cpp1080
-rw-r--r--nodes/ti_sde/src/sde_node.cpp778
-rw-r--r--nodes/ti_sde/src/sde_node.h156
-rw-r--r--nodes/ti_semseg_cnn/CMakeLists.txt9
-rw-r--r--nodes/ti_semseg_cnn/README.md83
-rw-r--r--nodes/ti_semseg_cnn/config/params.yaml9
-rw-r--r--nodes/ti_semseg_cnn/docs/semseg_demo_block_diagram.svg639
-rw-r--r--nodes/ti_semseg_cnn/docs/semseg_rviz.pngbin0 -> 265787 bytes
-rw-r--r--nodes/ti_semseg_cnn/launch/zed_semseg_cnn.launch11
-rw-r--r--nodes/ti_semseg_cnn/src/semseg_cnn.cpp577
-rw-r--r--nodes/ti_semseg_cnn/src/semseg_cnn.h671
-rw-r--r--nodes/ti_semseg_cnn/src/semseg_cnn_manage_graph.cpp1188
-rw-r--r--nodes/ti_semseg_cnn/src/semseg_cnn_node.cpp135
-rw-r--r--nodes/ti_semseg_cnn/src/semseg_cnn_node.h2
-rw-r--r--nodes/ti_viz_nodes/CMakeLists.txt4
-rw-r--r--nodes/ti_viz_nodes/launch/viz_estop.launch26
-rw-r--r--nodes/ti_viz_nodes/src/viz_estop_node.cpp284
125 files changed, 1865564 insertions, 1629 deletions
diff --git a/README.md b/README.md
index 3bdba7e..710138b 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
1TI OpenVX + ROS Framework & Applications 1Robotics Software Development Kit
2======================================== 2=================================
3 3
4### Introduction to TI OpenVX + ROS Development Framework 4### Introduction to TI OpenVX + ROS Development Framework
5 5
@@ -8,54 +8,63 @@ TI OpenVX + ROS Framework & Applications
8 <figcaption> <center>Figure 1. TI OpenVX + ROS Framework: Software Stack </center></figcaption> 8 <figcaption> <center>Figure 1. TI OpenVX + ROS Framework: Software Stack </center></figcaption>
9</figure> 9</figure>
10 10
11The TI OpenVX + ROS development framework is enabled in a Docker container environment on J7 Processor SDK Linux. We provide detailed steps for setting a Docker container environment for ROS Melodic together with the TI Vision Apps Library (see next section). The TI OpenVX + ROS development framework allows: 11The TI OpenVX + ROS development framework runs in a Docker container environment on J7 Processor SDK Linux. We provide detailed steps for setting a Docker container environment for ROS Melodic along with the TI Vision Apps Library (see next section). The TI OpenVX + ROS development framework allows:
12 12
13* Optimized software implementation of computation-intensive software blocks (including deep-learning, vision, perception, and ADAS) on deep-learning core (C7x/MMA), DSP cores, hardware accelerators built-in on the Jacinto 7 processor 13* Optimized software implementation of computation-intensive software blocks (including deep-learning, vision, perception, and ADAS) on deep-learning core (C7x/MMA), DSP cores, hardware accelerators built-in on the Jacinto 7 processor
14* Application softwares can be complied directly on the Jacinto 7 processor in a Docker container using APIs optimized on Jacinto 7 processor along with many open-source libraries and packages including, for example. OpenCV and Point-Cloud Library (PCL). 14* Application softwares can be complied directly on the Jacinto 7 target using APIs optimized on the Jacinto 7 cores and hardware accelerators along with many open-source libraries and packages including, for example, OpenCV and Point-Cloud Library (PCL).
15 15
16Figure below is a representative vision application that can be developed in TI OpenVX + ROS framework. 16Figure below is a representative vision application developed in TI OpenVX + ROS framework.
17 17
18<figure class="image"> 18<figure class="image">
19 <center><img src="docker/docs/tiovx_ros_demo_diagram.png" style="width:896px;"/></center> 19 <center><img src="docker/docs/tiovx_ros_demo_diagram.svg" style="width:896px;"/></center>
20 <figcaption> <center>Figure 2. Example Application in TI OpenVX + ROS Framework </center></figcaption> 20 <figcaption> <center>Figure 2. Example Application in TI OpenVX + ROS Framework </center></figcaption>
21</figure> 21</figure>
22 22
23### TI Vision Apps Library 23### TI Vision Apps Library
24The TI Vision Apps Library is a set of APIs for the target deployment that are derived from the Jacinto 7 Processor SDK RTOS, which includes: 24The TI Vision Apps Library is a set of APIs for the target deployment that are derived from the Jacinto 7 Processor SDK RTOS which includes:
25 25
26* TI OpenVX kernels and infrastructure 26* TI OpenVX kernels and infrastructure
27* TI deep learning (TIDL) applications 27* TI deep-learning (TIDL) applications
28* Imaging and vision applications 28* Imaging and vision applications
29* Advanced driver-assistance systems (ADAS) applications 29* Advanced driver-assistance systems (ADAS) applications
30* Perception applications 30* Perception applications
31 31
32The TI Vision Apps Library is included in the pre-built package of [J721E Processor SDK RTOS 7.1.0](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/index_FDS.html). 32The TI Vision Apps Library is included in the pre-built package of [J721E Processor SDK RTOS 7.3.0](https://www.ti.com/tool/download/PROCESSOR-SDK-RTOS-J721E/07.03.00.07).
33 33
34## How to Set Up TI OpenVX + ROS Docker Container Environment on J7 Target 34### Open-Source Deep-Learning Runtime
35<a href="https://tidrive.ext.ti.com/fss/public/link/public/stream/read/J7ROS_Docker_README.pdf?linkToken=sKgYm3qoGJSiqBia&itemName=d2ec61c9-2cb7-4e73-ad0f-c38aca0fad7c" download>Click to Download J7ROS_Docker_README.pdf</a> 35The J721E Processor SDK RTOS 7.3.0 also supports the following open-source deep-learning runtime:
36* TVM/Neo-AI-DLR
37* TFLite Runtime
38* ONNX Runtime
36 39
37<!-- <a href="https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/ros_perception/J7ROS_Docker_READMD.pdf" download>Click to Download J7ROS_Docker_README.pdf</a> --> 40We provides two demo applications that include a deep-learning model that is implemented on TVM/Neo-AI-DLR runtime library.
38 41
39For debugging (Caution: there is formatting issue): [docker/README.md](docker/README.md) 42## Setting Up Robotics SDK Docker Container Environment on J7 Target
43<a href="https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/ros_perception/j7ros_docker_readme_00_03_00.pdf" download>Click to Download \"j7ros_docker_readme.pdf\"</a>
40 44
41## TI OpenVX + ROS Demo Applications 45<!-- For debugging (Caution: there is formatting issue): [docker/README.md](docker/README.md) -->
46
47## Demo Applications
42 48
43<figure class="image"> 49<figure class="image">
44 <center><img src="docker/docs/sde_semseg_rviz.png" style="width:700px;"/></center> 50 <center><img src="nodes/ti_estop/docs/estop_rviz.png" style="width:700px;"/></center>
45 <figcaption> <center>Figure 3. Demo Applications </center></figcaption> 51 <figcaption> <center>Figure 3. Demo Applications </center></figcaption>
46</figure> 52</figure>
47 53
48### [Stereo Vision Processing Node Accelerated on LDC and SDE](nodes/ti_sde/README.md) 54### [Stereo Vision Processing Accelerated on LDC and SDE](nodes/ti_sde/README.md)
55
56### [Semantic Segmentation Accelerated on C7x/MMA](nodes/ti_semseg_cnn/README.md)
49 57
50### [CNN Semantic Segmentation Node with TIDL Running on C7x/MMA](nodes/ti_semseg_cnn/README.md) 58### [3D Obstacle Detection Accelerated on SDE and C7x/MMA](nodes/ti_estop/README.md)
51 59
52## Known Issues 60## Limitations and Known Issues
53 61
541. Display from insider a Docker container on J7 is not enabled. RViz visualization is displayed on a remote Ubuntu PC. 621. RViz visualization is displayed on a remote Ubuntu PC. Display from insider a Docker container on the J7 target is not enabled and tested.
552. Ctrl+C termination of a ROS node or a ROS launch session can be sometimes slow. When VX_ERROR happens, it is recommended to reboot the J7 EVM. 632. Ctrl+C termination of a ROS node or a ROS launch session can be sometimes slow. When VX_ERROR happens, it is recommended to reboot the J7 EVM.
563. Stereo Vision Demo 643. Stereo Vision Demo
57 * Output disparity map may have artifacts that are common to block-based stereo algorithms. e.g., noise in the sky, textureless area, repeated patterns, etc. 65 * Output disparity map may have artifacts that are common to block-based stereo algorithms. e.g., noise in the sky, texture-less area, repeated patterns, etc.
58 * While the confidence map from SDE has 8 values between 0 (least confident) to 7 (most confident), the confidence map from the multi-layer SDE refinement has only 2 values, 0 and 7. Therefore, it would not appear as fine as the SDE's confidence map. 66 * While the confidence map from SDE has 8 values between 0 (least confident) to 7 (most confident), the confidence map from the multi-layer SDE refinement has only 2 values, 0 and 7. Therefore, it would not appear as fine as the SDE's confidence map.
674. The semantic segmentation model used in `ti_semseg_cnn` and `ti_estop` nodes was trained with Cityscapes dataset first, and re-trained with a small dataset collected from a particular stereo camera (ZED camera, HD mode) for a limited scenarios with coarse annotation. Therefore, the model can show limited accuracy performance if a different camera model is used and/or when it is applied in different environmental scenes.
59 68
60## Questions & Feedback 69## Questions & Feedback
61 70
diff --git a/cmake/common.cmake b/cmake/common.cmake
index 31cff81..6454a11 100644
--- a/cmake/common.cmake
+++ b/cmake/common.cmake
@@ -20,10 +20,10 @@ include_directories(
20# PSDKRA base folder location 20# PSDKRA base folder location
21set(PSDK_DIR $ENV{PSDK_BASE_PATH}) 21set(PSDK_DIR $ENV{PSDK_BASE_PATH})
22 22
23set(CGT7X_ROOT ti-cgt-c7000_1.4.0.LTS) 23set(CGT7X_ROOT ti-cgt-c7000_1.4.2.LTS)
24set(PDK_PACKAGE_ROOT pdk/packages/ti) 24set(PDK_PACKAGE_ROOT pdk/packages/ti)
25set(TIDL_PACKAGE_ROOT tidl_j7_01_03_00_11/ti_dl) 25set(TIDL_PACKAGE_ROOT tidl_j7_02_00_00_07/ti_dl)
26set(MMALIB_PACKAGE_ROOT mmalib_01_03_00_06) 26set(MMALIB_PACKAGE_ROOT mmalib_02_00_00_02)
27set(TIADALG_PATH tiadalg) 27set(TIADALG_PATH tiadalg)
28 28
29SET(CMAKE_FIND_LIBRARY_PREFIXES "" "lib") 29SET(CMAKE_FIND_LIBRARY_PREFIXES "" "lib")
@@ -112,11 +112,11 @@ set(VISION_APP_INCLUDE_DIRS
112 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/sde_ldc_applib 112 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/sde_ldc_applib
113 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/sde_multilayer_applib 113 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/sde_multilayer_applib
114 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/sde_singlelayer_applib 114 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/sde_singlelayer_applib
115 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/sde_triangulate_applib
115 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/sde_obstacle_detection_applib 116 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/sde_obstacle_detection_applib
116 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/semseg_cnn_applib
117 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/ss_sde_detection_applib 117 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/ss_sde_detection_applib
118 ${PSDK_DIR}/vision_apps/apps/ptk_demos/applibs/applib_common
119 ${PSDK_DIR}/vision_apps/kernels/img_proc/include 118 ${PSDK_DIR}/vision_apps/kernels/img_proc/include
119 ${PSDK_DIR}/vision_apps/kernels/img_proc/host
120 ${PSDK_DIR}/vision_apps/kernels/stereo/include 120 ${PSDK_DIR}/vision_apps/kernels/stereo/include
121 src 121 src
122) 122)
@@ -174,7 +174,8 @@ endfunction()
174if ((${TIVISION_APPS_TYPE} STREQUAL shared) AND (${TARGET_PLATFORM} STREQUAL J7)) 174if ((${TIVISION_APPS_TYPE} STREQUAL shared) AND (${TARGET_PLATFORM} STREQUAL J7))
175 set(TARGET_LINK_LIBS 175 set(TARGET_LINK_LIBS
176 ${catkin_LIBRARIES} 176 ${catkin_LIBRARIES}
177 tivision_apps gbm) 177 tivision_apps dlr)
178
178else() # static 179else() # static
179 set(TARGET_LINK_LIBS 180 set(TARGET_LINK_LIBS
180 ${catkin_LIBRARIES} 181 ${catkin_LIBRARIES}
diff --git a/docker/Dockerfile.ros-perception b/docker/Dockerfile.ros-perception
new file mode 100644
index 0000000..48bbbdb
--- /dev/null
+++ b/docker/Dockerfile.ros-perception
@@ -0,0 +1,111 @@
1# "jacinto_ros_perception" should be populated under $WORK_DIR/catkin_ws/src
2# cd $WORK_DIR
3# docker build -t "<label>" -f ./catkin_ws/src/jacinto_ros_perception/docker/Dockerfile.ros-perception .
4
5FROM arm64v8/ubuntu:18.04 as melodic_ros
6ARG DEBIAN_FRONTEND=noninteractive
7
8## settings for tivision_apps.so: install OpenGL, libdevil-dev
9RUN apt-get update && \
10 apt-get install -y \
11 libdevil-dev libglu1-mesa-dev freeglut3-dev mesa-common-dev && \
12 rm -rf /var/lib/apt/lists/*
13
14## install utils
15RUN apt-get update && \
16 apt-get install -y \
17 wget curl git vim tmux net-tools iputils-ping && \
18 rm -rf /var/lib/apt/lists/*
19
20RUN apt-get update && \
21 apt-get install -y \
22 software-properties-common && \
23 add-apt-repository ppa:ubuntu-toolchain-r/test && \
24 rm -rf /var/lib/apt/lists/*
25
26RUN apt-get update && \
27 apt-get install -y \
28 gcc-9 g++-9 && \
29 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50 && \
30 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 50 && \
31 rm -rf /var/lib/apt/lists/*
32
33## install ROS
34# setup timezone
35RUN echo 'Etc/UTC' > /etc/timezone && \
36 ln -s /usr/share/zoneinfo/Etc/UTC /etc/localtime && \
37 apt-get update && \
38 apt-get install -q -y tzdata && \
39 rm -rf /var/lib/apt/lists/*
40
41# install packages
42RUN apt-get update && apt-get install -q -y \
43 dirmngr \
44 gnupg2 \
45 && rm -rf /var/lib/apt/lists/*
46
47# setup keys
48RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
49
50# setup sources.list
51RUN echo "deb http://packages.ros.org/ros/ubuntu bionic main" > /etc/apt/sources.list.d/ros1-latest.list
52
53# install bootstrap tools
54RUN apt-get update && \
55 apt-get install --no-install-recommends -y \
56 python-rosdep \
57 python-rosinstall \
58 python-vcstools \
59 && rm -rf /var/lib/apt/lists/*
60
61# setup environment variables
62ENV LANG=C.UTF-8
63ENV LC_ALL=C.UTF-8
64ENV ROS_DISTRO=melodic
65ARG PROJECT_HOME=j7ros_home
66ENV WORK_DIR=/root/$PROJECT_HOME
67ENV CATKIN_WS=$WORK_DIR/catkin_ws
68
69# bootstrap rosdep
70RUN rosdep init && \
71 rosdep update --rosdistro $ROS_DISTRO
72
73# install ros-core packages
74RUN apt-get update && \
75 apt-get install --no-install-recommends -y \
76 ros-melodic-ros-core=1.4.1-0* \
77 ros-melodic-perception=1.4.1-0* && \
78 rm -rf /var/lib/apt/lists/*
79
80## .profile and .bashrc
81WORKDIR /root
82RUN echo "if [ -n \"$BASH_VERSION\" ]; then" > .profile && \
83 echo " # include .bashrc if it exists" >> .profile && \
84 echo " if [ -f \"$HOME/.bashrc\" ]; then" >> .profile && \
85 echo " . \"$HOME/.bashrc\"" >> .profile && \
86 echo " fi" >> .profile && \
87 echo "fi" >> .profile && \
88 echo "#!/bin/bash" > .bashrc && \
89 echo "export PS1=\"${debian_chroot:+($debian_chroot)}\u@j7-docker:\w\$ \"" >> .bashrc && \
90 echo "alias catkin_make='catkin_make -j1'" >> .bashrc
91
92#============================================================
93FROM scratch
94COPY --from=melodic_ros / /
95
96# setup environment variables
97ENV LANG=C.UTF-8
98ENV LC_ALL=C.UTF-8
99ENV ROS_DISTRO=melodic
100ARG PROJECT_HOME=j7ros_home
101ENV WORK_DIR=/root/$PROJECT_HOME
102ENV CATKIN_WS=$WORK_DIR/catkin_ws
103
104# workdir for ROS apps
105WORKDIR $CATKIN_WS
106
107# setup entrypoint
108ARG GIT_REPO=jacinto_ros_perception
109ADD ./catkin_ws/src/$GIT_REPO/docker/entrypoint.sh /root/
110ADD ./catkin_ws/src/$GIT_REPO/docker/ros_setup.sh /root/
111ENTRYPOINT ["/root/entrypoint.sh"]
diff --git a/docker/Dockerfile b/docker/Dockerfile.rosdep
index 03313bb..29ba674 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile.rosdep
@@ -1,6 +1,6 @@
1# "jacinto_ros_perception" should be populated under $WORK_DIR/catkin_ws/src 1# "jacinto_ros_perception" should be populated under $WORK_DIR/catkin_ws/src
2# cd $WORK_DIR 2# cd $WORK_DIR
3# docker build -t "<label>" -f ./catkin_ws/src/jacinto_ros_perception/docker/Dockerfile . 3# docker build -t "<label>" -f ./catkin_ws/src/jacinto_ros_perception/docker/Dockerfile.rosdep .
4 4
5FROM arm64v8/ubuntu:18.04 as melodic_ros 5FROM arm64v8/ubuntu:18.04 as melodic_ros
6ARG DEBIAN_FRONTEND=noninteractive 6ARG DEBIAN_FRONTEND=noninteractive
@@ -17,6 +17,19 @@ RUN apt-get update && \
17 wget curl git vim tmux net-tools iputils-ping && \ 17 wget curl git vim tmux net-tools iputils-ping && \
18 rm -rf /var/lib/apt/lists/* 18 rm -rf /var/lib/apt/lists/*
19 19
20RUN apt-get update && \
21 apt-get install -y \
22 software-properties-common && \
23 add-apt-repository ppa:ubuntu-toolchain-r/test && \
24 rm -rf /var/lib/apt/lists/*
25
26RUN apt-get update && \
27 apt-get install -y \
28 gcc-9 g++-9 && \
29 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50 && \
30 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 50 && \
31 rm -rf /var/lib/apt/lists/*
32
20## install ROS 33## install ROS
21# setup timezone 34# setup timezone
22RUN echo 'Etc/UTC' > /etc/timezone && \ 35RUN echo 'Etc/UTC' > /etc/timezone && \
@@ -81,7 +94,8 @@ RUN echo "if [ -n \"$BASH_VERSION\" ]; then" > .profile && \
81 echo " fi" >> .profile && \ 94 echo " fi" >> .profile && \
82 echo "fi" >> .profile && \ 95 echo "fi" >> .profile && \
83 echo "#!/bin/bash" > .bashrc && \ 96 echo "#!/bin/bash" > .bashrc && \
84 echo "export PS1=\"${debian_chroot:+($debian_chroot)}\u@j7-docker:\w\$ \"" >> .bashrc 97 echo "export PS1=\"${debian_chroot:+($debian_chroot)}\u@j7-docker:\w\$ \"" >> .bashrc && \
98 echo "alias catkin_make='catkin_make -j1'" >> .bashrc
85 99
86#============================================================ 100#============================================================
87FROM scratch 101FROM scratch
@@ -101,4 +115,5 @@ WORKDIR $CATKIN_WS
101# setup entrypoint 115# setup entrypoint
102ARG GIT_REPO=jacinto_ros_perception 116ARG GIT_REPO=jacinto_ros_perception
103ADD ./catkin_ws/src/$GIT_REPO/docker/entrypoint.sh /root/ 117ADD ./catkin_ws/src/$GIT_REPO/docker/entrypoint.sh /root/
118ADD ./catkin_ws/src/$GIT_REPO/docker/ros_setup.sh /root/
104ENTRYPOINT ["/root/entrypoint.sh"] 119ENTRYPOINT ["/root/entrypoint.sh"]
diff --git a/docker/Makefile b/docker/Makefile
index 013aa13..524915d 100644
--- a/docker/Makefile
+++ b/docker/Makefile
@@ -1,15 +1,11 @@
1#!make 1#!make
2# Dependency: J7 Processor SDK-RTOS 07_01_00_11 2# Dependency: J7 Processor SDK-RTOS 07_03_00_07 pre-built image
3 3
4## Independent variables 4## Independent variables
5# Dockerfile
6DOCKERFILE_NAME = Dockerfile
7# Docker image tag
8DOCKER_TAG = j7ros
9# TI Vision Apps Lib version 5# TI Vision Apps Lib version
10TIVA_LIB_VER = 7.1.0 6TIVA_LIB_VER = 7.3.0
11# TIDL version 7# TIDL version
12TIDL_VER = 1.3.0.11 8TIDL_VER = 2.0.0.7
13# ROS bag date 9# ROS bag date
14ROSBAG_DATE = 2020_1109 10ROSBAG_DATE = 2020_1109
15 11
@@ -37,15 +33,32 @@ ROSBAG_FILE = ros-bag_$(ROSBAG_DATE).tar.gz
37TIDL_MODEL_URL = https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/ros_perception/$(TIDL_MODEL_FILE) 33TIDL_MODEL_URL = https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/ros_perception/$(TIDL_MODEL_FILE)
38ROSBAG_URL = https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/ros_perception/$(ROSBAG_FILE) 34ROSBAG_URL = https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/ros_perception/$(ROSBAG_FILE)
39 35
36# Semantic segmantation TVM-DLR model artifacts location
37SEMSEG_MODEL = tvmdlr_deeplabv3lite_mobilenetv2_tv_768x432_zed1hd
38SEMSEG_ARTIFACTS_DIR = $(DATA_DIR)/tidl_semseg_model/$(SEMSEG_MODEL)/artifacts
39
40# IP address 40# IP address
41J7_IP_ADDR := $(shell ifconfig | grep -A 1 'eth0' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1) 41J7_IP_ADDR := $(shell ifconfig | grep -A 1 'eth0' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)
42 42
43## Set up environments on J7 host linux
44opkg_config:
45 $(SCRIPTS_DIR)/config_opkg_repo.sh
46
47ipk_install:
48 $(SCRIPTS_DIR)/install_tivision_apps_ipk.sh
49
43ip_show: 50ip_show:
44 @echo "$(J7_IP_ADDR)" 51 @echo "$(J7_IP_ADDR)"
45 52
46## Docker 53## Docker
54scripts: DOCKERFILE_NAME = Dockerfile.ros-perception
55scripts: DOCKER_TAG = j7ros:ros-perception
47scripts: docker_build_sh docker_run_sh 56scripts: docker_build_sh docker_run_sh
48 57
58scripts_rosdep: DOCKERFILE_NAME = Dockerfile.rosdep
59scripts_rosdep: DOCKER_TAG = j7ros:rosdep
60scripts_rosdep: docker_build_sh docker_run_sh
61
49docker_build_sh: 62docker_build_sh:
50 @echo "#!/bin/bash" > $(DOCKER_BUILD_SH) 63 @echo "#!/bin/bash" > $(DOCKER_BUILD_SH)
51 @echo "DOCKER_TAG=$(DOCKER_TAG)" >> $(DOCKER_BUILD_SH) 64 @echo "DOCKER_TAG=$(DOCKER_TAG)" >> $(DOCKER_BUILD_SH)
@@ -82,11 +95,12 @@ docker_run_sh:
82## data files 95## data files
83data_download: tidl_net_download rosbag_download 96data_download: tidl_net_download rosbag_download
84 97
85tidl_net_download: check_data_dir 98model_download: check_data_dir
86 wget -O $(DATA_DIR)/$(TIDL_MODEL_FILE) "$(TIDL_MODEL_URL)" 99 wget -O $(DATA_DIR)/$(TIDL_MODEL_FILE) "$(TIDL_MODEL_URL)"
87 rm -rf $(DATA_DIR)/tidl_semseg_model 100 rm -rf $(DATA_DIR)/tidl_semseg_model
88 tar xzf $(DATA_DIR)/$(TIDL_MODEL_FILE) -C $(DATA_DIR) 101 tar xzf $(DATA_DIR)/$(TIDL_MODEL_FILE) -C $(DATA_DIR)
89 rm -f $(DATA_DIR)/$(TIDL_MODEL_FILE) 102 rm -f $(DATA_DIR)/$(TIDL_MODEL_FILE)
103 cd $(SEMSEG_ARTIFACTS_DIR); ln -s deploy_lib.so.j7 deploy_lib.so; cd -
90 104
91rosbag_download: check_data_dir 105rosbag_download: check_data_dir
92 wget -O $(DATA_DIR)/$(ROSBAG_FILE) "$(ROSBAG_URL)" 106 wget -O $(DATA_DIR)/$(ROSBAG_FILE) "$(ROSBAG_URL)"
diff --git a/docker/README.md b/docker/README.md
index b1c3c04..8fc050b 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -1,53 +1,54 @@
1How to Set Up TI OpenVX + ROS Environment 1Setting Up Robotics Kit Environment
2========================================= 2===================================
3 3
4## Requirements & Dependency 4## 1. Requirements & Dependency
5 5
6### Supported Hardware Platforms 6### Supported Hardware Platforms
7
8 Platform | Supported Devices | Supported EVM 7 Platform | Supported Devices | Supported EVM
9-------------|---------------------------------------------|------------------------------------------------- 8-------------|---------------------------------------------|-------------------------------------------------
10 J721E | [TDA4VM](https://www.ti.com/product/TDA4VM) | [TDA4VMXEVM](https://www.ti.com/tool/TDA4VMXEVM) 9 J721E | [TDA4VM](https://www.ti.com/product/TDA4VM) | [TDA4VMXEVM](https://www.ti.com/tool/TDA4VMXEVM)
11 10
12### J7 Processor SDK RTOS 11### J7 Processor SDK RTOS
13This TI OpenVX + ROS development framework works with [pre-built package](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/ti-processor-sdk-rtos-j721e-evm-07_01_00_11-prebuilt.tar.gz) of 12The Robotics SDK requires [the pre-built package](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/07_03_00_07/exports/ti-processor-sdk-rtos-j721e-evm-07_03_00_07-prebuilt.tar.gz) of [J721E Processor SDK RTOS 7.3.0](https://www.ti.com/tool/download/PROCESSOR-SDK-RTOS-J721E/07.03.00.07). The pre-built package contains Processor SDK Linux and libraries that are necessary for setting up the Robotics development environment.
14[J721E Processor SDK RTOS 7.1.0](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/index_FDS.html).
15 13
16### Ubuntu PC 14### Ubuntu PC
17A Ubuntu (18.04 recommended) PC is required. For RViz visualization of input/output topics published from the J7, it is assumed that ROS (Melodic recommended) is installed on the Ubuntu PC. 15A Ubuntu (18.04 recommended) PC is required. For RViz visualization of ROS topics published from the J7 target, it is assumed that ROS (Melodic recommended) is installed on the PC. For ROS installation steps, please refer to [this ROS wiki page](http://wiki.ros.org/melodic/Installation/Ubuntu).
18
19Once finding the IP address assigned to J7 EVM (using a serial port communications program, for example, `minicom`), connect to J7 Linux with SSH:
20```
21ssh root@<J7_IP_address>
22```
23
24**Note**: It is highly recommended to use a *static* IP for the J7 EVM to make ROS network setting easy.
25 16
26### Setup 17### USB Stereo Camera [Optional]
27 18The Robotics SDK provides a OpenCV-based ROS driver for [ZED stereo camera](https://www.stereolabs.com/zed/). All the demo applications can be tried out with a live stereo camera as well as a ROSBAG file provided. For configuration of a stereo camera, please see `drivers/zed_capture/README.md`.
28Figure 1 shows the hardware setup and high-level installation steps on the J7 target and the remote Ubuntu PC.
29 19
30<figure class="image"> 20<figure class="image">
31 <center><img src="docs/tiovx_ros_setup.svg"/></center> 21 <center><img src="docs/tiovx_ros_setup.svg"/></center>
32 <figcaption> <center>Figure 1. TI OpenVX + ROS Framework: Setup and Installation </center></figcaption> 22 <figcaption> <center>Figure 1. Robotics Kit: Setup and Installation Steps</center></figcaption>
33</figure> 23</figure>
34 24
35<!-- ================================================================================= --> 25<!-- ================================================================================= -->
36## Build SD Card 26## 2. Set Up the J7 Target and Development Environment
27Figure 1 shows the hardware setup and high-level installation steps on the J7 target and the Ubuntu PC.
37 28
381. Download [Pre-built Package](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/ti-processor-sdk-rtos-j721e-evm-07_01_00_11-prebuilt.tar.gz) 29### Build SD Card
392. Install to a SD card by referring to the instruction on [this page](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/psdk_rtos/docs/user_guide/out_of_box_j721e.html) 301. From Ubuntu PC, download [Processor SDK RTOS 7.3.0 pre-built package](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/07_03_00_07/exports/ti-processor-sdk-rtos-j721e-evm-07_03_00_07-prebuilt.tar.gz)
40 31
322. Install the pre-built package to a SD card (minimum 32GB high-performance) by referring to the instruction on [this page](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/07_03_00_07/exports/docs/psdk_rtos/docs/user_guide/out_of_box_j721e.html)
41 33
42## Clone Git Repository 34### Connect Remotely to the J7 Target
351. To find the IP address assigned to J7 EVM, use a serial port communications program (for example, `sudo minicom -D /dev/ttyUSBx` where `/dev/ttyUSBx` is the device for the UART serial port), log in with `root` account, and run `ifconfig`.
36
372. From a terminal on the PC, open a SSH session to connect remotely to the J7 target:
38 ```
39 user@pc:~$ ssh root@<J7_IP_address>
40 ```
41 **Note**: It is recommended to use a *static* IP for the J7 EVM to make ROS network setting easy.
42
43### Clone Git Repository
43 44
441. Set up the project directory and the catkin workspace: 451. Set up the project directory and the catkin workspace:
45 ``` 46 ```
46 WORK_DIR=$HOME/j7ros_home 47 root@j7-evm:~# WORK_DIR=$HOME/j7ros_home
47 CATKIN_WS=$WORK_DIR/catkin_ws 48 root@j7-evm:~# CATKIN_WS=$WORK_DIR/catkin_ws
48 49
49 mkdir -p $CATKIN_WS/src 50 root@j7-evm:~# mkdir -p $CATKIN_WS/src
50 cd $CATKIN_WS/src 51 root@j7-evm:~# cd $CATKIN_WS/src
51 ``` 52 ```
52 53
532. Clone the project GIT repository: 542. Clone the project GIT repository:
@@ -55,61 +56,63 @@ Figure 1 shows the hardware setup and high-level installation steps on the J7 ta
55 git clone https://git.ti.com/git/processor-sdk-vision/jacinto_ros_perception.git 56 git clone https://git.ti.com/git/processor-sdk-vision/jacinto_ros_perception.git
56 ``` 57 ```
57 58
58## Download TIDL Model & ROSBAG File 59### Download TIDL Model & ROSBAG File
59 60
601. For convenience, set up following soft-links: 611. For convenience, set up a soft-link:
61 ``` 62 ```
62 cd $WORK_DIR 63 root@j7-evm:~/j7ros_home/catkin_ws/src# cd $WORK_DIR
63 ln -s $CATKIN_WS/src/jacinto_ros_perception/docker/Makefile 64 root@j7-evm:~/j7ros_home# ln -s $CATKIN_WS/src/jacinto_ros_perception/docker/Makefile
64 ``` 65 ```
65 66
662. To download data files, run the following in `$WORK_DIR`: 672. To download data files, run the following in `$WORK_DIR`:
67 ``` 68 ```
68 make data_download 69 root@j7-evm:~/j7ros_home# make data_download
69 ``` 70 ```
70 Two tarballs (TIDL network model files, and a ROSBAG file) are downloaded and uncompressed under `$WORK_DIR/data`. Each tarball can be downloaded individually with `make tidl_net_download` and `make rosbag_download`, respectively. 71 Two tarballs (for deep-learning model artifacts, and a ROSBAG file) are downloaded and uncompressed under `$WORK_DIR/data`. If preferred, each tarball can be downloaded individually with `make model_download` and `make rosbag_download`, respectively.
71 72
72<!-- ================================================================================= --> 73### Set Up Docker Environment
73## Set Up Docker Environment
74 74
751. Following [this link](https://docs.docker.com/get-started/#test-docker-installation), 751. Following [this link](https://docs.docker.com/get-started/#test-docker-installation),
76check that Docker and network work correctly on the J7 host Linux. 76check that Docker and network work correctly on the J7 host Linux.
77 77
782. To generate bash scripts for building and running a Docker image for the project: 782. To generate bash scripts for building and running a Docker image for the Robotics Kit:
79 ``` 79 ```
80 make scripts 80 root@j7-evm:~/j7ros_home# make scripts
81 ``` 81 ```
82 Make sure that two bash scripts named `docker_build.sh` and `docker_run.sh` are generated. 82 Make sure that two bash scripts, `docker_build.sh` and `docker_run.sh`, are generated.
83 83
843. To build the Docker image, at `$WORK_DIR` run: 84 **Note**: The default Dockerfile installs `ros-perception` ROS package group in the Docker image. In case you want to minimize the size of Docker image by installing only minimal dependency required to build and run the ROS nodes under `$CATKIN_WS/src`, use the scripts generated with the following:
85 ``` 85 ```
86 ./docker_build.sh 86 root@j7-evm:~/j7ros_home# make scripts_rosdep
87 ``` 87 ```
88 It will take several minutes to build the Docker image. The Docker images built can be listed with `docker images` in the command line.
89 88
90**Note**: The Docker image that is built using `Makefile` provided in the GIT repository will include minimal number of ROS packages on which the ROS package(s) under `$CATKIN_WS/src` have dependency. In case when more ROS package(s) are added under the folder, it is required to re-build a Docker image using the `Makefile`. 893. To build the Docker image, in `$WORK_DIR` run:
90 ```
91 root@j7-evm:~/j7ros_home# ./docker_build.sh
92 ```
93 It will take several minutes to build the Docker image. The Docker image built can be listed with `docker images`.
91 94
92<!-- ================================================================================= --> 95<!-- ================================================================================= -->
93## Set Up Remote PC for Visualization 96## 3. Set Up the Ubuntu PC for Visualization
94Open another terminal on Ubuntu PC to set up environment for RViz visualization. 97Open another terminal on Ubuntu PC to set up environment for RViz visualization.
95 98
961. Clone GIT repository: 991. Clone the GIT repository:
97 ``` 100 ```
98 CATKIN_WS=$HOME/j7ros_home/catkin_ws 101 user@pc:~$ CATKIN_WS=$HOME/j7ros_home/catkin_ws
99 mkdir -p $CATKIN_WS/src 102 user@pc:~$ mkdir -p $CATKIN_WS/src
100 cd $CATKIN_WS/src 103 user@pc:~$ cd $CATKIN_WS/src
101 git clone https://git.ti.com/git/processor-sdk-vision/jacinto_ros_perception.git 104 git clone https://git.ti.com/git/processor-sdk-vision/jacinto_ros_perception.git
102 ``` 105 ```
103 106
1042. Build ROS nodes: 1072. Build the ROS nodes for visualization:
105 ``` 108 ```
106 cd $CATKIN_WS 109 user@pc:~/j7ros_home/catkin_ws/src$ cd $CATKIN_WS
107 catkin_make 110 user@pc:~/j7ros_home/catkin_ws$ catkin_make
108 ``` 111 ```
109 112
1103. ROS network setting: For convenience, set up a soft-link: 1133. ROS network setting: For convenience, set up a soft-link:
111 ``` 114 ```
112 ln -s src/jacinto_ros_perception/setup_env_pc.sh 115 user@pc:~/j7ros_home/catkin_ws$ ln -s src/jacinto_ros_perception/setup_env_pc.sh
113 ``` 116 ```
114 117
115 Update the following lines in `setup_env_pc.sh`: 118 Update the following lines in `setup_env_pc.sh`:
@@ -117,73 +120,93 @@ Open another terminal on Ubuntu PC to set up environment for RViz visualization.
117 PC_IP_ADDR=<PC_IP_address> 120 PC_IP_ADDR=<PC_IP_address>
118 J7_IP_ADDR=<J7_IP_address> 121 J7_IP_ADDR=<J7_IP_address>
119 ``` 122 ```
120 `<J7_IP_address>` can be found by running `make ip_show` on **J7 terminal**. 123 `<J7_IP_address>` can be found by running `make ip_show` on a J7 terminal.
121 124
122 To set up the PC environment, run the following: 125 To set up the PC environment, run the following:
123 ``` 126 ```
124 source setup_env_pc.sh 127 user@pc:~/j7ros_home/catkin_ws$ source setup_env_pc.sh
125 ``` 128 ```
126 129
127After launching ROS nodes on the J7, we can check the all the ROS topics by running `rostopic list`. 130<!-- After launching ROS nodes on the J7, we can check the all the ROS topics by running `rostopic list`. -->
128 131
129<!-- ================================================================================= --> 132<!-- ================================================================================= -->
130## Build Demo ROS Applications 133## 4. Build and Run Demo Applications
131 134
1321. To run the docker image: 135### Build the ROS Applications
136
1371. To run the Docker image:
133 ``` 138 ```
134 ./docker_run.sh 139 root@j7-evm:~/j7ros_home# ./docker_run.sh
135 ``` 140 ```
136 141
1372. To build ROS applications, inside the Docker container: 1422. To build the ROS applications, inside the Docker container:
138 ``` 143 ```
139 cd $CATKIN_WS 144 root@j7-docker:~/j7ros_home/catkin_ws$ catkin_make
140 catkin_make 145 root@j7-docker:~/j7ros_home/catkin_ws$ source devel/setup.bash
141 source devel/setup.bash
142 ``` 146 ```
143 147
144## Run Stereo Vision Application 148### Run Stereo Vision Application
145 149
1461. **[J7]** To launch `ti_sde` node with playing back a ROSBAG file, run the following in `$WORK_DIR` on the J7 host Linux: 1501. **[J7]** To launch `ti_sde` node with playing back a ROSBAG file, run the following in `$WORK_DIR` on the J7 host Linux:
147 ``` 151 ```
148 ./docker_run.sh roslaunch ti_sde bag_sde.launch 152 root@j7-evm:~/j7ros_home$ ./docker_run.sh roslaunch ti_sde bag_sde.launch
149 ``` 153 ```
150 Alternatively, you can run the following `roslaunch` command **inside** the Docker container: 154 Alternatively, you can run the following `roslaunch` command **inside** the Docker container:
151 ``` 155 ```
152 roslaunch ti_sde bag_sde.launch 156 root@j7-docker:~/j7ros_home/catkin_ws$ roslaunch ti_sde bag_sde.launch
157 ```
158 To process the image stream from a ZED stereo camera, replace the launch file with `zed_sde.launch` in the above.
159
1602. **[PC]** For visualization, on the PC:
161 ```
162 user@pc:~/j7ros_home/catkin_ws$ roslaunch ti_sde rviz.launch
153 ``` 163 ```
154 164
1552. **[Remote PC]** For visualization, on the PC: 165### Run Stereo Vision Application with Point-Cloud Enabled
166
1671. **[J7]** To launch `ti_sde` node with playing back a ROSBAG file, run the following in `$WORK_DIR` on the J7 host Linux:
156 ``` 168 ```
157 roslaunch ti_sde rviz.launch 169 root@j7-evm:~/j7ros_home$ ./docker_run.sh roslaunch ti_sde bag_sde_pcl.launch
170 ```
171 Alternatively, you can run the following `roslaunch` command **inside** the Docker container:
172 ```
173 root@j7-docker:~/j7ros_home/catkin_ws$ roslaunch ti_sde bag_sde_pcl.launch
174 ```
175 To process the image stream from a ZED stereo camera, replace the launch file with `zed_sde.launch` in the above.
176
1772. **[PC]** For visualization, on the PC (Make sure `source setup_env_pc.sh` ahead):
158 ``` 178 ```
179 user@pc:~/j7ros_home/catkin_ws$ roslaunch ti_sde rviz_pcl.launch
159 180
160## Run CNN Semantic Segmentation Application 181### Run CNN Semantic Segmentation Application
161 182
1621. **[J7]** To launch `ti_semseg_cnn` node with playing back a ROSBAG file, run the following in `$WORK_DIR` on the J7 host Linux: 1831. **[J7]** To launch `ti_semseg_cnn` node with playing back a ROSBAG file, run the following in `$WORK_DIR` on the J7 host Linux:
163 ``` 184 ```
164 ./docker_run.sh roslaunch ti_semseg_cnn bag_semseg_cnn.launch 185 root@j7-evm:~/j7ros_home$ ./docker_run.sh roslaunch ti_semseg_cnn bag_semseg_cnn.launch
165 ``` 186 ```
166 Alternatively, you can run the following `roslaunch` command **inside** the Docker container: 187 Alternatively, you can run the following `roslaunch` command **inside** the Docker container:
167 ``` 188 ```
168 roslaunch ti_semseg_cnn bag_semseg_cnn.launch 189 root@j7-docker:~/j7ros_home/catkin_ws$ roslaunch ti_semseg_cnn bag_semseg_cnn.launch
169 ``` 190 ```
191 To process the image stream from a ZED stereo camera, replace the launch file with `zed_semseg_cnn.launch` in the above.
170 192
1712. **[Remote PC]** For visualization, on the PC: 1932. **[PC]** For visualization, on the PC:
172 ``` 194 ```
173 roslaunch ti_semseg_cnn rviz.launch 195 user@pc:~/j7ros_home/catkin_ws$ roslaunch ti_semseg_cnn rviz.launch
174 ``` 196 ```
175## Run Stereo Vision and CNN Semantic Segmentation Together
176 197
1771. **[J7]** To launch `ti_sde` and `ti_semseg_cnn` together with playing back a ROSBAG file, run the following in `$WORK_DIR` on the J7 host Linux: 198### Run 3D Obstacle Detection Application
1991. **[J7]** To launch `ti_estop` node with playing back a ROSBAG file, run the following in `$WORK_DIR` on the J7 host Linux:
178 ``` 200 ```
179 ./docker_run.sh roslaunch ti_sde bag_sde_semseg.launch 201 root@j7-evm:~/j7ros_home$ ./docker_run.sh roslaunch ti_estop bag_estop.launch
180 ``` 202 ```
181 Alternatively, you can run the following `roslaunch` command **inside** the Docker container: 203 Alternatively, you can run the following `roslaunch` command **inside** the Docker container:
182 ``` 204 ```
183 roslaunch ti_sde bag_sde_semseg.launch 205 root@j7-docker:~/j7ros_home/catkin_ws$ roslaunch ti_estop bag_estop.launch
184 ``` 206 ```
207 To process the image stream from a ZED stereo camera, replace the launch file with `zed_estop.launch` in the above.
185 208
1862. **[Remote PC]** For visualization, on the PC: 2092. **[PC]** For visualization, on the PC:
187 ``` 210 ```
188 roslaunch ti_sde rviz_sde_semseg.launch 211 user@pc:~/j7ros_home/catkin_ws$ roslaunch ti_estop rviz.launch
189 ``` 212 ```
diff --git a/docker/docs/tiovx_ros_demo_diagram.png b/docker/docs/tiovx_ros_demo_diagram.png
index 17a2056..2614732 100644
--- a/docker/docs/tiovx_ros_demo_diagram.png
+++ b/docker/docs/tiovx_ros_demo_diagram.png
Binary files differ
diff --git a/docker/docs/tiovx_ros_demo_diagram.svg b/docker/docs/tiovx_ros_demo_diagram.svg
new file mode 100644
index 0000000..8e4265f
--- /dev/null
+++ b/docker/docs/tiovx_ros_demo_diagram.svg
@@ -0,0 +1,1001 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3<!-- Generated by Microsoft Visio, SVG Export tiovx_ros_demo_diagram_2021_0413_Arial.svg Page-1 -->
4<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
5 xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="9.94326in" height="3.50922in"
6 viewBox="0 0 715.914 252.664" xml:space="preserve" color-interpolation-filters="sRGB" class="st30">
7 <v:documentProperties v:langID="1033" v:viewMarkup="false">
8 <v:userDefs>
9 <v:ud v:nameU="msvConvertTheme"/>
10 </v:userDefs>
11 </v:documentProperties>
12
13 <style type="text/css">
14 <![CDATA[
15 .st1 {fill:url(#grad0-4);stroke:#404040;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
16 .st2 {stroke:#d26d19;stroke-linecap:round;stroke-linejoin:round;stroke-width:3}
17 .st3 {fill:url(#grad0-16);stroke:#0000ff;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
18 .st4 {fill:#000000;font-family:Arial;font-size:0.75em}
19 .st5 {font-size:1em}
20 .st6 {fill:url(#grad0-22)}
21 .st7 {stroke:#404040;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
22 .st8 {fill:#c00000;font-family:Arial;font-size:0.833336em;font-weight:bold}
23 .st9 {marker-end:url(#mrkr7-34);stroke:#404040;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
24 .st10 {fill:#404040;fill-opacity:1;stroke:#404040;stroke-opacity:1;stroke-width:0.28409090909091}
25 .st11 {fill:url(#grad0-16);stroke:#404040;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
26 .st12 {fill:url(#grad0-42);stroke:#404040;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
27 .st13 {fill:url(#grad0-42)}
28 .st14 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
29 .st15 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.25}
30 .st16 {fill:#000000;font-family:Arial;font-size:0.833336em;font-weight:bold}
31 .st17 {fill:url(#grad0-62);stroke:#404040;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
32 .st18 {fill:#8c4810;font-family:Arial;font-size:0.833336em;font-weight:bold}
33 .st19 {fill:#bfcee1;stroke:#1f477d;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
34 .st20 {fill:url(#grad0-31);stroke:#404040;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
35 .st21 {marker-end:url(#mrkr7-87);stroke:#0000ff;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
36 .st22 {fill:#0000ff;fill-opacity:1;stroke:#0000ff;stroke-opacity:1;stroke-width:0.37313432835821}
37 .st23 {fill:#000000;font-family:Arial;font-size:0.666664em}
38 .st24 {fill:url(#grad0-22);stroke:#404040;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
39 .st25 {fill:#c00000;font-family:Arial;font-size:0.75em;font-weight:bold}
40 .st26 {font-size:0.888885em;font-weight:normal}
41 .st27 {fill:#000000;font-family:Arial;font-size:0.583328em}
42 .st28 {fill:url(#grad0-156)}
43 .st29 {fill:#000000;font-family:Arial;font-size:0.75em;font-weight:bold}
44 .st30 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
45 ]]>
46 </style>
47
48 <defs id="Patterns_And_Gradients">
49 <linearGradient id="grad0-4" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(270 0.5 0.5)">
50 <stop offset="0" stop-color="#cbddeb" stop-opacity="0.4"/>
51 <stop offset="1" stop-color="#e1ebf3" stop-opacity="0.4"/>
52 </linearGradient>
53 <linearGradient id="grad0-8" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(270 0.5 0.5)">
54 <stop offset="0" stop-color="#b85f16" stop-opacity="1"/>
55 <stop offset="1" stop-color="#d26d19" stop-opacity="1"/>
56 </linearGradient>
57 <linearGradient id="grad0-16" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(270 0.5 0.5)">
58 <stop offset="0" stop-color="#d3dcba" stop-opacity="1"/>
59 <stop offset="1" stop-color="#e0e6cd" stop-opacity="1"/>
60 </linearGradient>
61 <linearGradient id="grad0-22" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(270 0.5 0.5)">
62 <stop offset="0" stop-color="#f2c59f" stop-opacity="1"/>
63 <stop offset="1" stop-color="#f6d5b9" stop-opacity="1"/>
64 </linearGradient>
65 <linearGradient id="grad0-31" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(270 0.5 0.5)">
66 <stop offset="0" stop-color="#f0f0f0" stop-opacity="1"/>
67 <stop offset="1" stop-color="#ffffff" stop-opacity="1"/>
68 </linearGradient>
69 <linearGradient id="grad0-42" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(270 0.5 0.5)">
70 <stop offset="0" stop-color="#a7b96f" stop-opacity="1"/>
71 <stop offset="1" stop-color="#b3c283" stop-opacity="1"/>
72 </linearGradient>
73 <linearGradient id="grad0-62" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(270 0.5 0.5)">
74 <stop offset="0" stop-color="#adc9e0" stop-opacity="1"/>
75 <stop offset="1" stop-color="#c3d7e8" stop-opacity="1"/>
76 </linearGradient>
77 <linearGradient id="grad0-156" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(270 0.5 0.5)">
78 <stop offset="0" stop-color="#beb6d1" stop-opacity="1"/>
79 <stop offset="1" stop-color="#cfc8dd" stop-opacity="1"/>
80 </linearGradient>
81 </defs>
82 <defs id="Markers">
83 <g id="lend7">
84 <path
85 d="M 1.84309 -0.959456 C 1.43792 -0.380801 0.784503 -0.0260255 0.078527 -0.00137091 L 0.0785229 0.00137043 C 0.784499 0.0260231 1.43791 0.380798 1.84309 0.959452 "
86 style="stroke-linecap:round;stroke-linejoin:round;fill:none"/>
87 </g>
88 <marker id="mrkr7-34" class="st10" v:arrowType="7" v:arrowSize="2" orient="auto" markerUnits="strokeWidth"
89 overflow="visible">
90 <use xlink:href="#lend7" transform="scale(-3.52,-3.52) "/>
91 </marker>
92 <marker id="mrkr7-87" class="st22" v:arrowType="7" v:arrowSize="2" orient="auto" markerUnits="strokeWidth"
93 overflow="visible">
94 <use xlink:href="#lend7" transform="scale(-2.68,-2.68) "/>
95 </marker>
96 </defs>
97 <g v:mID="0" v:index="1" v:groupContext="foregroundPage">
98 <title>Page-1</title>
99 <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
100 v:shadowOffsetY="-8.50394"/>
101 <v:layer v:name="Flowchart" v:index="0"/>
102 <v:layer v:name="Connector" v:index="1"/>
103 <g id="shape8-1" v:mID="8" v:groupContext="shape" v:layerMember="0" transform="translate(148.61,-66.9122)">
104 <title>Process</title>
105 <v:custProps>
106 <v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
107 v:langID="1033" v:cal="0"/>
108 <v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
109 v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
110 <v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
111 v:langID="1033" v:cal="0"/>
112 <v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
113 v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
114 <v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
115 v:ask="false" v:langID="1033" v:cal="0"/>
116 <v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
117 v:ask="false" v:langID="1033" v:cal="0"/>
118 <v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
119 v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
120 v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
121 </v:custProps>
122 <v:userDefs>
123 <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
124 <v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(0.98425196850394):24"/>
125 <v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.59055118110236):24"/>
126 <v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.59055118110236):24"/>
127 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
128 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
129 </v:userDefs>
130 <rect x="0" y="68.4122" width="403.937" height="184.252" class="st1"/>
131 </g>
132 <g id="shape13-5" v:mID="13" v:groupContext="shape" transform="translate(148.61,-66.9122)">
133 <title>Sheet.13</title>
134 <v:userDefs>
135 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
136 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
137 </v:userDefs>
138 <path d="M0 68.41 L0 252.66 L403.94 252.66 L403.94 68.41" class="st2"/>
139 </g>
140 <g id="shape9-10" v:mID="9" v:groupContext="shape" v:layerMember="0" transform="translate(602.154,-66.9122)">
141 <title>Process.9</title>
142 <v:custProps>
143 <v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
144 v:langID="1033" v:cal="0"/>
145 <v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
146 v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
147 <v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
148 v:langID="1033" v:cal="0"/>
149 <v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
150 v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
151 <v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
152 v:ask="false" v:langID="1033" v:cal="0"/>
153 <v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
154 v:ask="false" v:langID="1033" v:cal="0"/>
155 <v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
156 v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
157 v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
158 </v:custProps>
159 <v:userDefs>
160 <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
161 <v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(0.98425196850394):24"/>
162 <v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.59055118110236):24"/>
163 <v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.59055118110236):24"/>
164 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
165 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
166 </v:userDefs>
167 <rect x="0" y="68.4122" width="113.386" height="184.252" class="st1"/>
168 </g>
169 <g id="shape3-13" v:mID="3" v:groupContext="shape" transform="translate(162.783,-171.794)">
170 <title>Rectangle</title>
171 <desc>Camera Capture ROS Node</desc>
172 <v:userDefs>
173 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
174 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
175 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
176 </v:userDefs>
177 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
178 <v:textRect cx="42.5197" cy="231.404" width="85.04" height="42.5197"/>
179 <rect x="0" y="210.144" width="85.0394" height="42.5197" class="st3"/>
180 <text x="9.26" y="228.7" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Camera Capture<v:newlineChar/><tspan
181 x="20.76" dy="1.2em" class="st5">ROS Node </tspan> </text> </g>
182 <g id="shape7-19" v:mID="7" v:groupContext="shape" v:layerMember="0" transform="translate(261.615,157.406) rotate(-90)">
183 <title>Database</title>
184 <desc>TI Vision Apps Lib</desc>
185 <v:custProps>
186 <v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false" v:ask="false"
187 v:langID="1033" v:cal="0"/>
188 <v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
189 v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
190 <v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false" v:ask="false"
191 v:langID="1033" v:cal="0"/>
192 <v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
193 v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
194 <v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
195 v:ask="false" v:langID="1033" v:cal="0"/>
196 <v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
197 v:ask="false" v:langID="1033" v:cal="0"/>
198 <v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
199 v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
200 v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
201 </v:custProps>
202 <v:userDefs>
203 <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
204 <v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(0.98425196850394):24"/>
205 <v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.59055118110236):24"/>
206 <v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.59055118110236):24"/>
207 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
208 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
209 </v:userDefs>
210 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
211 <v:textRect cx="19.1339" cy="220.036" width="59.53" height="43.8288" transform="rotate(90)"/>
212 <path d="M5.14 186.76 L41.1 186.76 A108.245 108.245 0 0 1 41.1 252.66 L5.14 252.66 A108.245 108.245 0 0 1 5.14 186.76
213 Z" class="st6"/>
214 <path d="M5.14 186.76 L41.1 186.76 A108.245 108.245 0 0 1 41.1 252.66 L5.14 252.66 A108.245 108.245 0 0 1 5.14 186.76"
215 class="st7"/>
216 <path d="M41.1 186.76 A108.245 108.245 -180 0 0 41.1 252.66" class="st7"/>
217 <text x="199.2" y="-22.13" transform="rotate(90)" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>TI Vision <tspan
218 x="198.65" dy="1.2em" class="st5">Apps Lib</tspan></text> </g>
219 <g id="shape10-27" v:mID="10" v:groupContext="shape" v:layerMember="1" transform="translate(106.445,-185.967)">
220 <title>Dynamic connector.10</title>
221 <v:userDefs>
222 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
223 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
224 </v:userDefs>
225 <path d="M0 245.58 L56.34 245.58" class="st9"/>
226 </g>
227 <g id="shape12-35" v:mID="12" v:groupContext="shape" transform="translate(623.413,-171.794)">
228 <title>Rectangle.12</title>
229 <desc>Visualization</desc>
230 <v:userDefs>
231 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
232 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
233 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
234 </v:userDefs>
235 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
236 <v:textRect cx="38.9764" cy="231.404" width="77.96" height="42.5197"/>
237 <rect x="0" y="210.144" width="77.9528" height="42.5197" class="st11"/>
238 <text x="13.71" y="234.1" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Visualization</text> </g>
239 <g id="shape14-39" v:mID="14" v:groupContext="shape" transform="translate(354.122,-105.18)">
240 <title>Rectangle.14</title>
241 <desc>ROS MASTER</desc>
242 <v:userDefs>
243 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
244 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
245 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
246 </v:userDefs>
247 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
248 <v:textRect cx="35.4331" cy="242.034" width="70.87" height="21.2598"/>
249 <rect x="0" y="231.404" width="70.8661" height="21.2598" class="st12"/>
250 <text x="5.68" y="244.73" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ROS MASTER</text> </g>
251 <g id="group17-44" transform="translate(264.122,-95.2586)" v:mID="17" v:groupContext="group">
252 <v:userDefs>
253 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
254 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
255 </v:userDefs>
256 <title>Sheet.17</title>
257 <g id="shape15-45" v:mID="15" v:groupContext="shape" v:layerMember="0"
258 transform="translate(-186.05,252.664) rotate(-90)">
259 <title>Database.15</title>
260 <desc>ROS Packages &#38; Tools</desc>
261 <v:custProps>
262 <v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false"
263 v:ask="false" v:langID="1033" v:cal="0"/>
264 <v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
265 v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
266 <v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
267 v:ask="false" v:langID="1033" v:cal="0"/>
268 <v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
269 v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
270 <v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
271 v:ask="false" v:langID="1033" v:cal="0"/>
272 <v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
273 v:ask="false" v:langID="1033" v:cal="0"/>
274 <v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
275 v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
276 v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
277 </v:custProps>
278 <v:userDefs>
279 <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
280 <v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(0.98425196850394):24"/>
281 <v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.59055118110236):24"/>
282 <v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.59055118110236):24"/>
283 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
284 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
285 </v:userDefs>
286 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
287 <v:textRect cx="19.1339" cy="219.685" width="59.53" height="44.3001" transform="rotate(90)"/>
288 <path d="M5.14 186.05 L41.1 186.05 A110.53 110.53 0 0 1 41.1 252.66 L5.14 252.66 A110.53 110.53 0 0 1 5.14 186.05
289 Z" class="st13"/>
290 <path d="M5.14 186.05 L41.1 186.05 A110.53 110.53 0 0 1 41.1 252.66 L5.14 252.66 A110.53 110.53 0 0 1 5.14 186.05"
291 class="st7"/>
292 <path d="M41.1 186.05 A110.53 110.53 -180 0 0 41.1 252.66" class="st7"/>
293 <text x="209.93" y="-27.23" transform="rotate(90)" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ROS <tspan
294 x="195.67" dy="1.2em" class="st5">Packages &#38; </tspan><tspan x="208.68" dy="1.2em" class="st5">Tools</tspan></text> </g>
295 <g id="shape16-53" v:mID="16" v:groupContext="shape" transform="translate(13.3228,-24.0857)">
296 <title>Sheet.16</title>
297 <rect v:rectContext="foreign" x="0" y="241.308" width="37.3495" height="11.3562" class="st14"/>
298 <switch>
299 <foreignObject x="0" y="241.308" width="37.3495" height="11.3562"
300 requiredExtensions="http://schemas.microsoft.com/visio/2003/SVGExtensions/">
301 <v:foreignData v:orgSize="14516" v:data="data:metafile;base64,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"/>
380 </foreignObject>
381 <!-- Unsupported Record: EmfPlusRecordTypeSetPixelOffsetMode -->
382 <svg viewBox="0 0 356.06 101.96" height="11.3562" preserveAspectRatio="none" width="37.3495" x="0" y="241.308">
383 <clipPath id="mfid1">
384 <rect width="356.06" height="101.96" id="mfid2"/>
385 </clipPath>
386 <g clip-path="url(#mfid1)">
387 <defs>
388 <image id="mfid3" width="131" height="38" xlink:href="data:image/png;base64,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"/>
389 </defs>
390 <!-- Unsupported Record: EmfPlusRecordTypeSetObject Obj_ImageAttributes -->
391 <g>
392 <g transform="matrix(2.7252, 0, 0, 2.7105, 0, 0)">
393 <clipPath id="mfid4">
394 <rect x="-0.5" y="-0.5" width="131" height="38"/>
395 </clipPath>
396 <use xlink:href="#mfid3" clip-path="url(#mfid4)" transform="matrix(1, 0, 0, 1, 0.5, 0.5)"/>
397 </g>
398 </g>
399 </g>
400 </svg>
401 </switch>
402 <rect v:rectContext="foreign" x="0" y="241.308" width="37.3495" height="11.3562" class="st14"/>
403 </g>
404 </g>
405 <g id="shape20-56" v:mID="20" v:groupContext="shape" transform="translate(618.673,-42.4545)">
406 <title>Sheet.20</title>
407 <desc>Ubuntu PC</desc>
408 <v:userDefs>
409 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
410 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
411 </v:userDefs>
412 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
413 <v:textRect cx="40.1732" cy="244.664" width="80.35" height="16"/>
414 <rect x="0" y="236.664" width="80.3465" height="16" class="st15"/>
415 <text x="14.35" y="247.66" class="st16" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Ubuntu PC</text> </g>
416 <g id="shape21-59" v:mID="21" v:groupContext="shape" transform="translate(162.783,-73.9988)">
417 <title>Rectangle.21</title>
418 <desc>UBUNTU</desc>
419 <v:userDefs>
420 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
421 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
422 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
423 </v:userDefs>
424 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
425 <v:textRect cx="187.795" cy="245.578" width="375.6" height="14.1732"/>
426 <rect x="0" y="238.491" width="375.591" height="14.1732" class="st17"/>
427 <text x="169.05" y="248.28" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>UBUNTU</text> </g>
428 <g id="group23-64" transform="translate(275.25,-41.0835)" v:mID="23" v:groupContext="group">
429 <v:userDefs>
430 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
431 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
432 </v:userDefs>
433 <title>Sheet.23</title>
434 <g id="shape18-65" v:mID="18" v:groupContext="shape" transform="translate(199.345,-188.821)">
435 <title>Sheet.18</title>
436 <rect v:rectContext="foreign" x="0" y="236.849" width="62.3055" height="15.8149" class="st14"/>
437 <switch>
438 <foreignObject x="0" y="236.849" width="62.3055" height="15.8149"
439 requiredExtensions="http://schemas.microsoft.com/visio/2003/SVGExtensions/">
440 <v:foreignData v:orgSize="11060" v:data="data:metafile;base64,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"/>
508 </foreignObject>
509 <!-- Unsupported Record: EmfPlusRecordTypeSetPixelOffsetMode -->
510 <svg viewBox="0 0 400.92 101.96" height="15.8149" preserveAspectRatio="none" width="62.3055" x="0" y="236.849">
511 <clipPath id="mfid5">
512 <rect width="400.92" height="101.96" id="mfid6"/>
513 </clipPath>
514 <g clip-path="url(#mfid5)">
515 <defs>
516 <image id="mfid7" width="148" height="38" xlink:href="data:image/png;base64,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"/>
517 </defs>
518 <!-- Unsupported Record: EmfPlusRecordTypeSetObject Obj_ImageAttributes -->
519 <g>
520 <g transform="matrix(2.7162, 0, 0, 2.7105, 0, 0)">
521 <clipPath id="mfid8">
522 <rect x="-0.5" y="-0.5" width="148" height="38"/>
523 </clipPath>
524 <use xlink:href="#mfid7" clip-path="url(#mfid8)" transform="matrix(1, 0, 0, 1, 0.5, 0.5)"/>
525 </g>
526 </g>
527 </g>
528 </svg>
529 </switch>
530 <rect v:rectContext="foreign" x="0" y="236.849" width="62.3055" height="15.8149" class="st14"/>
531 </g>
532 </g>
533 <g id="shape19-68" v:mID="19" v:groupContext="shape" transform="translate(263.404,-35.7311)">
534 <title>Sheet.19</title>
535 <desc>Docker Container Running on J7 PSDK Linux</desc>
536 <v:userDefs>
537 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
538 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
539 </v:userDefs>
540 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
541 <v:textRect cx="77.2535" cy="240.617" width="154.51" height="24.0945"/>
542 <rect x="0" y="228.57" width="154.507" height="24.0945" class="st15"/>
543 <text x="35.58" y="237.62" class="st18" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Docker Container <v:newlineChar/><tspan
544 x="12.53" dy="1.2em" class="st5">Running on J7 PSDK Linux</tspan></text> </g>
545 <g id="group27-72" transform="translate(0.5,-182.424)" v:mID="27" v:groupContext="group">
546 <v:userDefs>
547 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
548 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
549 </v:userDefs>
550 <title>Sheet.27</title>
551 <g id="shape28-73" v:mID="28" v:groupContext="shape">
552 <title>Sheet.28</title>
553 <path d="M94.96 231.43 L94.96 231.4 L11.34 231.4 L11.34 231.43 A10.6299 10.6299 -180 0 0 -0 242.03 A10.6299 10.6299
554 -180 0 0 11.34 252.64 L11.34 252.66 L94.96 252.66 L94.96 252.64 A10.6299 10.6299 -180 0 0 106.3 242.03
555 A10.6299 10.6299 -180 0 0 94.96 231.43 Z" class="st19"/>
556 </g>
557 <g id="shape25-75" v:mID="25" v:groupContext="shape" v:layerMember="1;0" transform="translate(77.9528,-3.54331)">
558 <title>On-page reference</title>
559 <v:userDefs>
560 <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
561 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
562 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
563 </v:userDefs>
564 <path d="M0 245.58 A7.08661 7.08661 0 0 1 14.17 245.58 A7.08661 7.08661 0 1 1 0 245.58 Z" class="st20"/>
565 </g>
566 <g id="shape26-78" v:mID="26" v:groupContext="shape" v:layerMember="1;0" transform="translate(14.1732,-3.54331)">
567 <title>On-page reference.26</title>
568 <v:userDefs>
569 <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
570 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
571 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
572 </v:userDefs>
573 <path d="M0 245.58 A7.08661 7.08661 0 0 1 14.17 245.58 A7.08661 7.08661 0 1 1 0 245.58 Z" class="st20"/>
574 </g>
575 </g>
576 <g id="shape1-81" v:mID="1" v:groupContext="shape" v:layerMember="1" transform="translate(247.823,-200.102)">
577 <title>Dynamic connector.1</title>
578 <v:userDefs>
579 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
580 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
581 </v:userDefs>
582 <path d="M0 259.71 L28.35 259.79" class="st21"/>
583 </g>
584 <g id="shape24-88" v:mID="24" v:groupContext="shape" v:layerMember="1" transform="translate(432.075,-185.928)">
585 <title>Dynamic connector.24</title>
586 <v:userDefs>
587 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
588 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
589 </v:userDefs>
590 <path d="M0 245.62 L26.93 245.54" class="st21"/>
591 </g>
592 <g id="shape29-94" v:mID="29" v:groupContext="shape" transform="translate(91.9173,-167.133)">
593 <title>Sheet.29</title>
594 <desc>USB 3.1 /dev/videoX</desc>
595 <v:userDefs>
596 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
597 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
598 </v:userDefs>
599 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
600 <v:textRect cx="32.5984" cy="241.83" width="65.2" height="21.6693"/>
601 <rect x="0" y="230.995" width="65.1969" height="21.6693" class="st15"/>
602 <text x="17.7" y="239.43" class="st23" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>USB 3.1<v:newlineChar/><tspan
603 x="11.7" dy="1.2em" class="st5">/dev/videoX</tspan></text> </g>
604 <g id="shape11-98" v:mID="11" v:groupContext="shape" transform="translate(553.965,-171.385)">
605 <title>Sheet.11</title>
606 <desc>Ethernet</desc>
607 <v:userDefs>
608 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
609 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
610 </v:userDefs>
611 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
612 <v:textRect cx="24.8031" cy="241.83" width="49.61" height="21.6693"/>
613 <rect x="0" y="230.995" width="49.6063" height="21.6693" class="st15"/>
614 <text x="9.68" y="244.23" class="st23" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Ethernet</text> </g>
615 <g id="group38-101" transform="translate(169.87,-0.988993)" v:mID="38" v:groupContext="group">
616 <v:userDefs>
617 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
618 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
619 </v:userDefs>
620 <title>Sheet.38</title>
621 <g id="shape32-102" v:mID="32" v:groupContext="shape">
622 <title>Rectangle.32</title>
623 <v:userDefs>
624 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
625 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
626 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
627 </v:userDefs>
628 <rect x="0" y="236.664" width="42.5197" height="16" class="st3"/>
629 </g>
630 <g id="shape33-105" v:mID="33" v:groupContext="shape" transform="translate(106.299,-8)">
631 <title>Sheet.33</title>
632 <v:userDefs>
633 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
634 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
635 </v:userDefs>
636 <path d="M0 252.66 L49.61 252.66" class="st21"/>
637 </g>
638 <g id="shape34-111" v:mID="34" v:groupContext="shape" transform="translate(45.3543,0)">
639 <title>Sheet.34</title>
640 <desc>ROS Node</desc>
641 <v:userDefs>
642 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
643 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
644 </v:userDefs>
645 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
646 <v:textRect cx="26.9291" cy="244.664" width="53.86" height="16"/>
647 <rect x="0" y="236.664" width="53.8583" height="16" class="st15"/>
648 <text x="5.17" y="247.36" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ROS Node</text> </g>
649 <g id="shape35-114" v:mID="35" v:groupContext="shape" transform="translate(153.78,0)">
650 <title>Sheet.35</title>
651 <desc>ROS Topic</desc>
652 <v:userDefs>
653 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
654 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
655 </v:userDefs>
656 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
657 <v:textRect cx="30.4724" cy="244.664" width="60.95" height="16"/>
658 <rect x="0" y="236.664" width="60.9449" height="16" class="st15"/>
659 <text x="8.47" y="247.36" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ROS Topic</text> </g>
660 <g id="shape36-117" v:mID="36" v:groupContext="shape" transform="translate(226.772,-0.913386)">
661 <title>Rectangle.36</title>
662 <v:userDefs>
663 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
664 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
665 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
666 </v:userDefs>
667 <rect x="0" y="238.491" width="42.5197" height="14.1732" class="st24"/>
668 </g>
669 <g id="shape37-120" v:mID="37" v:groupContext="shape" transform="translate(270.709,0)">
670 <title>Sheet.37</title>
671 <desc>OpenVX Graph</desc>
672 <v:userDefs>
673 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
674 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
675 </v:userDefs>
676 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
677 <v:textRect cx="35.4331" cy="244.664" width="70.87" height="16"/>
678 <rect x="0" y="236.664" width="70.8661" height="16" class="st15"/>
679 <text x="4.66" y="247.36" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>OpenVX Graph</text> </g>
680 </g>
681 <g id="shape39-123" v:mID="39" v:groupContext="shape" transform="translate(459.004,-171.794)">
682 <title>Rectangle.39</title>
683 <desc>Post-Processing ROS Node</desc>
684 <v:userDefs>
685 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
686 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
687 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
688 </v:userDefs>
689 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
690 <v:textRect cx="42.5197" cy="231.404" width="85.04" height="42.5197"/>
691 <rect x="0" y="210.144" width="85.0394" height="42.5197" class="st3"/>
692 <text x="9.76" y="228.7" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Post-Processing <tspan
693 x="20.76" dy="1.2em" class="st5">ROS Node</tspan></text> </g>
694 <g id="shape40-128" v:mID="40" v:groupContext="shape" v:layerMember="1" transform="translate(544.043,-185.967)">
695 <title>Dynamic connector.40</title>
696 <v:userDefs>
697 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
698 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
699 </v:userDefs>
700 <path d="M0 245.58 L79.37 245.58" class="st21"/>
701 </g>
702 <g id="group41-134" transform="translate(276.169,-157.621)" v:mID="41" v:groupContext="group">
703 <v:userDefs>
704 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
705 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
706 </v:userDefs>
707 <title>Sheet.41</title>
708 <g id="shape2-135" v:mID="2" v:groupContext="shape">
709 <title>Rectangle.2</title>
710 <v:userDefs>
711 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
712 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
713 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
714 </v:userDefs>
715 <rect x="0" y="181.798" width="155.906" height="70.8661" class="st3"/>
716 </g>
717 <g id="shape4-138" v:mID="4" v:groupContext="shape" transform="translate(25.5118,-13.8615)">
718 <title>Rectangle.4</title>
719 <desc>Deep-Learning / Vision Processing (C7/MMA, C6, HWAs)</desc>
720 <v:userDefs>
721 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
722 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
723 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
724 </v:userDefs>
725 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
726 <v:textRect cx="52.4409" cy="231.404" width="111.88" height="42.5197"/>
727 <rect x="0" y="210.144" width="104.882" height="42.5197" class="st24"/>
728 <text x="18.44" y="223.3" class="st25" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Deep-Learning / <v:lf/><tspan
729 x="13.43" dy="1.2em" class="st5">Vision Processing<v:newlineChar/></tspan><tspan x="13.33" dy="1.35em"
730 class="st26">(C7/MMA, C6, HWAs)</tspan></text> </g>
731 <g id="shape5-144" v:mID="5" v:groupContext="shape" transform="translate(252.664,195.971) rotate(90)">
732 <title>Rectangle.5</title>
733 <desc>Subscriber</desc>
734 <v:userDefs>
735 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
736 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
737 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
738 </v:userDefs>
739 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
740 <v:textRect cx="21.3378" cy="245.578" width="42.68" height="14.1732"/>
741 <rect x="0" y="238.491" width="42.6756" height="14.1732" class="st12"/>
742 <text x="4.61" y="247.68" class="st27" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Subscriber</text> </g>
743 <g id="shape6-148" v:mID="6" v:groupContext="shape" transform="translate(394.396,195.971) rotate(90)">
744 <title>Rectangle.6</title>
745 <desc>Publisher</desc>
746 <v:userDefs>
747 <v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
748 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
749 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
750 </v:userDefs>
751 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
752 <v:textRect cx="21.3378" cy="245.578" width="42.68" height="14.1732"/>
753 <rect x="0" y="238.491" width="42.6756" height="14.1732" class="st12"/>
754 <text x="6.75" y="247.68" class="st27" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Publisher</text> </g>
755 </g>
756 <g id="group31-152" transform="translate(169.87,-95.2586)" v:mID="31" v:groupContext="group">
757 <v:userDefs>
758 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
759 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
760 </v:userDefs>
761 <title>Sheet.31</title>
762 <g id="shape42-153" v:mID="42" v:groupContext="shape" v:layerMember="0"
763 transform="translate(-191.719,252.664) rotate(-90)">
764 <title>Database.15</title>
765 <desc>OpenCV</desc>
766 <v:custProps>
767 <v:cp v:nameU="Cost" v:lbl="Cost" v:prompt="" v:type="7" v:format="@" v:sortKey="" v:invis="false"
768 v:ask="false" v:langID="1033" v:cal="0"/>
769 <v:cp v:nameU="ProcessNumber" v:lbl="Process Number" v:prompt="" v:type="2" v:format="" v:sortKey=""
770 v:invis="false" v:ask="false" v:langID="1033" v:cal="0"/>
771 <v:cp v:nameU="Owner" v:lbl="Owner" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
772 v:ask="false" v:langID="1033" v:cal="0"/>
773 <v:cp v:nameU="Function" v:lbl="Function" v:prompt="" v:type="0" v:format="" v:sortKey="" v:invis="false"
774 v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
775 <v:cp v:nameU="StartDate" v:lbl="Start Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
776 v:ask="false" v:langID="1033" v:cal="0"/>
777 <v:cp v:nameU="EndDate" v:lbl="End Date" v:prompt="" v:type="5" v:format="" v:sortKey="" v:invis="false"
778 v:ask="false" v:langID="1033" v:cal="0"/>
779 <v:cp v:nameU="Status" v:lbl="Status" v:prompt="" v:type="4"
780 v:format=";Not Started;In Progress;Completed;Deferred;Waiting on Input" v:sortKey="" v:invis="false"
781 v:ask="false" v:langID="1033" v:cal="0" v:val="VT4()"/>
782 </v:custProps>
783 <v:userDefs>
784 <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
785 <v:ud v:nameU="DefaultWidth" v:prompt="" v:val="VT0(0.98425196850394):24"/>
786 <v:ud v:nameU="DefaultHeight" v:prompt="" v:val="VT0(0.59055118110236):24"/>
787 <v:ud v:nameU="ResizeTxtHeight" v:prompt="" v:val="VT0(0.59055118110236):24"/>
788 <v:ud v:nameU="msvThemeColors" v:val="VT0(36):26"/>
789 <v:ud v:nameU="msvThemeEffects" v:val="VT0(16):26"/>
790 </v:userDefs>
791 <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
792 <v:textRect cx="19.1339" cy="222.492" width="59.53" height="40.5298" transform="rotate(90)"/>
793 <path d="M5.14 191.72 L41.1 191.72 A92.9354 92.9354 0 0 1 41.1 252.66 L5.14 252.66 A92.9354 92.9354 0 0 1 5.14 191.72
794 Z" class="st28"/>
795 <path d="M5.14 191.72 L41.1 191.72 A92.9354 92.9354 0 0 1 41.1 252.66 L5.14 252.66 A92.9354 92.9354 0 0 1 5.14 191.72"
796 class="st7"/>
797 <path d="M41.1 191.72 A92.9354 92.9354 -180 0 0 41.1 252.66" class="st7"/>
798 <text x="204.74" y="-5.63" transform="rotate(90)" class="st29" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/><v:newlineChar/><v:newlineChar/>OpenCV</text> </g>
799 </g>
800 <g id="shape43-160" v:mID="43" v:groupContext="shape" transform="translate(190.434,-108.723)">
801 <title>Sheet.43</title>
802 <rect v:rectContext="foreign" x="0" y="234.239" width="19.8178" height="18.4252" class="st14"/>
803 <image x="0" y="234.239" width="19.8178" height="18.4252" preserveAspectRatio="none" xlink:href="data:image/png;base64,
804 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
960 /6Y9W8nfMchX/5K7NHfl497NmEA9a0LfuMMn634//jTIV79bK1/dlSdQz5pAPWvPPr7ntNfXj3ThrOYr+n2bNYF61oT2+vqR9ms1e/40
961 yO/w/LTsD9hoAvWsCdSzNu50bM9M6Bt04azmq7vyft9mTaCeNaG9/g534/3z8eJPg7wWShfPap59+Z1APWsC9awN2qcVLWidzYS+cYeL
962 vTzbk7beKyZQz5pyh8dm5fhJ+k+DvKCLZ0WPvgRPGFszJlDPWtzhkUr56vl4mdA37nLBj3duPf2+zZpAPWtCvZ72aEXHvfjLIL/LRV+2
963 xbaTYFz8LH1n1gTqGdtraW9W9NXz8TJhbNEFtKJHj1jG9c6YQD1rwl2+yipH/jLI7/IstaQ7uIS+M2sC9V7ZXkf7sqr9uo5MGDt0Aa0q
964 7U2/3lkTqGe9yl2+wirpq6y/DPLaLLqIVnW8i0tojSsmUO/M9po7fXVlHquUCWPnTndw5Ui/3lkTqGe9Qr2O9mNV6Susvwzygi6kle2H
965 eUJ/Qs2aQL0zizsN8dI8VikTxs6d7uLK8U6uX++sCdSzzlKvob1YWQIH+Z0erzTbIEgYT6oZE6hHNu42xMu2vnHNownUoQtpZfth3q93
966 1gTqWWehPVhZeqxS4CCvDaOLaXWvnAg9/Qk1awL1yOKOn4TtY5UygVp3e7xSfsUwT6CedYY7Hrujb1z/+n8sMW7WHe/qSvslOplAPavl
967 jkO8nPlqivbPStSv0wW1ukd3dpZx72ZMoF5v+xha8x1sjOs+HOR3HQrl1WGeQD2r4a6feEu7B8W4dzMeccc7uzIZ5rR/1gTqNdvv01rv
968 YDte47qfa6ZfbNJFdRf7uzxaO5lAPesr7jzE22MVC+2f9Yi7fdOzt4bD2dqPGPduxoSz3p2PU9nWOq6/PBzkxZ0HRFnra2sd108mUM96
969 RP0eretOzjxWKca9m/EMurDu5NGz1yNo/6wJR627D/GyGNffPB3kd3680mvvzhOoZyU+5djMQvtnPeOuj1d6Zx610P5ZE8ZG/fwTjk37
970 RNvWP3r6aKW4+11509ydJ1DP2lP//SnHZPZuvBj3bsYz6vfpAruj5u583LsZE/rXf8JdeLOtu9/H3peD/FPu/Jpnd+cJY8va8ykDvHkF
971 2kPrKz7hzq/56tn5uHczpnzSAC/bV0q0l83TQV4WdJHd3Rrobf1F//Mr9HtqbNTPP22Al7XmK4z7OOMrPm2AlEcDfdy7Ga9S+/9Jn0yb
972 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
997 2/8HX/LFIMFWZPAAAAAASUVORK5CYII="/>
998 <rect v:rectContext="foreign" x="0" y="234.239" width="19.8178" height="18.4252" class="st14"/>
999 </g>
1000 </g>
1001</svg>
diff --git a/docker/ros_setup.sh b/docker/ros_setup.sh
new file mode 100755
index 0000000..aa6bbc2
--- /dev/null
+++ b/docker/ros_setup.sh
@@ -0,0 +1,16 @@
1#!/bin/bash
2set -e
3
4# set up ROS environment
5source "/opt/ros/$ROS_DISTRO/setup.bash"
6
7# ROS network settings
8export ROS_MASTER_URI=http://$J7_IP_ADDR:11311
9export ROS_IP=$J7_IP_ADDR
10
11# source catkin_ws setup.bash if exists
12SETUP_FILE=$CATKIN_WS/devel/setup.bash
13if [ -f $SETUP_FILE ]; then
14 source $SETUP_FILE
15fi
16
diff --git a/docker/scripts/config_opkg_repo.sh b/docker/scripts/config_opkg_repo.sh
new file mode 100755
index 0000000..129045e
--- /dev/null
+++ b/docker/scripts/config_opkg_repo.sh
@@ -0,0 +1,43 @@
1#!/bin/bash
2# Should run on PSDK host linux
3OPKG_REPO_DIR=/opkg_repo
4
5FILE=/etc/opkg/base-feeds.conf
6if [ -f "${FILE}_org" ]
7then
8 echo "It looks like $FILE already updated. Here is content:"
9 echo "cat $FILE"
10 cat $FILE
11else
12 mv "$FILE" "${FILE}_org"
13 # Update base-feeds.conf to use a local OPKG repository
14 echo "# Original $FILE file was copied to ${FILE}_org" > $FILE
15 echo "Updated $FILE"
16 echo "cat $FILE"
17 cat $FILE
18fi
19
20FILE=/etc/opkg/opkg.conf
21if [ -f "${FILE}_org" ]
22then
23 echo ""
24 echo "It looks like $FILE already updated. Here is content:"
25 echo "cat $FILE"
26 cat $FILE
27else
28 mv "$FILE" "${FILE}_org"
29 # Update opkg.conf to use a local OPKG repository
30 echo "# Original $FILE file was copied to ${FILE}_org" > $FILE
31 echo "# Settings for a local OPKG repository" >> $FILE
32 echo "src/gz local file://$OPKG_REPO_DIR" >> $FILE
33 echo "dest root /" >> $FILE
34 echo "option lists_dir /var/lib/opkg/lists" >> $FILE
35
36 echo ""
37 echo "Updated $FILE"
38 echo "cat $FILE"
39 cat $FILE
40fi
41
42echo ""
43echo "$0: Completed" \ No newline at end of file
diff --git a/docker/scripts/install_tivision_apps_ipk.sh b/docker/scripts/install_tivision_apps_ipk.sh
new file mode 100755
index 0000000..3c2233b
--- /dev/null
+++ b/docker/scripts/install_tivision_apps_ipk.sh
@@ -0,0 +1,16 @@
1#!/bin/bash
2IPK_PKG=tivision_apps
3
4CHECK_INSTALLED=$(opkg list-installed | grep $IPK_PKG)
5echo "opkg list-installed | grep $IPK_PKG"
6echo $CHECK_INSTALLED
7
8opkg update
9if [[ $CHECK_INSTALLED = ${IPK_PKG}* ]]; then
10 echo "opkg remove $IPK_PKG"
11 opkg remove $IPK_PKG
12fi
13echo "opkg install $IPK_PKG --force-overwrite"
14opkg install $IPK_PKG --force-overwrite
15
16echo "$0: Completed" \ No newline at end of file
diff --git a/docker/setup_ti_processor_sdk.sh b/docker/setup_ti_processor_sdk.sh
index 90693a8..4d9ee04 100644
--- a/docker/setup_ti_processor_sdk.sh
+++ b/docker/setup_ti_processor_sdk.sh
@@ -1,13 +1,14 @@
1#!/bin/bash 1#!/bin/bash
2# set up TI Processor SDK environment 2# set up TI Processor SDK environment
3ln -s /host/usr/lib/libtivision_apps.so.$TIVA_LIB_VER /usr/lib/libtivision_apps.so.$TIVA_LIB_VER 3ln -snf /host/usr/lib/libtivision_apps.so.$TIVA_LIB_VER /usr/lib/libtivision_apps.so.$TIVA_LIB_VER
4ln -s /usr/lib/libtivision_apps.so.$TIVA_LIB_VER /usr/lib/libtivision_apps.so 4ln -snf /usr/lib/libtivision_apps.so.$TIVA_LIB_VER /usr/lib/libtivision_apps.so
5ln -s /host/usr/include/processor_sdk /usr/include/processor_sdk 5ln -snf /host/usr/include/processor_sdk /usr/include/processor_sdk
6ln -s /host/usr/lib/libion.so.1.0.0 /usr/lib/libion.so.1.0.0 6ln -snf /host/usr/lib/libion.so.1.0.0 /usr/lib/libion.so.1.0.0
7ln -s /usr/lib/libion.so.1.0.0 /usr/lib/libion.so 7ln -snf /usr/lib/libion.so.1.0.0 /usr/lib/libion.so
8ln -s /host/usr/lib/libgbm.so.1.0.0 /usr/lib/libgbm.so.1.0.0 8ln -snf /host/usr/lib/libti_rpmsg_char.so.0.3.0 /usr/lib/libti_rpmsg_char.so.0.3.0
9ln -s /usr/lib/libgbm.so.1.0.0 /usr/lib/libgbm.so.1 9ln -snf /usr/lib/libti_rpmsg_char.so.0.3.0 /usr/lib/libti_rpmsg_char.so.0
10ln -s /usr/lib/libgbm.so.1.0.0 /usr/lib/libgbm.so 10ln -snf /usr/lib/libti_rpmsg_char.so.0.3.0 /usr/lib/libti_rpmsg_char.so
11ln -s /host/usr/lib/libti_rpmsg_char.so.0.2.0 /usr/lib/libti_rpmsg_char.so.0.2.0 11ln -snf /host/usr/lib/libvx_tidl_rt.so.1.0 /usr/lib/libvx_tidl_rt.so.1.0
12ln -s /usr/lib/libti_rpmsg_char.so.0.2.0 /usr/lib/libti_rpmsg_char.so.0 12ln -snf /usr/lib/libvx_tidl_rt.so.1.0 /usr/lib/libvx_tidl_rt.so
13ln -s /usr/lib/libti_rpmsg_char.so.0.2.0 /usr/lib/libti_rpmsg_char.so 13ln -snf /host/usr/lib/python3.8/site-packages/dlr/libdlr.so /usr/lib/libdlr.so
14ln -snf /host/usr/include/dlr.h /usr/include/dlr.h
diff --git a/drivers/zed_capture/CMakeLists.txt b/drivers/zed_capture/CMakeLists.txt
new file mode 100644
index 0000000..635fcd4
--- /dev/null
+++ b/drivers/zed_capture/CMakeLists.txt
@@ -0,0 +1,40 @@
1cmake_minimum_required(VERSION 2.8.3)
2project(zed_capture)
3
4find_package(catkin REQUIRED COMPONENTS
5 cmake_modules
6 roscpp cv_bridge
7 image_transport
8 camera_info_manager
9 nodelet
10)
11
12find_package(OpenCV REQUIRED)
13
14include_directories(
15 include
16 ${catkin_INCLUDE_DIRS}
17 ${OpenCV_INCLUDE_DIRS}
18)
19
20link_directories(${catkin_LIBRARY_DIRS})
21
22catkin_package(
23 LIBRARIES
24 CATKIN_DEPENDS
25)
26
27## nodelet
28add_library(zed_capture_nodelet
29 src/zed_capture_node.cpp
30 src/usb_stereo_camera.cpp
31 src/zed_capture_nodelet.cpp
32)
33target_link_libraries(zed_capture_nodelet ${catkin_LIBRARIES} ${OpenCV_LIBS})
34
35# node
36add_executable(zed_capture
37 src/zed_capture_node.cpp
38 src/usb_stereo_camera.cpp
39)
40target_link_libraries(zed_capture ${catkin_LIBRARIES} ${OpenCV_LIBS})
diff --git a/drivers/zed_capture/README.md b/drivers/zed_capture/README.md
new file mode 100644
index 0000000..09ad5a8
--- /dev/null
+++ b/drivers/zed_capture/README.md
@@ -0,0 +1,88 @@
1ZED Stereo Camera ROS Node
2==========================
3ZED stereo camera ROS node based on OpenCV VideoCapture API for publishing left and right raw images and their camera_info.
4
5## Usage:
6
71. Obtain the stereo camera calibration data file for your ZED camera (for a particular serial number) with one of two ways described below (already done for `SN29788442` and `SN5867575`):
8
9 Find the calibration file in
10 ```
11 cd /usr/local/zed/settings
12 ```
13 or, download from:
14 http://calib.stereolabs.com/?SN=xxxx
15
16 where xxxx is the serial number (SN) of your ZED camera.
17
18 Place the `SNxxxx.conf` file into `<zed_capture>/config` folder
19
20 Update the ZED camera SN string, `zed_sn_str`, in `<zed_capture>/launch/zed_capture.launch`
21
22
232. Generate `camera_info` YAML files and undistortion & rectification LUT files (already done for `SN29788442` and `SN5867575`)
24
25 Run the following script:
26 ```
27 python2 <zed_capture>/script/generate_undist_rect_map.py -i SNxxxx.conf -m <camera_mode>
28 ```
29 where
30 - `<zed_capture>` is the folder where the ZED camera node is installed (try `roscd zed_capture` to change directory after `catkin_make`),
31 - `SNxxxx.conf` is the factory calibration data file obtained from Step 1, and
32 - `<camera_mode>` is camera mode. Valid `<camera_mode>`: `2K`, `FHD`, `HD`, `HD2`, `VGA` (see ``Launch File Parameters`` section for description). If the `-m` argument is not provided, by default the tool will iterate for the following three camera modes: `HD`, `HD2`, and `FHD`.
33
34 This script parses the calibration data and generates the following files:
35
36 * `<zed_capture>/config/<SN_string>_<camera_mode>_camera_info_{left,right}.yaml`: `camera_info` for left and right raw image
37 * `<zed_capture>/config/<SN_string>_<camera_mode>_remap_LUT_{left,right}.{txt,bin}`: undist/rect remap LUT for left and right raw images, which are required by J7 VPAC/LDC hardware accelerator.
38
393. Build the ZED camera ROS node
40
41 ```
42 cd $CATKIN_WS
43 catkin_make -j1
44 ```
45
464. Launch the ZED camera node
47 ```
48 roslaunch zed_capture zed_capture.launch
49 ```
50
51## Launch File Parameters
52
53 Parameter | Description | Value
54------------------------------|-------------------------------------------------------------|-------------------------
55 zed_sn_str | ZED camera SN string | string
56 device_name | camera device_name. Typically `/dev/video0` on the target | string
57 camera_mode | ZED camera mode | '2K' (2208x1242)
58 _ | _ | 'FHD' (1920x1080)
59 _ | _ | 'HD' (1280x720)
60 _ | _ | 'HD2' (1280x720)*
61 _ | _ | 'VGA' (672x376)
62 frame_rate | rate at which images are published | int
63 encoding | image encoding | 'yuv422' (default) or 'bgr8'
64
65**'HD2'** is a newly added mode that provides 720p resolution for experiments that need a longer focal length than the native 'HD'. The images are obtained by center-cropping the original 1080p images captured from the 'FHD' mode.
66
67## Data Collection Steps
68
691. Connect the ZED camera to **UBS 3** Type-C port and check it with `ls /dev/video*`. In my Ubuntu PC setup, ZED camera is recognized as `/dev/video2`; while J7 host Linux, recognized as `/dev/video0`.
702. If necessary, update `launch/zed_capture.launch` to change video device, camera mode, frame rate, and etc.
713. On the first terminal, launch the ZED capture node with following, and **keep it running**:
72```
73$ roslaunch zed_capture zed_capture.launch
74```
754. On the second terminal, to capture into ROS bag files, run one of two examples below
76```
77$ roslaunch zed_capture recordbag.launch # collect 15 seconds of data and stop itself
78$ roslaunch zed_capture recordbag_split.launch # save into a series of bag files, each keeping 15 seconds of data, until terminated with Ctrl+C
79```
805. (Optional to check the ROS topics) On 3rd terminal,
81```
82$ rostopic list
83$ rqt_image_view /camera/left/image_raw
84```
85
86By default, ROS bag files are stored under `${HOME}/.ros` folder.
87
88**Note**: It is not recommended combining the `zed_capture` node and ROSBAG capture into a single launch file, since it takes some several seconds for the ZED camera to settle down its ISP tuning after the ZED camera node starts.
diff --git a/drivers/zed_capture/config/README.txt b/drivers/zed_capture/config/README.txt
new file mode 100644
index 0000000..cb1cec0
--- /dev/null
+++ b/drivers/zed_capture/config/README.txt
@@ -0,0 +1,2 @@
1* SN29788442.conf: ZED2
2* SN5867575.conf: ZED1 \ No newline at end of file
diff --git a/drivers/zed_capture/config/SN29788442.conf b/drivers/zed_capture/config/SN29788442.conf
new file mode 100644
index 0000000..8801247
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442.conf
@@ -0,0 +1,105 @@
1[LEFT_CAM_2K]
2fx=1055.07
3fy=1054.55
4cx=1139.78
5cy=604.067
6k1=-0.0411023
7k2=0.00874902
8k3=-0.00427672
9p1=-9.93657e-05
10p2=0.000233861
11
12[RIGHT_CAM_2K]
13fx=1058.48
14fy=1057.6
15cx=1061.51
16cy=711.797
17k1=-0.0393177
18k2=0.00547658
19k3=-0.00297473
20p1=-0.000287072
21p2=-0.000325178
22
23[LEFT_CAM_FHD]
24fx=1055.07
25fy=1054.55
26cx=995.78
27cy=523.067
28k1=-0.0411023
29k2=0.00874902
30k3=-0.00427672
31p1=-9.93657e-05
32p2=0.000233861
33
34[RIGHT_CAM_FHD]
35fx=1058.48
36fy=1057.6
37cx=917.51
38cy=630.797
39k1=-0.0393177
40k2=0.00547658
41k3=-0.00297473
42p1=-0.000287072
43p2=-0.000325178
44
45[LEFT_CAM_HD]
46fx=527.535
47fy=527.275
48cx=656.39
49cy=350.0335
50k1=-0.0411023
51k2=0.00874902
52k3=-0.00427672
53p1=-9.93657e-05
54p2=0.000233861
55
56[RIGHT_CAM_HD]
57fx=529.24
58fy=528.8
59cx=617.255
60cy=403.8985
61k1=-0.0393177
62k2=0.00547658
63k3=-0.00297473
64p1=-0.000287072
65p2=-0.000325178
66
67[LEFT_CAM_VGA]
68fx=263.7675
69fy=263.6375
70cx=343.695
71cy=182.51675
72k1=-0.0411023
73k2=0.00874902
74k3=-0.00427672
75p1=-9.93657e-05
76p2=0.000233861
77
78[RIGHT_CAM_VGA]
79fx=264.62
80fy=264.4
81cx=324.1275
82cy=209.44925
83k1=-0.0393177
84k2=0.00547658
85k3=-0.00297473
86p1=-0.000287072
87p2=-0.000325178
88
89[STEREO]
90Baseline=120.305
91TY=0.248431
92TZ=-0.638896
93CV_2K=-0.00648245
94CV_FHD=-0.00648245
95CV_HD=-0.00648245
96CV_VGA=-0.00648245
97RX_2K=0.000227781
98RX_FHD=0.000227781
99RX_HD=0.000227781
100RX_VGA=0.000227781
101RZ_2K=-0.00110319
102RZ_FHD=-0.00110319
103RZ_HD=-0.00110319
104RZ_VGA=-0.00110319
105
diff --git a/drivers/zed_capture/config/SN29788442_FHD_LUT_left.bin b/drivers/zed_capture/config/SN29788442_FHD_LUT_left.bin
new file mode 100644
index 0000000..848e02b
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_FHD_LUT_left.bin
Binary files differ
diff --git a/drivers/zed_capture/config/SN29788442_FHD_LUT_right.bin b/drivers/zed_capture/config/SN29788442_FHD_LUT_right.bin
new file mode 100644
index 0000000..af58807
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_FHD_LUT_right.bin
Binary files differ
diff --git a/drivers/zed_capture/config/SN29788442_FHD_camera_info_left.yaml b/drivers/zed_capture/config/SN29788442_FHD_camera_info_left.yaml
new file mode 100644
index 0000000..9c8475c
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_FHD_camera_info_left.yaml
@@ -0,0 +1,35 @@
1%YAML:1.0
2---
3image_width: "1920"
4image_height: "1080"
5camera_name: camera/left
6camera_matrix: !!opencv-matrix
7 rows: 3
8 cols: 3
9 dt: d
10 data: [ 1.0550699999999999e+03, 0., 9.9577999999999997e+02, 0.,
11 1.0545500000000000e+03, 5.2306700000000001e+02, 0., 0., 1. ]
12distortion_model: plumb_bob
13distortion_coefficients: !!opencv-matrix
14 rows: 1
15 cols: 5
16 dt: d
17 data: [ -4.1102300000000001e-02, 8.7490199999999997e-03,
18 -9.9365700000000003e-05, 2.3386100000000000e-04,
19 -4.2767200000000003e-03 ]
20rectification_matrix: !!opencv-matrix
21 rows: 3
22 cols: 3
23 dt: d
24 data: [ 9.9999858626872085e-01, -8.5360341000500790e-04,
25 -1.4487310923408047e-03, 8.5343582464341621e-04,
26 9.9999962906170980e-01, -1.1629159973782838e-04,
27 1.4488298218570607e-03, 1.1505503631829604e-04,
28 9.9999894382668508e-01 ]
29projection_matrix: !!opencv-matrix
30 rows: 3
31 cols: 4
32 dt: d
33 data: [ 1.1749300091443988e+03, 0., 9.5274171447753906e+02, 0., 0.,
34 1.1749300091443988e+03, 5.7734686279296875e+02, 0., 0., 0., 1.,
35 0. ]
diff --git a/drivers/zed_capture/config/SN29788442_FHD_camera_info_right.yaml b/drivers/zed_capture/config/SN29788442_FHD_camera_info_right.yaml
new file mode 100644
index 0000000..98dfec9
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_FHD_camera_info_right.yaml
@@ -0,0 +1,35 @@
1%YAML:1.0
2---
3image_width: "1920"
4image_height: "1080"
5camera_name: camera/right
6camera_matrix: !!opencv-matrix
7 rows: 3
8 cols: 3
9 dt: d
10 data: [ 1.0584800000000000e+03, 0., 9.1750999999999999e+02, 0.,
11 1.0575999999999999e+03, 6.3079700000000003e+02, 0., 0., 1. ]
12distortion_model: plumb_bob
13distortion_coefficients: !!opencv-matrix
14 rows: 1
15 cols: 5
16 dt: d
17 data: [ -3.9317699999999997e-02, 5.4765800000000000e-03,
18 -2.8707199999999998e-04, -3.2517800000000002e-04,
19 -2.9747300000000001e-03 ]
20rectification_matrix: !!opencv-matrix
21 rows: 3
22 cols: 3
23 dt: d
24 data: [ 9.9998541717557465e-01, -1.9571968240524504e-03,
25 5.0333703205489950e-03, 1.9566145819841256e-03,
26 9.9999807855590417e-01, 1.2059799941158088e-04,
27 -5.0335966832307458e-03, -1.1074787498639898e-04,
28 9.9998732523934442e-01 ]
29projection_matrix: !!opencv-matrix
30 rows: 3
31 cols: 4
32 dt: d
33 data: [ 1.1749300091443988e+03, 0., 9.5274171447753906e+02,
34 -1.4913627158626984e+05, 0., 1.1749300091443988e+03,
35 5.7734686279296875e+02, 0., 0., 0., 1., 0. ]
diff --git a/drivers/zed_capture/config/SN29788442_HD2_LUT_left.bin b/drivers/zed_capture/config/SN29788442_HD2_LUT_left.bin
new file mode 100644
index 0000000..3c4c54d
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_HD2_LUT_left.bin
Binary files differ
diff --git a/drivers/zed_capture/config/SN29788442_HD2_LUT_right.bin b/drivers/zed_capture/config/SN29788442_HD2_LUT_right.bin
new file mode 100644
index 0000000..839192e
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_HD2_LUT_right.bin
Binary files differ
diff --git a/drivers/zed_capture/config/SN29788442_HD2_camera_info_left.yaml b/drivers/zed_capture/config/SN29788442_HD2_camera_info_left.yaml
new file mode 100644
index 0000000..f38e43e
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_HD2_camera_info_left.yaml
@@ -0,0 +1,35 @@
1%YAML:1.0
2---
3image_width: "1280"
4image_height: "720"
5camera_name: camera/left
6camera_matrix: !!opencv-matrix
7 rows: 3
8 cols: 3
9 dt: d
10 data: [ 1.0550699999999999e+03, 0., 6.7577999999999997e+02, 0.,
11 1.0545500000000000e+03, 3.4306700000000001e+02, 0., 0., 1. ]
12distortion_model: plumb_bob
13distortion_coefficients: !!opencv-matrix
14 rows: 1
15 cols: 5
16 dt: d
17 data: [ -4.1102300000000001e-02, 8.7490199999999997e-03,
18 -9.9365700000000003e-05, 2.3386100000000000e-04,
19 -4.2767200000000003e-03 ]
20rectification_matrix: !!opencv-matrix
21 rows: 3
22 cols: 3
23 dt: d
24 data: [ 9.9999858626872085e-01, -8.5360341000500790e-04,
25 -1.4487310923408047e-03, 8.5343582464341621e-04,
26 9.9999962906170980e-01, -1.1629159973782838e-04,
27 1.4488298218570607e-03, 1.1505503631829604e-04,
28 9.9999894382668508e-01 ]
29projection_matrix: !!opencv-matrix
30 rows: 3
31 cols: 4
32 dt: d
33 data: [ 1.2663337003528939e+03, 0., 6.3391535186767578e+02, 0., 0.,
34 1.2663337003528939e+03, 3.9692862319946289e+02, 0., 0., 0., 1.,
35 0. ]
diff --git a/drivers/zed_capture/config/SN29788442_HD2_camera_info_right.yaml b/drivers/zed_capture/config/SN29788442_HD2_camera_info_right.yaml
new file mode 100644
index 0000000..afd536d
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_HD2_camera_info_right.yaml
@@ -0,0 +1,35 @@
1%YAML:1.0
2---
3image_width: "1280"
4image_height: "720"
5camera_name: camera/right
6camera_matrix: !!opencv-matrix
7 rows: 3
8 cols: 3
9 dt: d
10 data: [ 1.0584800000000000e+03, 0., 5.9750999999999999e+02, 0.,
11 1.0575999999999999e+03, 4.5079700000000003e+02, 0., 0., 1. ]
12distortion_model: plumb_bob
13distortion_coefficients: !!opencv-matrix
14 rows: 1
15 cols: 5
16 dt: d
17 data: [ -3.9317699999999997e-02, 5.4765800000000000e-03,
18 -2.8707199999999998e-04, -3.2517800000000002e-04,
19 -2.9747300000000001e-03 ]
20rectification_matrix: !!opencv-matrix
21 rows: 3
22 cols: 3
23 dt: d
24 data: [ 9.9998541717557465e-01, -1.9571968240524504e-03,
25 5.0333703205489950e-03, 1.9566145819841256e-03,
26 9.9999807855590417e-01, 1.2059799941158088e-04,
27 -5.0335966832307458e-03, -1.1074787498639898e-04,
28 9.9998732523934442e-01 ]
29projection_matrix: !!opencv-matrix
30 rows: 3
31 cols: 4
32 dt: d
33 data: [ 1.2663337003528939e+03, 0., 6.3391535186767578e+02,
34 -1.6073832924924875e+05, 0., 1.2663337003528939e+03,
35 3.9692862319946289e+02, 0., 0., 0., 1., 0. ]
diff --git a/drivers/zed_capture/config/SN29788442_HD_LUT_left.bin b/drivers/zed_capture/config/SN29788442_HD_LUT_left.bin
new file mode 100644
index 0000000..84a83dc
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_HD_LUT_left.bin
Binary files differ
diff --git a/drivers/zed_capture/config/SN29788442_HD_LUT_right.bin b/drivers/zed_capture/config/SN29788442_HD_LUT_right.bin
new file mode 100644
index 0000000..eca8737
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_HD_LUT_right.bin
Binary files differ
diff --git a/drivers/zed_capture/config/SN29788442_HD_camera_info_left.yaml b/drivers/zed_capture/config/SN29788442_HD_camera_info_left.yaml
new file mode 100644
index 0000000..46d7b3e
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_HD_camera_info_left.yaml
@@ -0,0 +1,35 @@
1%YAML:1.0
2---
3image_width: "1280"
4image_height: "720"
5camera_name: camera/left
6camera_matrix: !!opencv-matrix
7 rows: 3
8 cols: 3
9 dt: d
10 data: [ 5.2753499999999997e+02, 0., 6.5638999999999999e+02, 0.,
11 5.2727499999999998e+02, 3.5003350000000000e+02, 0., 0., 1. ]
12distortion_model: plumb_bob
13distortion_coefficients: !!opencv-matrix
14 rows: 1
15 cols: 5
16 dt: d
17 data: [ -4.1102300000000001e-02, 8.7490199999999997e-03,
18 -9.9365700000000003e-05, 2.3386100000000000e-04,
19 -4.2767200000000003e-03 ]
20rectification_matrix: !!opencv-matrix
21 rows: 3
22 cols: 3
23 dt: d
24 data: [ 9.9998962781806278e-01, -2.8095115885277957e-03,
25 3.5848153266121040e-03, 2.8099326252712465e-03,
26 9.9999604581250001e-01, -1.1241888630836819e-04,
27 -3.5844853094162978e-03, 1.2249080982106413e-04,
28 9.9999356820984997e-01 ]
29projection_matrix: !!opencv-matrix
30 rows: 3
31 cols: 4
32 dt: d
33 data: [ 5.6292203694718694e+02, 0., 6.2652420043945312e+02, 0., 0.,
34 5.6292203694718694e+02, 3.7910808563232422e+02, 0., 0., 0., 1.,
35 0. ]
diff --git a/drivers/zed_capture/config/SN29788442_HD_camera_info_right.yaml b/drivers/zed_capture/config/SN29788442_HD_camera_info_right.yaml
new file mode 100644
index 0000000..d5cb388
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_HD_camera_info_right.yaml
@@ -0,0 +1,35 @@
1%YAML:1.0
2---
3image_width: "1280"
4image_height: "720"
5camera_name: camera/right
6camera_matrix: !!opencv-matrix
7 rows: 3
8 cols: 3
9 dt: d
10 data: [ 5.2924000000000001e+02, 0., 6.1725500000000000e+02, 0.,
11 5.2879999999999995e+02, 4.0389850000000001e+02, 0., 0., 1. ]
12distortion_model: plumb_bob
13distortion_coefficients: !!opencv-matrix
14 rows: 1
15 cols: 5
16 dt: d
17 data: [ -3.9317699999999997e-02, 5.4765800000000000e-03,
18 -2.8707199999999998e-04, -3.2517800000000002e-04,
19 -2.9747300000000001e-03 ]
20rectification_matrix: !!opencv-matrix
21 rows: 3
22 cols: 3
23 dt: d
24 data: [ 9.9994167252985844e-01, -3.9142224118686366e-03,
25 1.0066300268701268e-02, 3.9130400287925192e-03,
26 9.9999233462410309e-01, 1.3715235772536539e-04,
27 -1.0066759951558266e-02, -9.7754522082024205e-05,
28 9.9994932411004256e-01 ]
29projection_matrix: !!opencv-matrix
30 rows: 3
31 cols: 4
32 dt: d
33 data: [ 5.6292203694718694e+02, 0., 6.2652420043945312e+02,
34 -3.5727986262776161e+04, 0., 5.6292203694718694e+02,
35 3.7910808563232422e+02, 0., 0., 0., 1., 0. ]
diff --git a/drivers/zed_capture/config/SN29788442_HD_remap_LUT_left.txt b/drivers/zed_capture/config/SN29788442_HD_remap_LUT_left.txt
new file mode 100644
index 0000000..856a2fe
--- /dev/null
+++ b/drivers/zed_capture/config/SN29788442_HD_remap_LUT_left.txt
@@ -0,0 +1,921600 @@
11659 300
21672 299
31684 298
41696 297
51708 296
61721 295
71733 294
81745 293
91758 292
101770 291
111782 290
121795 288
131807 287
141819 286
151832 285
161844 284
171857 283
181869 282
191881 281
201894 280
211906 279
221919 278
231931 277
241944 276
251956 275
261969 274
271981 273
281994 272
292007 271
302019 270
312032 269
322044 268
332057 267
342070 266
352082 265
362095 264
372107 263
382120 262
392133 261
402145 260
412158 259
422171 258
432184 257
442196 256
452209 255
462222 254
472234 253
482247 252
492260 251
502273 250
512286 249
522298 248
532311 247
542324 247
552337 246
562350 245
572362 244
582375 243
592388 242
602401 241
612414 240
622427 239
632440 238
642453 237
652466 237
662479 236
672491 235
682504 234
692517 233
702530 232
712543 231
722556 230
732569 230
742582 229
752595 228
762608 227
772621 226
782634 225
792647 224
802661 224
812674 223
822687 222
832700 221
842713 220
852726 219
862739 219
872752 218
882765 217
892778 216
902792 215
912805 214
922818 214
932831 213
942844 212
952857 211
962871 210
972884 210
982897 209
992910 208
1002923 207
1012937 206
1022950 206
1032963 205
1042976 204
1052990 203
1063003 202
1073016 202
1083029 201
1093043 200
1103056 199
1113069 199
1123083 198
1133096 197
1143109 196
1153123 196
1163136 195
1173149 194
1183163 193
1193176 193
1203189 192
1213203 191
1223216 190
1233229 190
1243243 189
1253256 188
1263270 187
1273283 187
1283296 186
1293310 185
1303323 185
1313337 184
1323350 183
1333364 182
1343377 182
1353391 181
1363404 180
1373417 180
1383431 179
1393444 178
1403458 178
1413471 177
1423485 176
1433498 175
1443512 175
1453526 174
1463539 173
1473553 173
1483566 172
1493580 171
1503593 171
1513607 170
1523620 169
1533634 169
1543648 168
1553661 167
1563675 167
1573688 166
1583702 165
1593716 165
1603729 164
1613743 163
1623756 163
1633770 162
1643784 161
1653797 161
1663811 160
1673825 159
1683838 159
1693852 158
1703866 158
1713879 157
1723893 156
1733907 156
1743920 155
1753934 154
1763948 154
1773962 153
1783975 153
1793989 152
1804003 151
1814016 151
1824030 150
1834044 149
1844058 149
1854071 148
1864085 148
1874099 147
1884113 146
1894127 146
1904140 145
1914154 145
1924168 144
1934182 143
1944196 143
1954209 142
1964223 142
1974237 141
1984251 141
1994265 140
2004278 139
2014292 139
2024306 138
2034320 138
2044334 137
2054348 136
2064362 136
2074375 135
2084389 135
2094403 134
2104417 134
2114431 133
2124445 133
2134459 132
2144473 131
2154486 131
2164500 130
2174514 130
2184528 129
2194542 129
2204556 128
2214570 128
2224584 127
2234598 126
2244612 126
2254626 125
2264640 125
2274654 124
2284668 124
2294682 123
2304696 123
2314710 122
2324723 122
2334737 121
2344751 121
2354765 120
2364779 120
2374793 119
2384807 118
2394821 118
2404835 117
2414849 117
2424863 116
2434878 116
2444892 115
2454906 115
2464920 114
2474934 114
2484948 113
2494962 113
2504976 112
2514990 112
2525004 111
2535018 111
2545032 110
2555046 110
2565060 109
2575074 109
2585088 108
2595102 108
2605117 107
2615131 107
2625145 106
2635159 106
2645173 106
2655187 105
2665201 105
2675215 104
2685229 104
2695244 103
2705258 103
2715272 102
2725286 102
2735300 101
2745314 101
2755328 100
2765342 100
2775357 99
2785371 99
2795385 98
2805399 98
2815413 98
2825427 97
2835442 97
2845456 96
2855470 96
2865484 95
2875498 95
2885513 94
2895527 94
2905541 94
2915555 93
2925569 93
2935584 92
2945598 92
2955612 91
2965626 91
2975640 90
2985655 90
2995669 90
3005683 89
3015697 89
3025712 88
3035726 88
3045740 87
3055754 87
3065769 87
3075783 86
3085797 86
3095811 85
3105826 85
3115840 85
3125854 84
3135868 84
3145883 83
3155897 83
3165911 82
3175926 82
3185940 82
3195954 81
3205968 81
3215983 80
3225997 80
3236011 80
3246026 79
3256040 79
3266054 78
3276069 78
3286083 78
3296097 77
3306112 77
3316126 76
3326140 76
3336155 76
3346169 75
3356183 75
3366198 75
3376212 74
3386226 74
3396241 73
3406255 73
3416269 73
3426284 72
3436298 72
3446312 72
3456327 71
3466341 71
3476356 70
3486370 70
3496384 70
3506399 69
3516413 69
3526427 69
3536442 68
3546456 68
3556471 68
3566485 67
3576499 67
3586514 66
3596528 66
3606543 66
3616557 65
3626571 65
3636586 65
3646600 64
3656615 64
3666629 64
3676644 63
3686658 63
3696672 63
3706687 62
3716701 62
3726716 62
3736730 61
3746745 61
3756759 61
3766774 60
3776788 60
3786802 60
3796817 59
3806831 59
3816846 59
3826860 58
3836875 58
3846889 58
3856904 57
3866918 57
3876933 57
3886947 56
3896962 56
3906976 56
3916991 55
3927005 55
3937019 55
3947034 55
3957048 54
3967063 54
3977077 54
3987092 53
3997106 53
4007121 53
4017135 52
4027150 52
4037164 52
4047179 52
4057193 51
4067208 51
4077223 51
4087237 50
4097252 50
4107266 50
4117281 49
4127295 49
4137310 49
4147324 49
4157339 48
4167353 48
4177368 48
4187382 47
4197397 47
4207411 47
4217426 47
4227441 46
4237455 46
4247470 46
4257484 46
4267499 45
4277513 45
4287528 45
4297542 45
4307557 44
4317572 44
4327586 44
4337601 43
4347615 43
4357630 43
4367644 43
4377659 42
4387674 42
4397688 42
4407703 42
4417717 41
4427732 41
4437746 41
4447761 41
4457776 40
4467790 40
4477805 40
4487819 40
4497834 39
4507849 39
4517863 39
4527878 39
4537892 38
4547907 38
4557922 38
4567936 38
4577951 38
4587965 37
4597980 37
4607995 37
4618009 37
4628024 36
4638039 36
4648053 36
4658068 36
4668082 36
4678097 35
4688112 35
4698126 35
4708141 35
4718156 34
4728170 34
4738185 34
4748199 34
4758214 34
4768229 33
4778243 33
4788258 33
4798273 33
4808287 33
4818302 32
4828317 32
4838331 32
4848346 32
4858361 32
4868375 31
4878390 31
4888404 31
4898419 31
4908434 31
4918448 30
4928463 30
4938478 30
4948492 30
4958507 30
4968522 30
4978536 29
4988551 29
4998566 29
5008580 29
5018595 29
5028610 28
5038624 28
5048639 28
5058654 28
5068668 28
5078683 28
5088698 27
5098713 27
5108727 27
5118742 27
5128757 27
5138771 27
5148786 26
5158801 26
5168815 26
5178830 26
5188845 26
5198859 26
5208874 26
5218889 25
5228903 25
5238918 25
5248933 25
5258948 25
5268962 25
5278977 25
5288992 24
5299006 24
5309021 24
5319036 24
5329050 24
5339065 24
5349080 24
5359095 23
5369109 23
5379124 23
5389139 23
5399153 23
5409168 23
5419183 23
5429197 23
5439212 22
5449227 22
5459242 22
5469256 22
5479271 22
5489286 22
5499300 22
5509315 22
5519330 21
5529345 21
5539359 21
5549374 21
5559389 21
5569403 21
5579418 21
5589433 21
5599448 21
5609462 21
5619477 20
5629492 20
5639507 20
5649521 20
5659536 20
5669551 20
5679565 20
5689580 20
5699595 20
5709610 20
5719624 19
5729639 19
5739654 19
5749669 19
5759683 19
5769698 19
5779713 19
5789727 19
5799742 19
5809757 19
5819772 19
5829786 19
5839801 19
5849816 18
5859831 18
5869845 18
5879860 18
5889875 18
5899889 18
5909904 18
5919919 18
5929934 18
5939948 18
5949963 18
5959978 18
5969993 18
59710007 18
59810022 18
59910037 18
60010052 18
60110066 17
60210081 17
60310096 17
60410111 17
60510125 17
60610140 17
60710155 17
60810169 17
60910184 17
61010199 17
61110214 17
61210228 17
61310243 17
61410258 17
61510273 17
61610287 17
61710302 17
61810317 17
61910332 17
62010346 17
62110361 17
62210376 17
62310391 17
62410405 17
62510420 17
62610435 17
62710449 17
62810464 17
62910479 17
63010494 17
63110508 17
63210523 17
63310538 17
63410553 17
63510567 17
63610582 17
63710597 17
63810612 17
63910626 17
64010641 17
64110656 17
64210671 17
64310685 17
64410700 17
64510715 17
64610729 17
64710744 17
64810759 17
64910774 17
65010788 17
65110803 17
65210818 17
65310833 17
65410847 17
65510862 17
65610877 17
65710891 17
65810906 17
65910921 17
66010936 17
66110950 17
66210965 17
66310980 17
66410995 17
66511009 17
66611024 17
66711039 17
66811053 17
66911068 17
67011083 17
67111098 17