Processing math: 0%
본문 바로가기
  • 경제적 자유를 얻는 그날까지
엔지니어링/드론

[ VOXL ] VOXL-DFS-SERVER 컴파일 완료

by 베니스상인 2021. 7. 17.

voxl-docker 를 최신버전으로 업데이트하고 문제가 해결됨

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/git/voxl-dfs-server voxl-docker -l | grep "voxl" voxl-cross       V1.1      77af6063e492   39 minutes ago   999MB voxl-cross       latest    77af6063e492   39 minutes ago   999MB voxl-emulator    V1.7      55d4f01b7bcd   7 weeks ago      3.33GB voxl-emulator    latest    55d4f01b7bcd   7 weeks ago      3.33GB voxl-hexagon     latest    8509f4e31f56   2 months ago     5.24GB voxl-emulator    V1.5      323601eb49d7   4 months ago     3.2GB swift@swift-HP-Pavilion-dv6-Notebook-PC:~/git/voxl-dfs-server 

 

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/git/voxl-dfs-server voxl-docker -i voxl-cross launching image: voxl-cross with the following command: docker run --rm -it --net=host --privileged -w /home/swift --volume=/dev/bus/usb:/dev/bus/usb -e LOCAL_USER_ID=0 -e LOCAL_USER_NAME=root -e LOCAL_GID=0 -v /home/swift/git/voxl-dfs-server:/home/root:rw -w /home/root voxl-cross /bin/bash -l voxl-cross:~ ./install_build_deps.sh stable
using stable repository
Downloading http://voxl-packages.modalai.com/stable/Packages.gz.
Updated source 'stable'.
Installing libmodal_pipe 2.0.7 on root.
Downloading http://voxl-packages.modalai.com/stable/libmodal_pipe_2.0.7.ipk.
Configuring libmodal_pipe.

Done installing libmodal_pipe

Installing libmodal_json 0.3.5 on root.
Downloading http://voxl-packages.modalai.com/stable/libmodal_json_0.3.5.ipk.
Configuring libmodal_json.

Done installing libmodal_json

Installing opencv 4.5.2 on root.
Downloading http://voxl-packages.modalai.com/stable/opencv_4.5.2-1.ipk.
Configuring opencv.

done installing opencv


voxl-cross:~ ./build.sh -- The C compiler identification is GNU 5.4.0 -- The CXX compiler identification is GNU 5.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: /home/root/build_utils/build Scanning dependencies of target embedfile [ 50%] Building C object CMakeFiles/embedfile.dir/src/embedfile.c.o [100%] Linking C executable embedfile [100%] Built target embedfile -- The C compiler identification is GNU 4.9.3 -- The CXX compiler identification is GNU 4.9.3 -- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc-4.9 -- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc-4.9 -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/aarch64-linux-gnu-g++-4.9 -- Check for working CXX compiler: /usr/bin/aarch64-linux-gnu-g++-4.9 -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: /home/root/build64 [  5%] Generating sobel_filter_kernel_code.c [ 15%] Generating blur_kernel_code.c [ 15%] Generating disparity_kernel_code.c [ 21%] Generating compute_dsi_kernel_code.c [ 26%] Generating sparse_census_transform_kernel_code.c Scanning dependencies of target voxl-dfs-server [ 31%] Building CXX object server/CMakeFiles/voxl-dfs-server.dir/sad_disparity_estimation.cpp.o [ 36%] Building CXX object server/CMakeFiles/voxl-dfs-server.dir/opencl_manager.cpp.o [ 42%] Building C object server/CMakeFiles/voxl-dfs-server.dir/undistort.c.o [ 47%] Building CXX object server/CMakeFiles/voxl-dfs-server.dir/box_filter_blur.cpp.o [ 52%] Building CXX object server/CMakeFiles/voxl-dfs-server.dir/dfs_processing_engine.cpp.o [ 57%] Building CXX object server/CMakeFiles/voxl-dfs-server.dir/main.cpp.o [ 63%] Building CXX object server/CMakeFiles/voxl-dfs-server.dir/opencl_kernel.cpp.o [ 68%] Building CXX object server/CMakeFiles/voxl-dfs-server.dir/sobel_filter.cpp.o [ 73%] Building C object server/CMakeFiles/voxl-dfs-server.dir/blur_kernel_code.c.o [ 78%] Building C object server/CMakeFiles/voxl-dfs-server.dir/disparity_kernel_code.c.o [ 84%] Building C object server/CMakeFiles/voxl-dfs-server.dir/compute_dsi_kernel_code.c.o [ 89%] Building C object server/CMakeFiles/voxl-dfs-server.dir/sparse_census_transform_kernel_code.c.o [ 94%] Building C object server/CMakeFiles/voxl-dfs-server.dir/sobel_filter_kernel_code.c.o [100%] Linking CXX executable voxl-dfs-server [100%] Built target voxl-dfs-server voxl-cross:~ ./make_package.sh 

