ARG from=ros:noetic FROM ${from} # install build tools # RUN apt-get update && apt-get install -y \ # python-catkin-tools \ # && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y python3-pip git ca-certificates RUN apt-get update && apt-get install -y libsdl2-dev libusb-1.0-0-dev build-essential cmake ffmpeg python3-opencv libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavresample-dev libavutil-dev libpostproc-dev libswresample-dev libswscale-dev iputils-ping net-tools openssh-server sudo nano ros-noetic-cv-bridge v4l-utils RUN apt-get update && apt-get install -y ros-noetic-tf RUN pip3 install git+https://github.com/catkin/catkin_tools.git RUN pip install opencv-python RUN pip install pyproj # set up udev and usb stuff WORKDIR /opt RUN mkdir -p /etc/udev/rules.d && touch /etc/udev/rules.d/DJIDevice.rules \ && echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="2ca3", MODE="0666"' >> /etc/udev/rules.d/DJIDevice.rules \ && echo 'SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="dji_usb"' >> /etc/udev/rules.d/DJIDevice.rules # && usermod -a -G dialout $USER # clone and install the onboard sdk first RUN git clone http://git.caslab.ece.vt.edu/hlarkin3/onboard-sdk-arm.git RUN mkdir onboard-sdk-arm/build WORKDIR /opt/onboard-sdk-arm/build RUN cmake .. \ && make -j4\ && make install\ && cp ../sample/platform/linux/common/UserConfig.txt bin/ \ && echo "app_id : 1069806" > bin/UserConfig.txt \ && echo "app_key : e180b993ca8365653437fbafe7211ba040386d77c3c87627882857a11bd8efbd" >> bin/UserConfig.txt \ && echo "device : /dev/dji_usb" >> bin/UserConfig.txt \ && echo "baudrate : 921600" >> bin/UserConfig.txt \ && echo "acm_port : /dev/ttyACM0" >> bin/UserConfig.txt \ && cp bin/UserConfig.txt /root/.ros/UserConfig.txt # clone eigen into correct location and rename WORKDIR /usr/local/include/ RUN git clone https://github.com/libigl/eigen.git && mv eigen/ Eigen3/ && cp -r ./Eigen3/Eigen/ ./Eigen/ RUN echo "refreshest" # clone ros package repo ENV ROS_WS /opt/ros_ws RUN mkdir -p $ROS_WS/src WORKDIR $ROS_WS RUN git -C src clone http://git.caslab.ece.vt.edu/hlarkin3/drone-ros-packages.git -b replicants WORKDIR $ROS_WS/src/drone-ros-packages RUN git submodule init && git submodule update WORKDIR $ROS_WS ENV ROS_IP service-drone # install ros package dependencies RUN apt-get update && \ rosdep update && \ rosdep install -y --from-paths src/* --ignore-src && \ rm -rf /var/lib/apt/lists/* # build ros package source RUN catkin config \ --extend /opt/ros/$ROS_DISTRO && \ catkin build --cmake-args -DCMAKE_CXX_FLAGS="-std=c++17" # \ # roscpp_tutorials COPY bashCheckRoscore.sh /usr/local/bin/bashCheckRoscore.sh COPY ros_entrypoint.sh /usr/local/bin/ros_entrypoint.sh RUN useradd -m -s /bin/bash -p $(openssl passwd -1 password) ssher RUN usermod -aG sudo ssher # add ssher user to the video group to allow streaming RUN adduser ssher video RUN usermod -a -G video ssher RUN chmod 755 /usr/local/bin/bashCheckRoscore.sh && chmod 755 /usr/local/bin/ros_entrypoint.sh # make ssh-ing easier RUN echo "source /opt/ros/noetic/setup.bash" >> /home/ssher/.bashrc RUN echo "source /opt/ros_ws/devel/setup.bash" >> /home/ssher/.bashrc # also need to put env variables in here RUN echo "ssh-keyscan -H service-master >> /home/ssher/.ssh/known_hosts" >> /home/ssher/.bashrc RUN echo "ssh-keyscan -H service-drone >> /home/ssher/.ssh/known_hosts" >> /home/ssher/.bashrc # these will be run with env loader but also nice to have from an ssh RUN echo "export ROS_MASTER_URI=http://service-master:11311" >> /home/ssher/.bashrc RUN echo "export ROS_HOSTNAME=service-drone" >> /home/ssher/.bashrc # put environment file in ros folder, to be referenced by base station machines.launch file RUN touch /opt/ros/noetic/kube_setup.sh \ && echo "#!/bin/bash" > /opt/ros/noetic/kube_setup.sh \ && echo "export ROS_WS=/opt/ros_ws" >> /opt/ros/noetic/kube_setup.sh \ && echo "source /opt/ros_ws/devel/setup.bash" >> /opt/ros/noetic/kube_setup.sh \ && echo "export PATH=/opt/ros/noetic/share/ros/bin:/opt/ros/noetic/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" >> /opt/ros/noetic/kube_setup.sh \ && echo "export ROS_PACKAGE_PATH=/opt/ros_ws/src/drone-ros-packages/audio_common/audio_common:/opt/ros_ws/src/drone-ros-packages/audio_common/audio_common_msgs:/opt/ros_ws/src/drone-ros-packages/audio_common/audio_capture:/opt/ros_ws/src/drone-ros-packages/audio_common/audio_play:/opt/ros_ws/src/drone-ros-packages/Onboard-SDK-ROS:/opt/ros_ws/src/drone-ros-packages/position_sync:/opt/ros_ws/src/drone-ros-packages/puredata:/opt/ros_ws/src/drone-ros-packages/audio_common/sound_play:/opt/ros/noetic/share:/opt/ros_ws" >> /opt/ros/noetic/kube_setup.sh \ && echo "export ROS_MASTER_URI=http://service-master:11311" >> /opt/ros/noetic/kube_setup.sh \ && echo "export ROS_HOSTNAME=service-drone" >> /opt/ros/noetic/kube_setup.sh \ && echo 'exec "$@"' >> /opt/ros/noetic/kube_setup.sh # also need to own and execute said setup file RUN chown ssher /opt/ros/noetic/kube_setup.sh \ && chmod +x /opt/ros/noetic/kube_setup.sh # make spot for the video feed to come in # RUN mkdir -p /dev/videoSource # set up ssh stuff RUN mkdir -p /home/ssher/.ssh RUN chown -R ssher:ssher /home/ssher/.ssh RUN service ssh start EXPOSE 22 ENTRYPOINT ["/usr/local/bin/ros_entrypoint.sh"] CMD ["/usr/sbin/sshd","-D"] CMD ["bash"] # run ros package launch file # CMD ["roslaunch", "roscpp_tutorials", "talker_listener.launch"]