From 47e005ac28ca2fcb8e88fd9ebbbe531a02add9c2 Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Fri, 29 May 2020 11:33:55 +0200 Subject: Fix fs hierarchy --- .gitignore | 6 +- Makefile | 35 +++ bin/prepare_release.sh | 31 ++- bind/Dockerfile | 15 -- bind/Dockerfile-devel | 36 --- cam/Dockerfile | 67 ----- cam/Makefile | 15 -- cam/cam.c | 372 -------------------------- cam/env.sh | 6 - cam/env_sim.sh | 6 - etc/docker/cam/Dockerfile | 65 +++++ etc/docker/dns/Dockerfile | 15 ++ etc/docker/dns/Dockerfile-devel | 36 +++ etc/docker/rob/Dockerfile | 52 ++++ etc/docker/robot/ur-sim/Dockerfile | 53 ++++ lib/cam/env.sh | 6 + lib/cam/env_sim.sh | 6 + lib/rob/env.sh | 14 + lib/rob/env_sim.sh | 12 + rob/Dockerfile | 54 ---- rob/Makefile | 20 -- rob/env.sh | 14 - rob/env_sim.sh | 12 - rob/rob.c | 520 ------------------------------------- rob/robot/ur/Dockerfile | 55 ---- rob/robot/ur/Makefile | 16 -- rob/robot/ur/ur-sim.c | 137 ---------- src/cam/cam.c | 372 ++++++++++++++++++++++++++ src/rob/rob.c | 520 +++++++++++++++++++++++++++++++++++++ src/robot/ur-sim/ur-sim.c | 137 ++++++++++ 30 files changed, 1344 insertions(+), 1361 deletions(-) create mode 100644 Makefile delete mode 100644 bind/Dockerfile delete mode 100644 bind/Dockerfile-devel delete mode 100644 cam/Dockerfile delete mode 100644 cam/Makefile delete mode 100644 cam/cam.c delete mode 100644 cam/env.sh delete mode 100644 cam/env_sim.sh create mode 100644 etc/docker/cam/Dockerfile create mode 100644 etc/docker/dns/Dockerfile create mode 100644 etc/docker/dns/Dockerfile-devel create mode 100644 etc/docker/rob/Dockerfile create mode 100644 etc/docker/robot/ur-sim/Dockerfile create mode 100644 lib/cam/env.sh create mode 100644 lib/cam/env_sim.sh create mode 100644 lib/rob/env.sh create mode 100644 lib/rob/env_sim.sh delete mode 100644 rob/Dockerfile delete mode 100644 rob/Makefile delete mode 100644 rob/env.sh delete mode 100644 rob/env_sim.sh delete mode 100644 rob/rob.c delete mode 100644 rob/robot/ur/Dockerfile delete mode 100644 rob/robot/ur/Makefile delete mode 100644 rob/robot/ur/ur-sim.c create mode 100644 src/cam/cam.c create mode 100644 src/rob/rob.c create mode 100644 src/robot/ur-sim/ur-sim.c diff --git a/.gitignore b/.gitignore index 49d4a94..73c40cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -rob/rob -rob/robot/ur/ur-sim -cam/cam +bin/rob +bin/ur-sim +bin/cam **/*-PASSED diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..acb4e7b --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ + +CFLAGS_W = -Wall -Wextra -Werror -Wno-implicit-fallthrough +CFLAGS_O = -O3 -march=native -flto -fuse-linker-plugin +CFLAGS = $(CFLAGS_W) $(CFLAGS_O) + +ALL = bin/cam bin/rob bin/ur-sim +all: $(ALL) + +bin/cam: src/cam/cam.c + gcc-10 $(CFLAGS) \ + `pkg-config --cflags libalx-base libalx-cv` \ + $< -o $@ \ + `pkg-config --libs libalx-cv libalx-base` + +bin/rob: src/rob/rob.c + gcc $(CFLAGS) -static \ + `pkg-config --static --cflags libalx-base` \ + `pkg-config --static --cflags libalx-telnet-tcp`\ + `pkg-config --static --cflags libalx-robot` \ + $< -o $@ \ + `pkg-config --static --libs libalx-robot` \ + `pkg-config --static --libs libalx-telnet-tcp` \ + `pkg-config --static --libs libalx-base` + +bin/ur-sim: src/robot/ur-sim/ur-sim.c + gcc-10 $(CFLAGS) -static \ + `pkg-config --static --cflags libalx-base` \ + `pkg-config --static --cflags libalx-robot` \ + $< -o $@ \ + `pkg-config --static --libs libalx-robot` \ + `pkg-config --static --libs libalx-base` + + +clean: + rm -f $(ALL) diff --git a/bin/prepare_release.sh b/bin/prepare_release.sh index e95181b..a111aec 100755 --- a/bin/prepare_release.sh +++ b/bin/prepare_release.sh @@ -21,25 +21,30 @@ update_version() local version=$1 sed "/--branch master/s/master/v${version}/" \ - -i ./cam/Dockerfile + -i ./etc/docker/cam/Dockerfile sed "/--branch master/s/master/v${version}/" \ - -i ./rob/Dockerfile + -i ./etc/docker/rob/Dockerfile sed "/--branch master/s/master/v${version}/" \ - -i ./rob/robot/ur/Dockerfile + -i ./etc/docker/robot/ur-sim/Dockerfile - sed "/alejandrocolomar\/rob_cam:cam/s/:cam/:cam_${version}/" \ - -i ./docker/docker-compose.yaml - sed "/alejandrocolomar\/rob_cam:rob/s/:rob/:rob_${version}/" \ - -i ./docker/docker-compose.yaml + sed "/alejandrocolomar\/rob_cam:cam/s/:cam/:cam_${version}/" \ + -i ./etc/docker/compose/docker-compose.yaml + sed "/alejandrocolomar\/rob_cam:rob/s/:rob/:rob_${version}/" \ + -i ./etc/docker/compose/docker-compose.yaml sed "/alejandrocolomar\/rob_cam:ur-sim/s/:ur-sim/:ur-sim_${version}/" \ - -i ./docker/docker-compose.yaml + -i ./etc/docker/compose/docker-compose.yaml - sed "/alejandrocolomar\/rob_cam:cam/s/:cam/:cam_${version}/" \ - -i ./kubernetes/kube-compose.yaml - sed "/alejandrocolomar\/rob_cam:rob/s/:rob/:rob_${version}/" \ - -i ./kubernetes/kube-compose.yaml + sed "/alejandrocolomar\/rob_cam:cam/s/:cam/:cam_${version}/" \ + -i ./etc/docker/kubernetes/kube-compose.yaml + sed "/alejandrocolomar\/rob_cam:rob/s/:rob/:rob_${version}/" \ + -i ./etc/docker/kubernetes/kube-compose.yaml sed "/alejandrocolomar\/rob_cam:ur-sim/s/:ur-sim/:ur-sim_${version}/" \ - -i ./kubernetes/kube-compose.yaml + -i ./etc/docker/kubernetes/kube-compose.yaml + + sed "/alejandrocolomar\/rob_cam:dns/s/:dns/:dns_${version}/" \ + -i ./etc/docker/swarm/release/dns.yaml + sed "/alejandrocolomar\/rob_cam:dns/s/:dns/:dns_${version}/" \ + -i ./etc/docker/swarm/release/dns-blue.yaml } diff --git a/bind/Dockerfile b/bind/Dockerfile deleted file mode 100644 index 74f4a57..0000000 --- a/bind/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -############################################################################### -# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # -# Copyright (C) 2020 Alejandro Colomar Andrés # -# SPDX-License-Identifier: GPL-2.0-only # -############################################################################### - -## alpine:latest -FROM alpine@sha256:39eda93d15866957feaee28f8fc5adb545276a64147445c64992ef69804dbf01 \ - AS dns - -RUN apk add --no-cache --upgrade bind - -CMD ["named", "-c", "/etc/bind/named.conf", "-g"] - -############################################################################### diff --git a/bind/Dockerfile-devel b/bind/Dockerfile-devel deleted file mode 100644 index 1ee30fc..0000000 --- a/bind/Dockerfile-devel +++ /dev/null @@ -1,36 +0,0 @@ -############################################################################### -# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # -# Copyright (C) 2020 Alejandro Colomar Andrés # -# SPDX-License-Identifier: GPL-2.0-only # -############################################################################### - -## alpine/git:latest -FROM alpine/git@sha256:8d2aedf3898243892d170f033603b40a55e0b0a8ab68ba9762f9c0dae40b5c8d \ - AS git - -RUN \ - git clone \ - --single-branch \ - --branch version-0.5 \ - https://github.com/alejandro-colomar/rob_cam.git \ - /repo - -############################################################################### - -## alpine:latest -FROM alpine@sha256:39eda93d15866957feaee28f8fc5adb545276a64147445c64992ef69804dbf01 \ - AS dns - -RUN apk add --no-cache --upgrade bind - -## configure dns server -COPY --from=git /repo/bind/run/configs/etc/bind/named.conf \ - /etc/bind/named.conf -COPY --from=git /repo/bind/run/secrets/var/bind/master \ - /run/secrets/var/bind/master - -RUN ln --symbolic /run/secrets/var/bind/master /var/bind - -CMD ["named", "-c", "/etc/bind/named.conf", "-g"] - -############################################################################### diff --git a/cam/Dockerfile b/cam/Dockerfile deleted file mode 100644 index bdae480..0000000 --- a/cam/Dockerfile +++ /dev/null @@ -1,67 +0,0 @@ -############################################################################### -# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # -# Copyright (C) 2020 Alejandro Colomar Andrés # -# SPDX-License-Identifier: GPL-2.0-only # -############################################################################### - -FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 \ - AS build -RUN apt-get update && \ - apt-get upgrade -V --yes && \ - apt-get install -V \ - gcc \ - gcc-10 \ - g++ \ - g++-10 \ - make \ - git \ - pkg-config \ - libbsd-dev \ - libgsl-dev \ - libopencv-dev \ - deborphan \ - --yes && \ - apt-get autoremove --purge --yes && \ - apt-get purge $(deborphan) --yes && \ - apt-get autoclean && \ - apt-get clean -WORKDIR /tmp -RUN git clone \ - --single-branch \ - --branch v1.0-b23 \ - https://github.com/alejandro-colomar/libalx.git && \ - make base cv -C libalx -j 8 && \ - make install-base install-cv -C libalx -RUN git clone \ - --single-branch \ - --branch version-0.5 \ - https://github.com/alejandro-colomar/rob_cam.git && \ - make -C rob_cam/cam/ -j 2 - -FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 -RUN apt-get update && \ - apt-get upgrade --yes && \ - apt-get install -V \ - make \ - libc6 \ - libstdc++6 \ - libbsd0 \ - libgsl23 \ - libgslcblas0 \ - libopencv-core4.2 \ - libopencv-videoio4.2 \ - libopencv-dev \ - --yes && \ - apt-get autoremove --purge --yes && \ - apt-get autoclean && \ - apt-get clean -WORKDIR /tmp -COPY --from=build /tmp/libalx ./libalx -RUN make install-base install-cv -C libalx -WORKDIR /app -COPY --from=build /tmp/rob_cam/cam/cam ./ -RUN chmod +x ./cam -CMD ["./cam"] - -# docker container run --tty --interactive --rm --name cam --network rob_cam_network --device="/dev/video0:/dev/video0" --env ROB_ADDR=rob --env ROB_PORT=13100 --env CAMERA_IDX=0 --env DELAY_US=10000 alejandrocolomar/rob_cam:cam_0.5.6 - diff --git a/cam/Makefile b/cam/Makefile deleted file mode 100644 index 1ba91a5..0000000 --- a/cam/Makefile +++ /dev/null @@ -1,15 +0,0 @@ - -CFLAGS_W = -Wall -Wextra -Werror -CFLAGS_O = -O3 -march=native -flto -fuse-linker-plugin -CFLAGS = $(CFLAGS_W) $(CFLAGS_O) - -all: cam - -cam: cam.c - gcc-10 $(CFLAGS) \ - `pkg-config --cflags libalx-base libalx-cv` \ - $< -o $@ \ - `pkg-config --libs libalx-cv libalx-base` - -clean: - rm -f cam diff --git a/cam/cam.c b/cam/cam.c deleted file mode 100644 index 2bcd946..0000000 --- a/cam/cam.c +++ /dev/null @@ -1,372 +0,0 @@ -/****************************************************************************** - * Copyright (C) 2020 Alejandro Colomar Andrés * - * SPDX-License-Identifier: GPL-2.0-only * - ******************************************************************************/ - - -/****************************************************************************** - ******* include ************************************************************** - ******************************************************************************/ -#include -#include -#include -#include -#include - -#include -#include -#include - -#define ALX_NO_PREFIX -#include -#include -#include -#include -#include -#include -#include -#include - - -/****************************************************************************** - ******* define *************************************************************** - ******************************************************************************/ -#define ENV_ROB_ADDR "ROB_ADDR" -#define ENV_ROB_PORT "ROB_PORT" -#define ENV_CAMERA_IDX "CAMERA_IDX" -#define ENV_DELAY_US "DELAY_US" - - - -/****************************************************************************** - ******* enum ***************************************************************** - ******************************************************************************/ - - -/****************************************************************************** - ******* struct / union ******************************************************* - ******************************************************************************/ - - -/****************************************************************************** - ******* static variables ***************************************************** - ******************************************************************************/ -/* environment variables */ -static char rob_addr[_POSIX_ARG_MAX]; -static char rob_port[_POSIX_ARG_MAX]; -static int camera_idx; -static int delay_us; -/* pid */ -static pid_t pid; -/* camera */ -static cam_s *camera; -/* rob */ -static int rob; - - -/****************************************************************************** - ******* static functions (prototypes) **************************************** - ******************************************************************************/ -static -int cam_init (img_s **img); -static -int cam_deinit (img_s *img); - -static -int env_init (void); -static -int rob_init (void); -static -int rob_deinit (void); -static -int rob_reinit (void); -static -int camera_init (void); -static -void camera_deinit (void); -static -int cv_init (img_s **img); -static -void cv_deinit (img_s *img); - -static -int session (int i, img_s *img); -static -int wait_rob (void); -static -int proc_cv (uint8_t *restrict blue11, img_s *restrict img); - - -/****************************************************************************** - ******* main ***************************************************************** - ******************************************************************************/ -int main (void) -{ - img_s *img; - int status; - - status = 1; - if (cam_init(&img)) - goto err0; - - mb(); - for (int i = 0; !sigterm; i++) { - if (sigpipe) { - if (rob_reinit()) - goto err; - } - status = session(i, img); - if (status) - goto err; - usleep(delay_us); - mb(); - } - - status = 0; -err: - cam_deinit(img); -err0: - fprintf(stderr, "cam#%"PRIpid": OUT: %i\n", pid, status); - perrorx(NULL); - - return status; -} - - -/****************************************************************************** - ******* static functions (definitions) *************************************** - ******************************************************************************/ -static -int cam_init (img_s **img) -{ - int status; - - pid = getpid(); - status = -1; - if (sigpipe_init()) - goto err0; - status--; - if (sigterm_init()) - goto err0; - status--; - if (env_init()) - goto err0; - status--; - if (rob_init()) - goto err0; - status--; - if (camera_init()) - goto err1; - status--; - if (cv_init(img)) - goto err2; - return 0; -err2: - camera_deinit(); -err1: - rob_deinit(); -err0: - fprintf(stderr, "cam#%"PRIpid": ERROR: cam_init(): %i\n", pid, status); - return status; -} - -static -int cam_deinit (img_s *img) -{ - int status; - - status = 0; - cv_deinit(img); - camera_deinit(); - if (rob_deinit()) - status -= 4; - - return status; -} - - -static -int env_init (void) -{ - int status; - - status = -1; - if (getenv_s(rob_addr, ARRAY_SIZE(rob_addr), ENV_ROB_ADDR)) - goto err; - status--; - if (getenv_s(rob_port, ARRAY_SIZE(rob_port), ENV_ROB_PORT)) - goto err; - status--; - if (getenv_i32(&camera_idx, ENV_CAMERA_IDX)) - goto err; - status--; - if (getenv_i32(&delay_us, ENV_DELAY_US)) - goto err; - - return 0; -err: - fprintf(stderr, "cam#%"PRIpid": ERROR: env_init(): %i\n", pid, status); - return status; -} - -static -int rob_init (void) -{ - - rob = tcp_client_open(rob_addr, rob_port); - return rob < 0; -} - -static -int rob_deinit (void) -{ - return close(rob); -} - -static -int rob_reinit (void) -{ - - rob_deinit(); - return rob_init(); -} - -static -int camera_init (void) -{ - int status; - - status = -1; - if (alx_cv_alloc_cam(&camera)) - goto err; - alx_cv_init_cam(camera, NULL, camera_idx, 0); - return 0; -err: - fprintf(stderr, "cam#%"PRIpid": ERROR: camera_init(): %i\n",pid,status); - return status; -} - -static -void camera_deinit (void) -{ - - alx_cv_deinit_cam(camera); - alx_cv_free_cam(camera); -} - -static -int cv_init (img_s **img) -{ - int status; - - status = -1; - if (alx_cv_init_img(img)) - goto err; - return 0; -err: - fprintf(stderr, "cam#%"PRIpid": ERROR: cv_init(): %i\n", pid, status); - return status; -} - -static -void cv_deinit (img_s *img) -{ - - alx_cv_deinit_img(img); -} - - -static -int session (int i, img_s *img) -{ - uint8_t blue11; - char buf[BUFSIZ]; - ptrdiff_t len; - ssize_t n; - int status; - clock_t time_0; - clock_t time_1; - double time_tot; - - time_0 = clock(); - - status = -1; - if (wait_rob()) - goto err; - status--; - if (proc_cv(&blue11, img)) - goto err; - status--; - if (sbprintf(buf, &len, "cam#%"PRIpid":session#%i: img[B][1][1] = %"PRIu8"", - pid, i, blue11)) - goto err; - printf("%s\n", buf); - status--; - n = send(rob, buf, len, 0); - if (n < 0) - goto err; - - time_1 = clock(); - time_tot = ((double) time_1 - time_0) / CLOCKS_PER_SEC; - printf("session time: %5.3lf s;\n", time_tot); - return 0; -err: - fprintf(stderr, "cam#%"PRIpid": ERROR: session(): %i\n", pid, status); - return status; -} - -static -int wait_rob (void) -{ - char buf[BUFSIZ]; - ssize_t n; - int status; - - status = -1; - n = recv(rob, buf, ARRAY_SIZE(buf) - 1, 0); - if (n < 0) - goto err; - status--; - if (!n) - goto err; - return 0; -err: - fprintf(stderr, "cam#%"PRIpid": ERROR: wait_rob(): %i\n", pid, status); - return status; -} - -static -int proc_cv (uint8_t *restrict blue11, img_s *restrict img) -{ - clock_t time_0; - clock_t time_1; - double time_tot; - int status; - - time_0 = clock(); - - status = -1; - if (alx_cv_cam_read(img, camera)) - goto err; - status--; - if (alx_cv_component(img, ALX_CV_CMP_BGR_B)) - goto err; - status--; - if (alx_cv_pixel_get_u8(img, blue11, 1, 1)) - goto err; - - time_1 = clock(); - time_tot = ((double) time_1 - time_0) / CLOCKS_PER_SEC; - printf("cv time: %5.3lf s;\n", time_tot); - - return 0; -err: - fprintf(stderr, "cam#%"PRIpid": ERROR: proc_cv(): %i\n", pid, status); - return status; -} - - -/****************************************************************************** - ******* end of file ********************************************************** - ******************************************************************************/ - diff --git a/cam/env.sh b/cam/env.sh deleted file mode 100644 index 453848b..0000000 --- a/cam/env.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/sh - -export ROB_ADDR=rob -export ROB_PORT=13100 -export CAMERA_IDX=0 -export DELAY_US=10000 diff --git a/cam/env_sim.sh b/cam/env_sim.sh deleted file mode 100644 index 051bfec..0000000 --- a/cam/env_sim.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/sh - -export ROB_ADDR=localhost -export ROB_PORT=13100 -export CAMERA_IDX=0 -export DELAY_US=100000 diff --git a/etc/docker/cam/Dockerfile b/etc/docker/cam/Dockerfile new file mode 100644 index 0000000..342e7c9 --- /dev/null +++ b/etc/docker/cam/Dockerfile @@ -0,0 +1,65 @@ +############################################################################### +# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # +# Copyright (C) 2020 Alejandro Colomar Andrés # +# SPDX-License-Identifier: GPL-2.0-only # +############################################################################### + +FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 \ + AS build +RUN apt-get update && \ + apt-get upgrade -V --yes && \ + apt-get install -V \ + gcc \ + gcc-10 \ + g++ \ + g++-10 \ + make \ + git \ + pkg-config \ + libbsd-dev \ + libgsl-dev \ + libopencv-dev \ + deborphan \ + --yes && \ + apt-get autoremove --purge --yes && \ + apt-get purge $(deborphan) --yes && \ + apt-get autoclean && \ + apt-get clean +WORKDIR /tmp +RUN git clone \ + --single-branch \ + --branch v1.0-b23 \ + https://github.com/alejandro-colomar/libalx.git && \ + make base cv -C libalx -j 8 && \ + make install-base install-cv -C libalx +RUN git clone \ + --single-branch \ + --branch version-0.5 \ + https://github.com/alejandro-colomar/rob_cam.git && \ + make bin/cam + +FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 +RUN apt-get update && \ + apt-get upgrade --yes && \ + apt-get install -V \ + make \ + libc6 \ + libstdc++6 \ + libbsd0 \ + libgsl23 \ + libgslcblas0 \ + libopencv-core4.2 \ + libopencv-videoio4.2 \ + libopencv-dev \ + --yes && \ + apt-get autoremove --purge --yes && \ + apt-get autoclean && \ + apt-get clean +WORKDIR /tmp +COPY --from=build /tmp/libalx ./libalx +RUN make install-base install-cv -C libalx +COPY --from=build /tmp/rob_cam/bin/cam /usr/local/bin/cam +CMD ["cam"] + +# docker container run --tty --interactive --rm --name cam --network rob_cam_network --device="/dev/video0:/dev/video0" --env ROB_ADDR=rob --env ROB_PORT=13100 --env CAMERA_IDX=0 --env DELAY_US=10000 alejandrocolomar/rob_cam:cam_0.5.6 + diff --git a/etc/docker/dns/Dockerfile b/etc/docker/dns/Dockerfile new file mode 100644 index 0000000..74f4a57 --- /dev/null +++ b/etc/docker/dns/Dockerfile @@ -0,0 +1,15 @@ +############################################################################### +# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # +# Copyright (C) 2020 Alejandro Colomar Andrés # +# SPDX-License-Identifier: GPL-2.0-only # +############################################################################### + +## alpine:latest +FROM alpine@sha256:39eda93d15866957feaee28f8fc5adb545276a64147445c64992ef69804dbf01 \ + AS dns + +RUN apk add --no-cache --upgrade bind + +CMD ["named", "-c", "/etc/bind/named.conf", "-g"] + +############################################################################### diff --git a/etc/docker/dns/Dockerfile-devel b/etc/docker/dns/Dockerfile-devel new file mode 100644 index 0000000..5e5cb41 --- /dev/null +++ b/etc/docker/dns/Dockerfile-devel @@ -0,0 +1,36 @@ +############################################################################### +# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # +# Copyright (C) 2020 Alejandro Colomar Andrés # +# SPDX-License-Identifier: GPL-2.0-only # +############################################################################### + +## alpine/git:latest +FROM alpine/git@sha256:8d2aedf3898243892d170f033603b40a55e0b0a8ab68ba9762f9c0dae40b5c8d \ + AS git + +RUN \ + git clone \ + --single-branch \ + --branch version-0.5 \ + https://github.com/alejandro-colomar/rob_cam.git \ + /repo + +############################################################################### + +## alpine:latest +FROM alpine@sha256:39eda93d15866957feaee28f8fc5adb545276a64147445c64992ef69804dbf01 \ + AS dns + +RUN apk add --no-cache --upgrade bind + +## configure dns server +COPY --from=git /repo/run/configs/etc/bind/named.conf \ + /etc/bind/named.conf +COPY --from=git /repo/run/secrets/var/bind/master \ + /run/secrets/var/bind/master + +RUN ln --symbolic /run/secrets/var/bind/master /var/bind + +CMD ["named", "-c", "/etc/bind/named.conf", "-g"] + +############################################################################### diff --git a/etc/docker/rob/Dockerfile b/etc/docker/rob/Dockerfile new file mode 100644 index 0000000..ad4f196 --- /dev/null +++ b/etc/docker/rob/Dockerfile @@ -0,0 +1,52 @@ +############################################################################### +# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # +# Copyright (C) 2020 Alejandro Colomar Andrés # +# SPDX-License-Identifier: GPL-2.0-only # +############################################################################### + +FROM debian@sha256:21a1267db36931b0a89f1fece2e54afa78438951fcaadd529837b7def15d04de \ + AS build +RUN apt-get update && \ + apt-get upgrade -V --yes && \ + apt-get install -V \ + gcc \ + make \ + git \ + pkg-config \ + libbsd-dev \ + deborphan \ + --yes && \ + apt-get autoremove --purge --yes && \ + apt-get purge $(deborphan) --yes && \ + apt-get autoclean && \ + apt-get clean +WORKDIR /tmp +RUN git clone \ + --single-branch \ + --branch v1-b18.3 \ + https://github.com/alejandro-colomar/libalx.git && \ + make base telnet-tcp robot -C libalx -j 8 && \ + make install-base -C libalx && \ + make install-telnet-tcp -C libalx && \ + make install-robot -C libalx && \ + rm -rf libalx +RUN git clone \ + --single-branch \ + --branch version-0.5 \ + https://github.com/alejandro-colomar/rob_cam.git && \ + make bin/rob -j 2 + +FROM debian@sha256:21a1267db36931b0a89f1fece2e54afa78438951fcaadd529837b7def15d04de +RUN apt-get update && \ + apt-get upgrade --yes && \ + apt-get install -V \ + telnet \ + --yes && \ + apt-get autoremove --purge --yes && \ + apt-get autoclean && \ + apt-get clean +COPY --from=build /tmp/rob_cam/rob/rob /usr/local/bin/rob +CMD ["rob"] + +# docker container run --tty --interactive --rm --name rob --network rob_cam_network --env ROBOT_TYPE=ur --env ROBOT_ADDR=robot --env ROBOT_PORT=30002 --env ROBOT_USER= --env ROBOT_PASSWD= --env ROBOT_STATUS_FNAME=status.log --env ROB_PORT=13100 --env ROB_CAMS_MAX=10 --env DELAY_LOGIN=1000000 --env DELAY_US=100000 alejandrocolomar/rob_cam:rob_0.5.6 + diff --git a/etc/docker/robot/ur-sim/Dockerfile b/etc/docker/robot/ur-sim/Dockerfile new file mode 100644 index 0000000..990381e --- /dev/null +++ b/etc/docker/robot/ur-sim/Dockerfile @@ -0,0 +1,53 @@ +############################################################################### +# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # +# Copyright (C) 2020 Alejandro Colomar Andrés # +# SPDX-License-Identifier: GPL-2.0-only # +############################################################################### + +FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 \ + AS build +RUN apt-get update && \ + apt-get upgrade -V --yes && \ + apt-get install -V \ + gcc \ + gcc-10 \ + make \ + git \ + pkg-config \ + libbsd-dev \ + deborphan \ + --yes && \ + apt-get autoremove --purge --yes && \ + apt-get purge $(deborphan) --yes && \ + apt-get autoclean && \ + apt-get clean +WORKDIR /tmp +RUN git clone \ + --single-branch \ + --branch v1.0-b23 \ + https://github.com/alejandro-colomar/libalx.git && \ + make base telnet-tcp robot -C libalx -j 8 && \ + make install-base -C libalx && \ + make install-telnet-tcp -C libalx && \ + make install-robot -C libalx && \ + rm -rf libalx +RUN git clone \ + --single-branch \ + --branch version-0.5 \ + https://github.com/alejandro-colomar/rob_cam.git && \ + make bin/ur-sim -j 2 + +FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 +RUN apt-get update && \ + apt-get upgrade --yes && \ + apt-get install -V \ + telnet \ + --yes && \ + apt-get autoremove --purge --yes && \ + apt-get autoclean && \ + apt-get clean +COPY --from=build /tmp/rob_cam/rob/robot/ur/ur-sim /usr/local/bin/ur-sim +CMD ["ur-sim"] + +# docker container run --tty --network rob_cam_network --name robot --rm alejandrocolomar/rob_cam:ur-sim_0.5.6 + diff --git a/lib/cam/env.sh b/lib/cam/env.sh new file mode 100644 index 0000000..453848b --- /dev/null +++ b/lib/cam/env.sh @@ -0,0 +1,6 @@ +#!/usr/bin/sh + +export ROB_ADDR=rob +export ROB_PORT=13100 +export CAMERA_IDX=0 +export DELAY_US=10000 diff --git a/lib/cam/env_sim.sh b/lib/cam/env_sim.sh new file mode 100644 index 0000000..051bfec --- /dev/null +++ b/lib/cam/env_sim.sh @@ -0,0 +1,6 @@ +#!/usr/bin/sh + +export ROB_ADDR=localhost +export ROB_PORT=13100 +export CAMERA_IDX=0 +export DELAY_US=100000 diff --git a/lib/rob/env.sh b/lib/rob/env.sh new file mode 100644 index 0000000..993c1c3 --- /dev/null +++ b/lib/rob/env.sh @@ -0,0 +1,14 @@ +#!/usr/bin/sh + +export ROBOT_TYPE=ur +#export ROBOT_TYPE=kwr +export ROBOT_ADDR=192.168.0.1 +export ROBOT_PORT=30002 +#export ROBOT_PORT=23 +export ROBOT_USER=as +export ROBOT_PASSWD= +export ROBOT_STATUS_FNAME=status.log +export ROB_PORT=13100 +export ROB_CAMS_MAX=1 +export DELAY_LOGIN=1000000 +export DELAY_US=100000 diff --git a/lib/rob/env_sim.sh b/lib/rob/env_sim.sh new file mode 100644 index 0000000..4c480e0 --- /dev/null +++ b/lib/rob/env_sim.sh @@ -0,0 +1,12 @@ +#!/usr/bin/sh + +export ROBOT_TYPE= +export ROBOT_ADDR=localhost +export ROBOT_PORT=30002 +export ROBOT_USER= +export ROBOT_PASSWD= +export ROBOT_STATUS_FNAME=status.log +export ROB_PORT=13100 +export ROB_CAMS_MAX=1 +export DELAY_LOGIN=1000000 +export DELAY_US=100000 diff --git a/rob/Dockerfile b/rob/Dockerfile deleted file mode 100644 index cad224b..0000000 --- a/rob/Dockerfile +++ /dev/null @@ -1,54 +0,0 @@ -############################################################################### -# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # -# Copyright (C) 2020 Alejandro Colomar Andrés # -# SPDX-License-Identifier: GPL-2.0-only # -############################################################################### - -FROM debian@sha256:21a1267db36931b0a89f1fece2e54afa78438951fcaadd529837b7def15d04de \ - AS build -RUN apt-get update && \ - apt-get upgrade -V --yes && \ - apt-get install -V \ - gcc \ - make \ - git \ - pkg-config \ - libbsd-dev \ - deborphan \ - --yes && \ - apt-get autoremove --purge --yes && \ - apt-get purge $(deborphan) --yes && \ - apt-get autoclean && \ - apt-get clean -WORKDIR /tmp -RUN git clone \ - --single-branch \ - --branch v1-b18.3 \ - https://github.com/alejandro-colomar/libalx.git && \ - make base telnet-tcp robot -C libalx -j 8 && \ - make install-base -C libalx && \ - make install-telnet-tcp -C libalx && \ - make install-robot -C libalx && \ - rm -rf libalx -RUN git clone \ - --single-branch \ - --branch version-0.5 \ - https://github.com/alejandro-colomar/rob_cam.git && \ - make -C rob_cam/rob/ -j 2 - -FROM debian@sha256:21a1267db36931b0a89f1fece2e54afa78438951fcaadd529837b7def15d04de -WORKDIR /app -RUN apt-get update && \ - apt-get upgrade --yes && \ - apt-get install -V \ - telnet \ - --yes && \ - apt-get autoremove --purge --yes && \ - apt-get autoclean && \ - apt-get clean -COPY --from=build /tmp/rob_cam/rob/rob ./ -RUN chmod +x ./rob -CMD ["./rob"] - -# docker container run --tty --interactive --rm --name rob --network rob_cam_network --env ROBOT_TYPE=ur --env ROBOT_ADDR=robot --env ROBOT_PORT=30002 --env ROBOT_USER= --env ROBOT_PASSWD= --env ROBOT_STATUS_FNAME=status.log --env ROB_PORT=13100 --env ROB_CAMS_MAX=10 --env DELAY_LOGIN=1000000 --env DELAY_US=100000 alejandrocolomar/rob_cam:rob_0.5.6 - diff --git a/rob/Makefile b/rob/Makefile deleted file mode 100644 index 81ebb5e..0000000 --- a/rob/Makefile +++ /dev/null @@ -1,20 +0,0 @@ - -CFLAGS_W = -Wall -Wextra -Werror -Wno-implicit-fallthrough -CFLAGS_O = -O3 -march=native -flto -fuse-linker-plugin -static -CFLAGS = $(CFLAGS_W) $(CFLAGS_O) - -.PHONY: all -all: rob - -rob: rob.c - gcc $(CFLAGS) \ - `pkg-config --static --cflags libalx-base` \ - `pkg-config --static --cflags libalx-telnet-tcp`\ - `pkg-config --static --cflags libalx-robot` \ - $< -o $@ \ - `pkg-config --static --libs libalx-robot` \ - `pkg-config --static --libs libalx-telnet-tcp` \ - `pkg-config --static --libs libalx-base` - -clean: - rm -f rob diff --git a/rob/env.sh b/rob/env.sh deleted file mode 100644 index 993c1c3..0000000 --- a/rob/env.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/sh - -export ROBOT_TYPE=ur -#export ROBOT_TYPE=kwr -export ROBOT_ADDR=192.168.0.1 -export ROBOT_PORT=30002 -#export ROBOT_PORT=23 -export ROBOT_USER=as -export ROBOT_PASSWD= -export ROBOT_STATUS_FNAME=status.log -export ROB_PORT=13100 -export ROB_CAMS_MAX=1 -export DELAY_LOGIN=1000000 -export DELAY_US=100000 diff --git a/rob/env_sim.sh b/rob/env_sim.sh deleted file mode 100644 index 4c480e0..0000000 --- a/rob/env_sim.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/sh - -export ROBOT_TYPE= -export ROBOT_ADDR=localhost -export ROBOT_PORT=30002 -export ROBOT_USER= -export ROBOT_PASSWD= -export ROBOT_STATUS_FNAME=status.log -export ROB_PORT=13100 -export ROB_CAMS_MAX=1 -export DELAY_LOGIN=1000000 -export DELAY_US=100000 diff --git a/rob/rob.c b/rob/rob.c deleted file mode 100644 index 75947c5..0000000 --- a/rob/rob.c +++ /dev/null @@ -1,520 +0,0 @@ -/****************************************************************************** - * Copyright (C) 2020 Alejandro Colomar Andrés * - * SPDX-License-Identifier: GPL-2.0-only * - ******************************************************************************/ - - -/****************************************************************************** - ******* include ************************************************************** - ******************************************************************************/ -#include -#include -#include -#include - -#include -#include -#include - -#define ALX_NO_PREFIX -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/****************************************************************************** - ******* define *************************************************************** - ******************************************************************************/ -#define ENV_ROBOT_TYPE "ROBOT_TYPE" -#define ENV_ROBOT_ADDR "ROBOT_ADDR" -#define ENV_ROBOT_PORT "ROBOT_PORT" -#define ENV_ROBOT_USER "ROBOT_USER" -#define ENV_ROBOT_PASSWD "ROBOT_PASSWD" -#define ENV_ROBOT_STATUS_FNAME "ROBOT_STATUS_FNAME" -#define ENV_ROB_PORT "ROB_PORT" -#define ENV_ROB_CAMS_MAX "ROB_CAMS_MAX" -#define ENV_DELAY_LOGIN "DELAY_LOGIN" -#define ENV_DELAY_US "DELAY_US" - - -/****************************************************************************** - ******* enum ***************************************************************** - ******************************************************************************/ -enum Robot_Steps { - ROBOT_STEP_IDLE, - - ROBOT_STEP_INFO, - - ROBOT_STEPS -}; - - -/****************************************************************************** - ******* struct / union ******************************************************* - ******************************************************************************/ -struct Robot_Step_Info { - // pose; - char cmd[_POSIX_ARG_MAX]; -}; - -struct Robot_Status { - FILE *fp; - int step; - char cam_data[BUFSIZ]; - struct Robot_Step_Info info[ROBOT_STEPS]; -}; - - -/****************************************************************************** - ******* static variables ***************************************************** - ******************************************************************************/ -/* environment variables */ -static char robot_addr[_POSIX_ARG_MAX]; -static char robot_port[_POSIX_ARG_MAX]; -static char robot_user[_POSIX_ARG_MAX]; -static char robot_passwd[_POSIX_ARG_MAX]; -static char robot_status_fname[FILENAME_MAX]; -static char rob_port[_POSIX_ARG_MAX]; -static int rob_cams_max; -static int delay_login; -static int delay_us; -/* pid */ -static pid_t pid; -/* robot */ -static struct Robot_Status robot_status; -#if 0 -static FILE *robot; /* telnet */ -#else -static struct Alx_UR *robot; -#endif -/* cam */ -static int tcp; -static int cam; - - -/****************************************************************************** - ******* static functions (prototypes) **************************************** - ******************************************************************************/ -static -int rob_init (void); -static -int rob_deinit (void); - -static -int env_init (void); -static -int robot_init (void); -static -int robot_deinit (void); -static -int tcp_init (void); -static -int tcp_deinit (void); -static -int cam_init (void); -static -int cam_deinit (void); -static -int cam_reinit (void); - -static -int robot_status_init (void); -static -int robot_status_deinit (void); -static -int robot_status_update (int step); -static -void robot_status_reset (void); - -static -int cam_session (void); -static -int signal_cam_rdy (void); - -static -int robot_steps (void); -static -int robot_step_info (char *str); - - -/****************************************************************************** - ******* main ***************************************************************** - ******************************************************************************/ -int main (void) -{ - int status; - - status = 1; - if (rob_init()) - goto err0; - - status++; - if (robot_status.step) { - if (robot_steps()) - goto err1; - } - status++; - if (cam_init()) - goto err1; - - mb(); - for (int i = 0; !sigterm; i++) { - if (sigpipe) - goto err; - status = cam_session(); - if (status < 0) - goto err; - if (status) { - status = 3; - if (cam_reinit()) - goto err; - } - mb(); - }; - - status = 0; -err: - if (cam_deinit()) - status += 16; -err1: - if (rob_deinit()) - status += 32; -err0: - fprintf(stderr, "rob#%"PRIpid": ERROR: main(): %i\n", pid, status); - perrorx(NULL); - - return status; -} - - -/****************************************************************************** - ******* static functions (definitions) *************************************** - ******************************************************************************/ -static -int rob_init (void) -{ - int status; - - pid = getpid(); - status = -1; - if (sigpipe_init()) - goto err0; - status--; - if (sigterm_init()) - goto err0; - status--; - if (env_init()) - goto err0; - status--; - if (robot_init()) - goto err0; - status--; - if (tcp_init()) - goto err1; - return 0; -err1: - robot_deinit(); -err0: - fprintf(stderr, "rob#%"PRIpid": ERROR: rob_init(): %i\n", pid, status); - return status; -} - -static -int rob_deinit (void) -{ - int status; - - status = 0; - if (tcp_deinit()) - status -= 1; - if (robot_deinit()) - status -= 2; - if (robot_status_deinit()) - status -= 4; - - return status; -} - - -static -int env_init (void) -{ - int status; - - status = -1; - if (getenv_s(robot_addr, ARRAY_SIZE(robot_addr), ENV_ROBOT_ADDR)) - goto err; - status--; - if (getenv_s(robot_port, ARRAY_SIZE(robot_port), ENV_ROBOT_PORT)) - goto err; - status--; - if (getenv_s(robot_user, ARRAY_SIZE(robot_user), ENV_ROBOT_USER)) - goto err; - status--; - if (getenv_s(robot_passwd, ARRAY_SIZE(robot_passwd), ENV_ROBOT_PASSWD)) - goto err; - status--; - if (getenv_s(robot_status_fname, ARRAY_SIZE(robot_status_fname), - ENV_ROBOT_STATUS_FNAME)) - goto err; - status--; - if (getenv_s(rob_port, ARRAY_SIZE(rob_port), ENV_ROB_PORT)) - goto err; - status--; - if (getenv_i32(&rob_cams_max, ENV_ROB_CAMS_MAX)) - goto err; - status--; - if (getenv_i32(&delay_login, ENV_DELAY_LOGIN)) - goto err; - status--; - if (getenv_i32(&delay_us, ENV_DELAY_US)) - goto err; - - return 0; -err: - fprintf(stderr, "rob#%"PRIpid": ERROR: env_init(): %i\n", pid, status); - return status; -} - -static -int robot_init (void) -{ - int status; - - status = -1; -#if 0 - if (telnet_open_client(&robot, robot_addr, robot_port, "w")) - goto err0; - status--; - if (telnet_login(robot, robot_user, robot_passwd, delay_login)) - goto err; -#else - if (ur_init(&robot, robot_addr, robot_port, delay_login)) - goto err0; -#endif - status--; - if (robot_status_init()) - goto err; - - return 0; -err: - robot_deinit(); -err0: - fprintf(stderr, "rob#%"PRIpid": ERROR: robot_init(): %i\n",pid, status); - return status; -} - -static -int robot_deinit (void) -{ - -#if 0 - return pclose(robot); -#else - return ur_deinit(robot); -#endif -} - -static -int tcp_init (void) -{ - - tcp = tcp_server_open(rob_port, rob_cams_max); - return tcp < 0; -} - -static -int tcp_deinit (void) -{ - return close(tcp); -} - -static -int cam_init (void) -{ - struct sockaddr_storage cam_addr = {0}; - socklen_t cam_addr_len; - int status; - - status = -1; - cam_addr_len = sizeof(cam_addr); - cam = accept(tcp, (struct sockaddr *)&cam_addr, &cam_addr_len); - if (cam < 0) - goto err; - status--; - if (signal_cam_rdy()) - goto err; - return 0; -err: - fprintf(stderr, "rob#%"PRIpid": ERROR: cam_init(): %i\n", pid, status); - return status; -} - -static -int cam_deinit (void) -{ - return close(cam); -} - -static -int cam_reinit (void) -{ - - cam_deinit(); - return cam_init(); -} - - -static -int robot_status_init (void) -{ - FILE *fp; - - fp = fopen(robot_status_fname, "r"); - if (!fp) - return 0; - - if (fread(&robot_status, 1, sizeof(robot_status), fp) <= 0) - goto eread; - robot_status.fp = fp; - - return 0; -eread: - fclose(fp); - memset(&robot_status, 0, sizeof(robot_status)); - return -2; -} - -static -int robot_status_deinit (void) -{ - - if (robot_status.fp) - return fclose(robot_status.fp); - return 0; -} - -static -int robot_status_update (int step) -{ - - if (!step) { - robot_status_reset(); - return 0; - } - - robot_status.step = step; - - if (!robot_status.fp) { - robot_status.fp = fopen(robot_status_fname, "w"); - if (!robot_status.fp) - return -1; - } else { - rewind(robot_status.fp); - } - - if (fwrite(&robot_status, sizeof(robot_status), 1,robot_status.fp) != 1) - return -2; - - return 0; -} - -static -void robot_status_reset (void) -{ - - if (robot_status.fp) - fclose(robot_status.fp); - remove(robot_status_fname); - memset(&robot_status, 0, sizeof(robot_status)); -} - - -static -int cam_session (void) -{ - ssize_t n; - int status; - - status = 1; - n = recv(cam, robot_status.cam_data, - ARRAY_SIZE(robot_status.cam_data) - 1, 0); - if (n < 0) - goto err; - robot_status.cam_data[n] = 0; - status++; - if (!n) - goto err; - status = -1; - if (robot_steps()) - goto err; - status = 10; - if (signal_cam_rdy()) - goto err; - usleep(delay_us); - - return 0; -err: - fprintf(stderr, "rob#%"PRIpid": ERROR: cam_session(): %i\n",pid,status); - return status; -} - -static -int signal_cam_rdy (void) -{ - ssize_t n; - - n = send(cam, "\n", 1, 0); - if (n < 0) - return 1; - return 0; -} - - -static -int robot_steps (void) -{ - - switch (robot_status.step) { - case ROBOT_STEP_IDLE: - robot_status_update(ROBOT_STEP_INFO); - case ROBOT_STEP_INFO: - if (robot_step_info(robot_status.cam_data)) - goto err; - robot_status_update(ROBOT_STEP_IDLE); - } - - return 0; -err: - fprintf(stderr, "rob#%"PRIpid": ERROR: robot_steps(): %i\n", - pid, robot_status.step); - return robot_status.step; -} - -static -int robot_step_info (char *str) -{ - -#if 0 - return telnet_send(robot, str); -#else - return ur_puts(robot, str, delay_us); -#endif -} - - -/****************************************************************************** - ******* end of file ********************************************************** - ******************************************************************************/ - - diff --git a/rob/robot/ur/Dockerfile b/rob/robot/ur/Dockerfile deleted file mode 100644 index 18bf285..0000000 --- a/rob/robot/ur/Dockerfile +++ /dev/null @@ -1,55 +0,0 @@ -############################################################################### -# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # -# Copyright (C) 2020 Alejandro Colomar Andrés # -# SPDX-License-Identifier: GPL-2.0-only # -############################################################################### - -FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 \ - AS build -RUN apt-get update && \ - apt-get upgrade -V --yes && \ - apt-get install -V \ - gcc \ - gcc-10 \ - make \ - git \ - pkg-config \ - libbsd-dev \ - deborphan \ - --yes && \ - apt-get autoremove --purge --yes && \ - apt-get purge $(deborphan) --yes && \ - apt-get autoclean && \ - apt-get clean -WORKDIR /tmp -RUN git clone \ - --single-branch \ - --branch v1.0-b23 \ - https://github.com/alejandro-colomar/libalx.git && \ - make base telnet-tcp robot -C libalx -j 8 && \ - make install-base -C libalx && \ - make install-telnet-tcp -C libalx && \ - make install-robot -C libalx && \ - rm -rf libalx -RUN git clone \ - --single-branch \ - --branch version-0.5 \ - https://github.com/alejandro-colomar/rob_cam.git && \ - make -C rob_cam/rob/robot/ur/ -j 2 - -FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 -WORKDIR /app -RUN apt-get update && \ - apt-get upgrade --yes && \ - apt-get install -V \ - telnet \ - --yes && \ - apt-get autoremove --purge --yes && \ - apt-get autoclean && \ - apt-get clean -COPY --from=build /tmp/rob_cam/rob/robot/ur/ur-sim ./ -RUN chmod +x ./ur-sim -CMD ["./ur-sim"] - -# docker container run --tty --network rob_cam_network --name robot --rm alejandrocolomar/rob_cam:ur-sim_0.5.6 - diff --git a/rob/robot/ur/Makefile b/rob/robot/ur/Makefile deleted file mode 100644 index 895141a..0000000 --- a/rob/robot/ur/Makefile +++ /dev/null @@ -1,16 +0,0 @@ - -CFLAGS_W = -Wall -Wextra -Werror -Wno-implicit-fallthrough -CFLAGS_O = -O3 -march=native -flto -fuse-linker-plugin -static -CFLAGS = $(CFLAGS_W) $(CFLAGS_O) - -.PHONY: all -all: ur-sim - -ur-sim: ur-sim.c - gcc-10 $(CFLAGS) \ - `pkg-config --static --cflags libalx-base` \ - `pkg-config --static --cflags libalx-robot` \ - $< -o $@ \ - `pkg-config --static --libs libalx-robot` \ - `pkg-config --static --libs libalx-base` - diff --git a/rob/robot/ur/ur-sim.c b/rob/robot/ur/ur-sim.c deleted file mode 100644 index 22a9f80..0000000 --- a/rob/robot/ur/ur-sim.c +++ /dev/null @@ -1,137 +0,0 @@ -/****************************************************************************** - * Copyright (C) 2020 Alejandro Colomar Andrés * - * SPDX-License-Identifier: GPL-2.0-only * - ******************************************************************************/ - - -/****************************************************************************** - ******* include ************************************************************** - ******************************************************************************/ -#include -#include -#include -#include -#include -//#include - -#include -#include -#include -#include - -#define ALX_NO_PREFIX -#include -#include -#include -#include - - -/****************************************************************************** - ******* define *************************************************************** - ******************************************************************************/ -#define SERVER_PORT "30002" -#define LISTEN_BACKLOG (50) -#define CYCLE_DELAY (1000) - -#define LINEBUF (80) - - -/****************************************************************************** - ******* enum ***************************************************************** - ******************************************************************************/ - - -/****************************************************************************** - ******* struct / union ******************************************************* - ******************************************************************************/ - - -/****************************************************************************** - ******* static variables ***************************************************** - ******************************************************************************/ - - -/****************************************************************************** - ******* static functions (prototypes) **************************************** - ******************************************************************************/ -noreturn void tcp_session (int rob, int i) -{ - char buf[LINEBUF]; - ssize_t n; - int j; - - for (j = 0; true; j++) { - n = recv(rob, buf, ARRAY_SIZE(buf) - 1, 0); - if (n < 0) - goto err; - buf[n] = 0; - printf("%s", buf); - fflush(stdout); - if (!n) - break; - usleep(CYCLE_DELAY); - } - fprintf(stderr, "session#%i: session finished succesfully!\n", i); - close(rob); - exit(EXIT_SUCCESS); -err: - fprintf(stderr, "session#%i: msg#%i: read() failed; session ended\n", i, j); - close(rob); - exit(EXIT_FAILURE); -} - - -/****************************************************************************** - ******* main ***************************************************************** - ******************************************************************************/ -int main (void) -{ - int tcp; - int rob; - struct sockaddr_storage cli_addr = {0}; - socklen_t cli_addr_len; - int status; - pid_t pid; - - status = EXIT_FAILURE; - tcp = tcp_server_open(SERVER_PORT, LISTEN_BACKLOG); - if (tcp < 0) { - perrorx("tcp_server_open();"); - goto out; - } - - cli_addr_len = sizeof(cli_addr); - - for (int i = 0; true; i++) { - rob = accept(tcp, (struct sockaddr *)&cli_addr, &cli_addr_len); - if (rob < 0) { - fprintf(stderr, "session#%i: accept() failed\n", i); - continue; - } - - pid = fork(); - if (pid < 0) { - fprintf(stderr, "session#%i: fork() failed\n", i); - continue; - } else if (!pid) { - tcp_session(rob, i); - __builtin_unreachable(); - } else { - close(rob); - } - } - status = EXIT_SUCCESS; -out: - return close(tcp) || status; -} - - -/****************************************************************************** - ******* static functions (definitions) *************************************** - ******************************************************************************/ - - -/****************************************************************************** - ******* end of file ********************************************************** - ******************************************************************************/ - diff --git a/src/cam/cam.c b/src/cam/cam.c new file mode 100644 index 0000000..2bcd946 --- /dev/null +++ b/src/cam/cam.c @@ -0,0 +1,372 @@ +/****************************************************************************** + * Copyright (C) 2020 Alejandro Colomar Andrés * + * SPDX-License-Identifier: GPL-2.0-only * + ******************************************************************************/ + + +/****************************************************************************** + ******* include ************************************************************** + ******************************************************************************/ +#include +#include +#include +#include +#include + +#include +#include +#include + +#define ALX_NO_PREFIX +#include +#include +#include +#include +#include +#include +#include +#include + + +/****************************************************************************** + ******* define *************************************************************** + ******************************************************************************/ +#define ENV_ROB_ADDR "ROB_ADDR" +#define ENV_ROB_PORT "ROB_PORT" +#define ENV_CAMERA_IDX "CAMERA_IDX" +#define ENV_DELAY_US "DELAY_US" + + + +/****************************************************************************** + ******* enum ***************************************************************** + ******************************************************************************/ + + +/****************************************************************************** + ******* struct / union ******************************************************* + ******************************************************************************/ + + +/****************************************************************************** + ******* static variables ***************************************************** + ******************************************************************************/ +/* environment variables */ +static char rob_addr[_POSIX_ARG_MAX]; +static char rob_port[_POSIX_ARG_MAX]; +static int camera_idx; +static int delay_us; +/* pid */ +static pid_t pid; +/* camera */ +static cam_s *camera; +/* rob */ +static int rob; + + +/****************************************************************************** + ******* static functions (prototypes) **************************************** + ******************************************************************************/ +static +int cam_init (img_s **img); +static +int cam_deinit (img_s *img); + +static +int env_init (void); +static +int rob_init (void); +static +int rob_deinit (void); +static +int rob_reinit (void); +static +int camera_init (void); +static +void camera_deinit (void); +static +int cv_init (img_s **img); +static +void cv_deinit (img_s *img); + +static +int session (int i, img_s *img); +static +int wait_rob (void); +static +int proc_cv (uint8_t *restrict blue11, img_s *restrict img); + + +/****************************************************************************** + ******* main ***************************************************************** + ******************************************************************************/ +int main (void) +{ + img_s *img; + int status; + + status = 1; + if (cam_init(&img)) + goto err0; + + mb(); + for (int i = 0; !sigterm; i++) { + if (sigpipe) { + if (rob_reinit()) + goto err; + } + status = session(i, img); + if (status) + goto err; + usleep(delay_us); + mb(); + } + + status = 0; +err: + cam_deinit(img); +err0: + fprintf(stderr, "cam#%"PRIpid": OUT: %i\n", pid, status); + perrorx(NULL); + + return status; +} + + +/****************************************************************************** + ******* static functions (definitions) *************************************** + ******************************************************************************/ +static +int cam_init (img_s **img) +{ + int status; + + pid = getpid(); + status = -1; + if (sigpipe_init()) + goto err0; + status--; + if (sigterm_init()) + goto err0; + status--; + if (env_init()) + goto err0; + status--; + if (rob_init()) + goto err0; + status--; + if (camera_init()) + goto err1; + status--; + if (cv_init(img)) + goto err2; + return 0; +err2: + camera_deinit(); +err1: + rob_deinit(); +err0: + fprintf(stderr, "cam#%"PRIpid": ERROR: cam_init(): %i\n", pid, status); + return status; +} + +static +int cam_deinit (img_s *img) +{ + int status; + + status = 0; + cv_deinit(img); + camera_deinit(); + if (rob_deinit()) + status -= 4; + + return status; +} + + +static +int env_init (void) +{ + int status; + + status = -1; + if (getenv_s(rob_addr, ARRAY_SIZE(rob_addr), ENV_ROB_ADDR)) + goto err; + status--; + if (getenv_s(rob_port, ARRAY_SIZE(rob_port), ENV_ROB_PORT)) + goto err; + status--; + if (getenv_i32(&camera_idx, ENV_CAMERA_IDX)) + goto err; + status--; + if (getenv_i32(&delay_us, ENV_DELAY_US)) + goto err; + + return 0; +err: + fprintf(stderr, "cam#%"PRIpid": ERROR: env_init(): %i\n", pid, status); + return status; +} + +static +int rob_init (void) +{ + + rob = tcp_client_open(rob_addr, rob_port); + return rob < 0; +} + +static +int rob_deinit (void) +{ + return close(rob); +} + +static +int rob_reinit (void) +{ + + rob_deinit(); + return rob_init(); +} + +static +int camera_init (void) +{ + int status; + + status = -1; + if (alx_cv_alloc_cam(&camera)) + goto err; + alx_cv_init_cam(camera, NULL, camera_idx, 0); + return 0; +err: + fprintf(stderr, "cam#%"PRIpid": ERROR: camera_init(): %i\n",pid,status); + return status; +} + +static +void camera_deinit (void) +{ + + alx_cv_deinit_cam(camera); + alx_cv_free_cam(camera); +} + +static +int cv_init (img_s **img) +{ + int status; + + status = -1; + if (alx_cv_init_img(img)) + goto err; + return 0; +err: + fprintf(stderr, "cam#%"PRIpid": ERROR: cv_init(): %i\n", pid, status); + return status; +} + +static +void cv_deinit (img_s *img) +{ + + alx_cv_deinit_img(img); +} + + +static +int session (int i, img_s *img) +{ + uint8_t blue11; + char buf[BUFSIZ]; + ptrdiff_t len; + ssize_t n; + int status; + clock_t time_0; + clock_t time_1; + double time_tot; + + time_0 = clock(); + + status = -1; + if (wait_rob()) + goto err; + status--; + if (proc_cv(&blue11, img)) + goto err; + status--; + if (sbprintf(buf, &len, "cam#%"PRIpid":session#%i: img[B][1][1] = %"PRIu8"", + pid, i, blue11)) + goto err; + printf("%s\n", buf); + status--; + n = send(rob, buf, len, 0); + if (n < 0) + goto err; + + time_1 = clock(); + time_tot = ((double) time_1 - time_0) / CLOCKS_PER_SEC; + printf("session time: %5.3lf s;\n", time_tot); + return 0; +err: + fprintf(stderr, "cam#%"PRIpid": ERROR: session(): %i\n", pid, status); + return status; +} + +static +int wait_rob (void) +{ + char buf[BUFSIZ]; + ssize_t n; + int status; + + status = -1; + n = recv(rob, buf, ARRAY_SIZE(buf) - 1, 0); + if (n < 0) + goto err; + status--; + if (!n) + goto err; + return 0; +err: + fprintf(stderr, "cam#%"PRIpid": ERROR: wait_rob(): %i\n", pid, status); + return status; +} + +static +int proc_cv (uint8_t *restrict blue11, img_s *restrict img) +{ + clock_t time_0; + clock_t time_1; + double time_tot; + int status; + + time_0 = clock(); + + status = -1; + if (alx_cv_cam_read(img, camera)) + goto err; + status--; + if (alx_cv_component(img, ALX_CV_CMP_BGR_B)) + goto err; + status--; + if (alx_cv_pixel_get_u8(img, blue11, 1, 1)) + goto err; + + time_1 = clock(); + time_tot = ((double) time_1 - time_0) / CLOCKS_PER_SEC; + printf("cv time: %5.3lf s;\n", time_tot); + + return 0; +err: + fprintf(stderr, "cam#%"PRIpid": ERROR: proc_cv(): %i\n", pid, status); + return status; +} + + +/****************************************************************************** + ******* end of file ********************************************************** + ******************************************************************************/ + diff --git a/src/rob/rob.c b/src/rob/rob.c new file mode 100644 index 0000000..75947c5 --- /dev/null +++ b/src/rob/rob.c @@ -0,0 +1,520 @@ +/****************************************************************************** + * Copyright (C) 2020 Alejandro Colomar Andrés * + * SPDX-License-Identifier: GPL-2.0-only * + ******************************************************************************/ + + +/****************************************************************************** + ******* include ************************************************************** + ******************************************************************************/ +#include +#include +#include +#include + +#include +#include +#include + +#define ALX_NO_PREFIX +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/****************************************************************************** + ******* define *************************************************************** + ******************************************************************************/ +#define ENV_ROBOT_TYPE "ROBOT_TYPE" +#define ENV_ROBOT_ADDR "ROBOT_ADDR" +#define ENV_ROBOT_PORT "ROBOT_PORT" +#define ENV_ROBOT_USER "ROBOT_USER" +#define ENV_ROBOT_PASSWD "ROBOT_PASSWD" +#define ENV_ROBOT_STATUS_FNAME "ROBOT_STATUS_FNAME" +#define ENV_ROB_PORT "ROB_PORT" +#define ENV_ROB_CAMS_MAX "ROB_CAMS_MAX" +#define ENV_DELAY_LOGIN "DELAY_LOGIN" +#define ENV_DELAY_US "DELAY_US" + + +/****************************************************************************** + ******* enum ***************************************************************** + ******************************************************************************/ +enum Robot_Steps { + ROBOT_STEP_IDLE, + + ROBOT_STEP_INFO, + + ROBOT_STEPS +}; + + +/****************************************************************************** + ******* struct / union ******************************************************* + ******************************************************************************/ +struct Robot_Step_Info { + // pose; + char cmd[_POSIX_ARG_MAX]; +}; + +struct Robot_Status { + FILE *fp; + int step; + char cam_data[BUFSIZ]; + struct Robot_Step_Info info[ROBOT_STEPS]; +}; + + +/****************************************************************************** + ******* static variables ***************************************************** + ******************************************************************************/ +/* environment variables */ +static char robot_addr[_POSIX_ARG_MAX]; +static char robot_port[_POSIX_ARG_MAX]; +static char robot_user[_POSIX_ARG_MAX]; +static char robot_passwd[_POSIX_ARG_MAX]; +static char robot_status_fname[FILENAME_MAX]; +static char rob_port[_POSIX_ARG_MAX]; +static int rob_cams_max; +static int delay_login; +static int delay_us; +/* pid */ +static pid_t pid; +/* robot */ +static struct Robot_Status robot_status; +#if 0 +static FILE *robot; /* telnet */ +#else +static struct Alx_UR *robot; +#endif +/* cam */ +static int tcp; +static int cam; + + +/****************************************************************************** + ******* static functions (prototypes) **************************************** + ******************************************************************************/ +static +int rob_init (void); +static +int rob_deinit (void); + +static +int env_init (void); +static +int robot_init (void); +static +int robot_deinit (void); +static +int tcp_init (void); +static +int tcp_deinit (void); +static +int cam_init (void); +static +int cam_deinit (void); +static +int cam_reinit (void); + +static +int robot_status_init (void); +static +int robot_status_deinit (void); +static +int robot_status_update (int step); +static +void robot_status_reset (void); + +static +int cam_session (void); +static +int signal_cam_rdy (void); + +static +int robot_steps (void); +static +int robot_step_info (char *str); + + +/****************************************************************************** + ******* main ***************************************************************** + ******************************************************************************/ +int main (void) +{ + int status; + + status = 1; + if (rob_init()) + goto err0; + + status++; + if (robot_status.step) { + if (robot_steps()) + goto err1; + } + status++; + if (cam_init()) + goto err1; + + mb(); + for (int i = 0; !sigterm; i++) { + if (sigpipe) + goto err; + status = cam_session(); + if (status < 0) + goto err; + if (status) { + status = 3; + if (cam_reinit()) + goto err; + } + mb(); + }; + + status = 0; +err: + if (cam_deinit()) + status += 16; +err1: + if (rob_deinit()) + status += 32; +err0: + fprintf(stderr, "rob#%"PRIpid": ERROR: main(): %i\n", pid, status); + perrorx(NULL); + + return status; +} + + +/****************************************************************************** + ******* static functions (definitions) *************************************** + ******************************************************************************/ +static +int rob_init (void) +{ + int status; + + pid = getpid(); + status = -1; + if (sigpipe_init()) + goto err0; + status--; + if (sigterm_init()) + goto err0; + status--; + if (env_init()) + goto err0; + status--; + if (robot_init()) + goto err0; + status--; + if (tcp_init()) + goto err1; + return 0; +err1: + robot_deinit(); +err0: + fprintf(stderr, "rob#%"PRIpid": ERROR: rob_init(): %i\n", pid, status); + return status; +} + +static +int rob_deinit (void) +{ + int status; + + status = 0; + if (tcp_deinit()) + status -= 1; + if (robot_deinit()) + status -= 2; + if (robot_status_deinit()) + status -= 4; + + return status; +} + + +static +int env_init (void) +{ + int status; + + status = -1; + if (getenv_s(robot_addr, ARRAY_SIZE(robot_addr), ENV_ROBOT_ADDR)) + goto err; + status--; + if (getenv_s(robot_port, ARRAY_SIZE(robot_port), ENV_ROBOT_PORT)) + goto err; + status--; + if (getenv_s(robot_user, ARRAY_SIZE(robot_user), ENV_ROBOT_USER)) + goto err; + status--; + if (getenv_s(robot_passwd, ARRAY_SIZE(robot_passwd), ENV_ROBOT_PASSWD)) + goto err; + status--; + if (getenv_s(robot_status_fname, ARRAY_SIZE(robot_status_fname), + ENV_ROBOT_STATUS_FNAME)) + goto err; + status--; + if (getenv_s(rob_port, ARRAY_SIZE(rob_port), ENV_ROB_PORT)) + goto err; + status--; + if (getenv_i32(&rob_cams_max, ENV_ROB_CAMS_MAX)) + goto err; + status--; + if (getenv_i32(&delay_login, ENV_DELAY_LOGIN)) + goto err; + status--; + if (getenv_i32(&delay_us, ENV_DELAY_US)) + goto err; + + return 0; +err: + fprintf(stderr, "rob#%"PRIpid": ERROR: env_init(): %i\n", pid, status); + return status; +} + +static +int robot_init (void) +{ + int status; + + status = -1; +#if 0 + if (telnet_open_client(&robot, robot_addr, robot_port, "w")) + goto err0; + status--; + if (telnet_login(robot, robot_user, robot_passwd, delay_login)) + goto err; +#else + if (ur_init(&robot, robot_addr, robot_port, delay_login)) + goto err0; +#endif + status--; + if (robot_status_init()) + goto err; + + return 0; +err: + robot_deinit(); +err0: + fprintf(stderr, "rob#%"PRIpid": ERROR: robot_init(): %i\n",pid, status); + return status; +} + +static +int robot_deinit (void) +{ + +#if 0 + return pclose(robot); +#else + return ur_deinit(robot); +#endif +} + +static +int tcp_init (void) +{ + + tcp = tcp_server_open(rob_port, rob_cams_max); + return tcp < 0; +} + +static +int tcp_deinit (void) +{ + return close(tcp); +} + +static +int cam_init (void) +{ + struct sockaddr_storage cam_addr = {0}; + socklen_t cam_addr_len; + int status; + + status = -1; + cam_addr_len = sizeof(cam_addr); + cam = accept(tcp, (struct sockaddr *)&cam_addr, &cam_addr_len); + if (cam < 0) + goto err; + status--; + if (signal_cam_rdy()) + goto err; + return 0; +err: + fprintf(stderr, "rob#%"PRIpid": ERROR: cam_init(): %i\n", pid, status); + return status; +} + +static +int cam_deinit (void) +{ + return close(cam); +} + +static +int cam_reinit (void) +{ + + cam_deinit(); + return cam_init(); +} + + +static +int robot_status_init (void) +{ + FILE *fp; + + fp = fopen(robot_status_fname, "r"); + if (!fp) + return 0; + + if (fread(&robot_status, 1, sizeof(robot_status), fp) <= 0) + goto eread; + robot_status.fp = fp; + + return 0; +eread: + fclose(fp); + memset(&robot_status, 0, sizeof(robot_status)); + return -2; +} + +static +int robot_status_deinit (void) +{ + + if (robot_status.fp) + return fclose(robot_status.fp); + return 0; +} + +static +int robot_status_update (int step) +{ + + if (!step) { + robot_status_reset(); + return 0; + } + + robot_status.step = step; + + if (!robot_status.fp) { + robot_status.fp = fopen(robot_status_fname, "w"); + if (!robot_status.fp) + return -1; + } else { + rewind(robot_status.fp); + } + + if (fwrite(&robot_status, sizeof(robot_status), 1,robot_status.fp) != 1) + return -2; + + return 0; +} + +static +void robot_status_reset (void) +{ + + if (robot_status.fp) + fclose(robot_status.fp); + remove(robot_status_fname); + memset(&robot_status, 0, sizeof(robot_status)); +} + + +static +int cam_session (void) +{ + ssize_t n; + int status; + + status = 1; + n = recv(cam, robot_status.cam_data, + ARRAY_SIZE(robot_status.cam_data) - 1, 0); + if (n < 0) + goto err; + robot_status.cam_data[n] = 0; + status++; + if (!n) + goto err; + status = -1; + if (robot_steps()) + goto err; + status = 10; + if (signal_cam_rdy()) + goto err; + usleep(delay_us); + + return 0; +err: + fprintf(stderr, "rob#%"PRIpid": ERROR: cam_session(): %i\n",pid,status); + return status; +} + +static +int signal_cam_rdy (void) +{ + ssize_t n; + + n = send(cam, "\n", 1, 0); + if (n < 0) + return 1; + return 0; +} + + +static +int robot_steps (void) +{ + + switch (robot_status.step) { + case ROBOT_STEP_IDLE: + robot_status_update(ROBOT_STEP_INFO); + case ROBOT_STEP_INFO: + if (robot_step_info(robot_status.cam_data)) + goto err; + robot_status_update(ROBOT_STEP_IDLE); + } + + return 0; +err: + fprintf(stderr, "rob#%"PRIpid": ERROR: robot_steps(): %i\n", + pid, robot_status.step); + return robot_status.step; +} + +static +int robot_step_info (char *str) +{ + +#if 0 + return telnet_send(robot, str); +#else + return ur_puts(robot, str, delay_us); +#endif +} + + +/****************************************************************************** + ******* end of file ********************************************************** + ******************************************************************************/ + + diff --git a/src/robot/ur-sim/ur-sim.c b/src/robot/ur-sim/ur-sim.c new file mode 100644 index 0000000..22a9f80 --- /dev/null +++ b/src/robot/ur-sim/ur-sim.c @@ -0,0 +1,137 @@ +/****************************************************************************** + * Copyright (C) 2020 Alejandro Colomar Andrés * + * SPDX-License-Identifier: GPL-2.0-only * + ******************************************************************************/ + + +/****************************************************************************** + ******* include ************************************************************** + ******************************************************************************/ +#include +#include +#include +#include +#include +//#include + +#include +#include +#include +#include + +#define ALX_NO_PREFIX +#include +#include +#include +#include + + +/****************************************************************************** + ******* define *************************************************************** + ******************************************************************************/ +#define SERVER_PORT "30002" +#define LISTEN_BACKLOG (50) +#define CYCLE_DELAY (1000) + +#define LINEBUF (80) + + +/****************************************************************************** + ******* enum ***************************************************************** + ******************************************************************************/ + + +/****************************************************************************** + ******* struct / union ******************************************************* + ******************************************************************************/ + + +/****************************************************************************** + ******* static variables ***************************************************** + ******************************************************************************/ + + +/****************************************************************************** + ******* static functions (prototypes) **************************************** + ******************************************************************************/ +noreturn void tcp_session (int rob, int i) +{ + char buf[LINEBUF]; + ssize_t n; + int j; + + for (j = 0; true; j++) { + n = recv(rob, buf, ARRAY_SIZE(buf) - 1, 0); + if (n < 0) + goto err; + buf[n] = 0; + printf("%s", buf); + fflush(stdout); + if (!n) + break; + usleep(CYCLE_DELAY); + } + fprintf(stderr, "session#%i: session finished succesfully!\n", i); + close(rob); + exit(EXIT_SUCCESS); +err: + fprintf(stderr, "session#%i: msg#%i: read() failed; session ended\n", i, j); + close(rob); + exit(EXIT_FAILURE); +} + + +/****************************************************************************** + ******* main ***************************************************************** + ******************************************************************************/ +int main (void) +{ + int tcp; + int rob; + struct sockaddr_storage cli_addr = {0}; + socklen_t cli_addr_len; + int status; + pid_t pid; + + status = EXIT_FAILURE; + tcp = tcp_server_open(SERVER_PORT, LISTEN_BACKLOG); + if (tcp < 0) { + perrorx("tcp_server_open();"); + goto out; + } + + cli_addr_len = sizeof(cli_addr); + + for (int i = 0; true; i++) { + rob = accept(tcp, (struct sockaddr *)&cli_addr, &cli_addr_len); + if (rob < 0) { + fprintf(stderr, "session#%i: accept() failed\n", i); + continue; + } + + pid = fork(); + if (pid < 0) { + fprintf(stderr, "session#%i: fork() failed\n", i); + continue; + } else if (!pid) { + tcp_session(rob, i); + __builtin_unreachable(); + } else { + close(rob); + } + } + status = EXIT_SUCCESS; +out: + return close(tcp) || status; +} + + +/****************************************************************************** + ******* static functions (definitions) *************************************** + ******************************************************************************/ + + +/****************************************************************************** + ******* end of file ********************************************************** + ******************************************************************************/ + -- cgit v1.2.3 From 56ee4f61e231293955658077c927b900e3604681 Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Fri, 29 May 2020 12:26:05 +0200 Subject: Update debian versions --- etc/docker/cam/Dockerfile | 6 ++++-- etc/docker/rob/Dockerfile | 6 ++++-- etc/docker/robot/ur-sim/Dockerfile | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/etc/docker/cam/Dockerfile b/etc/docker/cam/Dockerfile index 342e7c9..25952cd 100644 --- a/etc/docker/cam/Dockerfile +++ b/etc/docker/cam/Dockerfile @@ -4,7 +4,8 @@ # SPDX-License-Identifier: GPL-2.0-only # ############################################################################### -FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 \ +## debian:bullseye +FROM debian@sha256:a0304760ee6dbca1270ddb92a850b5328057618edd9658cac3e4c913ce38dae1 \ AS build RUN apt-get update && \ apt-get upgrade -V --yes && \ @@ -38,7 +39,8 @@ RUN git clone \ https://github.com/alejandro-colomar/rob_cam.git && \ make bin/cam -FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 +## debian:bullseye +FROM debian@sha256:a0304760ee6dbca1270ddb92a850b5328057618edd9658cac3e4c913ce38dae1 RUN apt-get update && \ apt-get upgrade --yes && \ apt-get install -V \ diff --git a/etc/docker/rob/Dockerfile b/etc/docker/rob/Dockerfile index ad4f196..beca7dd 100644 --- a/etc/docker/rob/Dockerfile +++ b/etc/docker/rob/Dockerfile @@ -4,7 +4,8 @@ # SPDX-License-Identifier: GPL-2.0-only # ############################################################################### -FROM debian@sha256:21a1267db36931b0a89f1fece2e54afa78438951fcaadd529837b7def15d04de \ +## debian:latest +FROM debian@sha256:18f374fa88f9230a5c860f986dc83d3d03a056708164ff30c98d0e789e90946d \ AS build RUN apt-get update && \ apt-get upgrade -V --yes && \ @@ -36,7 +37,8 @@ RUN git clone \ https://github.com/alejandro-colomar/rob_cam.git && \ make bin/rob -j 2 -FROM debian@sha256:21a1267db36931b0a89f1fece2e54afa78438951fcaadd529837b7def15d04de +## debian:latest +FROM debian@sha256:18f374fa88f9230a5c860f986dc83d3d03a056708164ff30c98d0e789e90946d RUN apt-get update && \ apt-get upgrade --yes && \ apt-get install -V \ diff --git a/etc/docker/robot/ur-sim/Dockerfile b/etc/docker/robot/ur-sim/Dockerfile index 990381e..b598f34 100644 --- a/etc/docker/robot/ur-sim/Dockerfile +++ b/etc/docker/robot/ur-sim/Dockerfile @@ -4,7 +4,8 @@ # SPDX-License-Identifier: GPL-2.0-only # ############################################################################### -FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 \ +## debian:bullseye +FROM debian@sha256:a0304760ee6dbca1270ddb92a850b5328057618edd9658cac3e4c913ce38dae1 \ AS build RUN apt-get update && \ apt-get upgrade -V --yes && \ @@ -37,7 +38,8 @@ RUN git clone \ https://github.com/alejandro-colomar/rob_cam.git && \ make bin/ur-sim -j 2 -FROM debian@sha256:e6a6f2625ec46aa6ce5c537208565cde16138e7963c341ff2a3ecbf9a6736060 +## debian:bullseye +FROM debian@sha256:a0304760ee6dbca1270ddb92a850b5328057618edd9658cac3e4c913ce38dae1 RUN apt-get update && \ apt-get upgrade --yes && \ apt-get install -V \ -- cgit v1.2.3 From 751bc92a6792355e6afafdfb3530511bdfdaa6d2 Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Fri, 29 May 2020 13:15:00 +0200 Subject: Fix paths --- etc/docker/cam/Dockerfile | 2 +- etc/docker/rob/Dockerfile | 4 ++-- etc/docker/robot/ur-sim/Dockerfile | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/etc/docker/cam/Dockerfile b/etc/docker/cam/Dockerfile index 25952cd..b0a4c1f 100644 --- a/etc/docker/cam/Dockerfile +++ b/etc/docker/cam/Dockerfile @@ -37,7 +37,7 @@ RUN git clone \ --single-branch \ --branch version-0.5 \ https://github.com/alejandro-colomar/rob_cam.git && \ - make bin/cam + make bin/cam -C rob_cam ## debian:bullseye FROM debian@sha256:a0304760ee6dbca1270ddb92a850b5328057618edd9658cac3e4c913ce38dae1 diff --git a/etc/docker/rob/Dockerfile b/etc/docker/rob/Dockerfile index beca7dd..68be2eb 100644 --- a/etc/docker/rob/Dockerfile +++ b/etc/docker/rob/Dockerfile @@ -35,7 +35,7 @@ RUN git clone \ --single-branch \ --branch version-0.5 \ https://github.com/alejandro-colomar/rob_cam.git && \ - make bin/rob -j 2 + make bin/rob -C rob_cam ## debian:latest FROM debian@sha256:18f374fa88f9230a5c860f986dc83d3d03a056708164ff30c98d0e789e90946d @@ -47,7 +47,7 @@ RUN apt-get update && \ apt-get autoremove --purge --yes && \ apt-get autoclean && \ apt-get clean -COPY --from=build /tmp/rob_cam/rob/rob /usr/local/bin/rob +COPY --from=build /tmp/rob_cam/bin/rob /usr/local/bin/rob CMD ["rob"] # docker container run --tty --interactive --rm --name rob --network rob_cam_network --env ROBOT_TYPE=ur --env ROBOT_ADDR=robot --env ROBOT_PORT=30002 --env ROBOT_USER= --env ROBOT_PASSWD= --env ROBOT_STATUS_FNAME=status.log --env ROB_PORT=13100 --env ROB_CAMS_MAX=10 --env DELAY_LOGIN=1000000 --env DELAY_US=100000 alejandrocolomar/rob_cam:rob_0.5.6 diff --git a/etc/docker/robot/ur-sim/Dockerfile b/etc/docker/robot/ur-sim/Dockerfile index b598f34..89c9c6b 100644 --- a/etc/docker/robot/ur-sim/Dockerfile +++ b/etc/docker/robot/ur-sim/Dockerfile @@ -36,7 +36,7 @@ RUN git clone \ --single-branch \ --branch version-0.5 \ https://github.com/alejandro-colomar/rob_cam.git && \ - make bin/ur-sim -j 2 + make bin/ur-sim -C rob_cam ## debian:bullseye FROM debian@sha256:a0304760ee6dbca1270ddb92a850b5328057618edd9658cac3e4c913ce38dae1 @@ -48,7 +48,7 @@ RUN apt-get update && \ apt-get autoremove --purge --yes && \ apt-get autoclean && \ apt-get clean -COPY --from=build /tmp/rob_cam/rob/robot/ur/ur-sim /usr/local/bin/ur-sim +COPY --from=build /tmp/rob_cam/bin/ur-sim /usr/local/bin/ur-sim CMD ["ur-sim"] # docker container run --tty --network rob_cam_network --name robot --rm alejandrocolomar/rob_cam:ur-sim_0.5.6 -- cgit v1.2.3 From 77c0919b191e8a44f3781159ec9a101bf892997d Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Fri, 29 May 2020 13:15:33 +0200 Subject: Update libgsl version --- etc/docker/cam/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/docker/cam/Dockerfile b/etc/docker/cam/Dockerfile index b0a4c1f..cd887d4 100644 --- a/etc/docker/cam/Dockerfile +++ b/etc/docker/cam/Dockerfile @@ -48,7 +48,7 @@ RUN apt-get update && \ libc6 \ libstdc++6 \ libbsd0 \ - libgsl23 \ + libgsl25 \ libgslcblas0 \ libopencv-core4.2 \ libopencv-videoio4.2 \ -- cgit v1.2.3 From c2eb4215c3e63afabbadd5ff0f9e92bace1a62f4 Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Fri, 29 May 2020 16:46:47 +0200 Subject: Cosmetic --- etc/docker/rob/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/docker/rob/Dockerfile b/etc/docker/rob/Dockerfile index 68be2eb..91ab619 100644 --- a/etc/docker/rob/Dockerfile +++ b/etc/docker/rob/Dockerfile @@ -35,7 +35,7 @@ RUN git clone \ --single-branch \ --branch version-0.5 \ https://github.com/alejandro-colomar/rob_cam.git && \ - make bin/rob -C rob_cam + make bin/rob -C rob_cam ## debian:latest FROM debian@sha256:18f374fa88f9230a5c860f986dc83d3d03a056708164ff30c98d0e789e90946d -- cgit v1.2.3 From 395c55209c3cf8d73a9cf38da5f9a98e04e75a8d Mon Sep 17 00:00:00 2001 From: Sebastian Colomar Date: Fri, 29 May 2020 23:51:02 +0200 Subject: Remove unnecessary release folder --- etc/docker/swarm/docker-compose.yaml | 38 ++++++++++++++++++++++++++++++++++ etc/docker/swarm/release/dns-blue.yaml | 38 ---------------------------------- etc/docker/swarm/release/dns.yaml | 38 ---------------------------------- 3 files changed, 38 insertions(+), 76 deletions(-) create mode 100644 etc/docker/swarm/docker-compose.yaml delete mode 100644 etc/docker/swarm/release/dns-blue.yaml delete mode 100644 etc/docker/swarm/release/dns.yaml diff --git a/etc/docker/swarm/docker-compose.yaml b/etc/docker/swarm/docker-compose.yaml new file mode 100644 index 0000000..173d3a6 --- /dev/null +++ b/etc/docker/swarm/docker-compose.yaml @@ -0,0 +1,38 @@ +######################################################################### +# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # +# SPDX-License-Identifier: GPL-2.0-only # +######################################################################### + +configs: + named: + file: /run/configs/etc/bind/named.conf + +secrets: + forward: + file: /run/secrets/var/bind/master/alejandro-colomar.com + reverse: + file: /run/secrets/var/bind/master/10.168 + +services: + dns: + configs: + - + mode: 0440 + source: named + target: /etc/bind/named.conf + deploy: + mode: global + image: "alejandrocolomar/rob_cam:dns_0.5" + ports: + - "53:53/udp" + secrets: + - + mode: 0440 + source: forward + target: var/bind/master/alejandro-colomar.com + - + mode: 0440 + source: reverse + target: var/bind/master/10.168 + +version: '3.8' diff --git a/etc/docker/swarm/release/dns-blue.yaml b/etc/docker/swarm/release/dns-blue.yaml deleted file mode 100644 index 1cc4981..0000000 --- a/etc/docker/swarm/release/dns-blue.yaml +++ /dev/null @@ -1,38 +0,0 @@ -######################################################################### -# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # -# SPDX-License-Identifier: GPL-2.0-only # -######################################################################### - -configs: - named: - file: /run/configs/etc/bind/named.conf - -secrets: - forward: - file: /run/secrets/var/bind/master/alejandro-colomar.com - reverse: - file: /run/secrets/var/bind/master/10.168 - -services: - dns: - configs: - - - mode: 0440 - source: named - target: /etc/bind/named.conf - deploy: - mode: global - image: "alejandrocolomar/rob_cam:dns_0.5" - ports: - - "5353:53/udp" - secrets: - - - mode: 0440 - source: forward - target: var/bind/master/alejandro-colomar.com - - - mode: 0440 - source: reverse - target: var/bind/master/10.168 - -version: '3.8' diff --git a/etc/docker/swarm/release/dns.yaml b/etc/docker/swarm/release/dns.yaml deleted file mode 100644 index 173d3a6..0000000 --- a/etc/docker/swarm/release/dns.yaml +++ /dev/null @@ -1,38 +0,0 @@ -######################################################################### -# Copyright (C) 2020 Sebastian Francisco Colomar Bauza # -# SPDX-License-Identifier: GPL-2.0-only # -######################################################################### - -configs: - named: - file: /run/configs/etc/bind/named.conf - -secrets: - forward: - file: /run/secrets/var/bind/master/alejandro-colomar.com - reverse: - file: /run/secrets/var/bind/master/10.168 - -services: - dns: - configs: - - - mode: 0440 - source: named - target: /etc/bind/named.conf - deploy: - mode: global - image: "alejandrocolomar/rob_cam:dns_0.5" - ports: - - "53:53/udp" - secrets: - - - mode: 0440 - source: forward - target: var/bind/master/alejandro-colomar.com - - - mode: 0440 - source: reverse - target: var/bind/master/10.168 - -version: '3.8' -- cgit v1.2.3 From ea78aa8d7e0e8fb9d9889143b8d7be553cb07855 Mon Sep 17 00:00:00 2001 From: Sebastian Colomar Date: Fri, 29 May 2020 23:52:25 +0200 Subject: Fix option for ln --- etc/docker/dns/Dockerfile-devel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/docker/dns/Dockerfile-devel b/etc/docker/dns/Dockerfile-devel index 5e5cb41..622d3bb 100644 --- a/etc/docker/dns/Dockerfile-devel +++ b/etc/docker/dns/Dockerfile-devel @@ -29,7 +29,7 @@ COPY --from=git /repo/run/configs/etc/bind/named.conf \ COPY --from=git /repo/run/secrets/var/bind/master \ /run/secrets/var/bind/master -RUN ln --symbolic /run/secrets/var/bind/master /var/bind +RUN ln -sv /run/secrets/var/bind/master /var/bind CMD ["named", "-c", "/etc/bind/named.conf", "-g"] -- cgit v1.2.3 From a758356e4db8b019c11df8cada48bf6d48fdde72 Mon Sep 17 00:00:00 2001 From: Sebastian Colomar Date: Fri, 29 May 2020 23:53:00 +0200 Subject: Add ln to Dockerfile --- etc/docker/dns/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/etc/docker/dns/Dockerfile b/etc/docker/dns/Dockerfile index 74f4a57..9f9f091 100644 --- a/etc/docker/dns/Dockerfile +++ b/etc/docker/dns/Dockerfile @@ -10,6 +10,8 @@ FROM alpine@sha256:39eda93d15866957feaee28f8fc5adb545276a64147445c64992ef69804db RUN apk add --no-cache --upgrade bind +RUN ln -sv /run/secrets/var/bind/master /var/bind + CMD ["named", "-c", "/etc/bind/named.conf", "-g"] ############################################################################### -- cgit v1.2.3