Package Name:  voxl-dfs-server
version Number:  0.2.0
[100%] Built target voxl-dfs-server
Install the project...
-- Install configuration: "Release"
-- Installing: ../ipk/data/etc/systemd/system/voxl-dfs-server.service
-- Installing: ../ipk/data/usr/bin/voxl-dfs-server
/home/root
ar: creating voxl-dfs-server_0.2.0.ipk

DONE
voxl-cross:~ exit logout swift@swift-HP-Pavilion-dv6-Notebook-PC:~/git/voxl-dfs-server 

 

 

 

 

 

 

libpipe 를 최신 버전으로 업데이트함

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/git/libmodal_pipe$ git reset --hard HEAD
HEAD is now at 953bec3 Merge branch 'dev' into 'master'

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/git/libmodal_pipe$ git pull
remote: Enumerating objects: 99, done.
remote: Counting objects: 100% 94/94, done.
remote: Compressing objects: 100% 42/42, done.
remote: Total 68 delta 51, reused 35 delta 26, pack-reused 0
Unpacking objects: 100% 68/68, done.
From https://gitlab.com/voxl-public/modal-pipe-architecture/libmodal_pipe
   953bec3..0b06bc1  master               -> origin/master
   fe4372f..6fc8708  dev                  -> origin/dev
 * [new branch]      fix-mavlink-includes -> origin/fix-mavlink-includes
 * [new branch]      james                -> origin/james
 * [new tag]         v2.0.7               -> v2.0.7
Updating 953bec3..0b06bc1
Fast-forward
 .gitmodules                             |   0
 CHANGELOG                               |  36 ++
 README.md                               |  24 +-
 android/jni/libmodal_pipe.mk            |  10 +-
 build_android.sh                        |   2 +-
 examples/modal-hello-client.c           |  32 +-
 examples/modal-hello-server.c           |  55 ++-
 examples/modal-hello-sink.c             |  16 +-
 examples/modal-kill-pipe.c              |   8 +-
 install_build_deps.sh                   |  62 +++
 ipk/control/control                     |   4 +-
 library/CMakeLists.txt                  |  11 +-
 library/include/modal_pipe_client.h     | 185 ++++----
 library/include/modal_pipe_common.h     | 248 ++++++++++-
 library/include/modal_pipe_deprecated.h | 729 ++++++++++++++++++++++++++++++++
 library/include/modal_pipe_interfaces.h | 269 +++++++++---
 library/include/modal_pipe_server.h     | 548 ++++++++++++++----------
 library/include/modal_pipe_sink.h       |  23 +-
 library/include/modal_start_stop.h      |  38 --
 library/src/client.c                    | 334 +++++++--------
 library/src/common.c                    | 311 ++++++++++++++
 library/src/interfaces.c                | 203 ++++++++-
 library/src/misc.c                      |  11 +
 library/src/misc.h                      |   7 +
 library/src/server.c                    | 683 ++++++++++++++++++++----------
 library/src/sink.c                      |  47 +-
 library/src/start_stop.c                | 113 -----
 make_package.sh                         |   1 +
 28 files changed, 2997 insertions+, 1013 deletions-
 create mode 100644 .gitmodules
 create mode 100755 install_build_deps.sh
 create mode 100644 library/include/modal_pipe_deprecated.h
 create mode 100644 library/src/common.c

 

 

 

 

 

2. 코드분석

 


카메라 정보 파일 아래 파일 이용
/data/modalai/opencv_stereo_intrinsics.yml
/data/modalai/opencv_stereo_extrinsics.yml

//cal parameter 의미?


stereoRectify M1, D1, M2, D2, img_size, R, T, R1, R2, P1, P2, Q, CALIB_ZERO_DISPARITY, -1, img_size, &roi1, &roi2 ;
initUndistortRectifyMapM1, D1, R1, P1, img_size, CV_16SC2, map11, map12;
initUndistortRectifyMapM2, D2, R2, P2, img_size, CV_16SC2, map21, map22;


// pipe server 초기화
if pipe_server_init_channel(DISPARITY_SCALED_PIPE_CH, DISPARITY_SCALED_PIPE_NAME, 0)
pipe_server_set_default_pipe_sizeDISPARITY_SCALED_PIPE_CH, DISPARITY_SCALED_PIPE_DEFAULT_SIZE;

if pipe_server_init_channel(DISPARITY_FILTERED_PIPE_CH, DISPARITY_FILTERED_PIPE_NAME, 0)
pipe_server_set_default_pipe_sizeDISPARITY_FILTERED_PIPE_CH, DISPARITY_FILTERED_PIPE_DEFAULT_SIZE;

ifpipe_server_init_channel(POINT_CLOUD_PIPE_CH, POINT_CLOUD_PIPE_NAME, 0){
pipe_server_set_default_pipe_sizePOINT_CLOUD_PIPE_CH, POINT_CLOUD_PIPE_DEFAULT_SIZE;



// camera server에 client 로 pipe 초기화
pipe_client_set_camera_helper_cb0, _frame_handler, NULL; // 카메라서버로부터 데이터를 받을때마다 실행되는 함수
pipe_client_set_connect_cb0, _camera_connect_cb, NULL;
pipe_client_set_disconnect_cb0, _camera_disconnect_cb, NULL;




structure 구조
camera_image_metadata_t

typedef struct camera_image_metadata_t
{
uint32_t magic_number; ///< set to CAMERA_MAGIC_NUMBER
int64_t  timestamp_ns; ///< timestamp in apps-proc clock-monotonic of beginning of exposure
int32_t  frame_id; ///< iterator from 0++ starting from first frame when server starts on boot
int16_t  width; ///< image width in pixels
int16_t  height; ///< image height in bytes
int32_t  size_bytes; ///< size of the image, for stereo this is the size of both L&R together
int32_t  stride; ///< bytes per row
int32_t  exposure_ns; ///< exposure in microseconds
int16_t  gain; ///< ISO gain 100, 200, 400, etc..
int16_t  format; ///< raw8, nv12, etc
int32_t  reserved;
} __attribute__(packed) camera_image_metadata_t;



while1 _frame_handler의 내용

img1_raw, img2_raw  // raw image matrix
resizeimg1_raw, img1_resized, Size(, 1.0/scale, 1.0/scale, method); // scale =2 이므로 INTER_LINEAR 방법으로 절반으로 스케일링됨
resizeimg2_raw, img2_resized, Size(, 1.0/scale, 1.0/scale, method);

remapimg1_resized, img1_rect, map11, map12, INTER_LINEAR;  // cal 파일 이용해서 rectified map으로 변경
remapimg2_resized, img2_rect, map21, map22, INTER_LINEAR;

blurimg1_rect, img1_blur, Size(blur_size,blur_size); // 가우시안 블러링
blurimg2_rect, img2_blur, Size(blur_size,blur_size);

bm->computeimg1_blur, img2_blur, disp_raw;  // block matching 방법으로 disparity 계산

wls_filter->filterdisp_raw, img1_rect, disp_filtered, Mat(, wls_roi)  // image1과 disparity 영상을 필터처리

disp_filtered.convertTodisp8, CV_8UC1, 255.0/(disparity_levels *16.0);  // 8bit 영상으로 변환

pipe_server_send_camera_frame_to_channelDISPARITY_PIPE_CH, disp_meta, (char*disp8.data);  // 8bit 변환 영상을 서버에서 채널로 송출


blob_detector->detectdisp8, keypoints, Mat();  // blop 계산

...

pipe_server_send_point_cloud_to_channelTARGET_POINT_PIPE_CH, target_pc_meta, target_point  // point cloud의 데이터 송출

imwriteIMAGE_SAVE_DIR "target_overlay.png", target_overlay; // 오버레이된 이미지 저장





client 에서 사용시
pipe_client_init_channelOBSTACLE_PIPE_CH, OBSTACLE_PIPE, PIPE_CLIENT_NAME,EN_PIPE_CLIENT_POINT_CLOUD_HELPER, PIPE_READ_BUF_SIZE;
pipe_client_set_point_cloud_helper_cbOBSTACLE_PIPE_CH, obstacle_pipe_helper_cb, NULL;

728x90