硬件环境

NVIDIA Jetson AGX Xavier Developer Kit (32GB)

  • GPU 搭载 Tensor Core 的 512 核 Volta GPU
  • CPU 8 核 ARM v8.2 64 位 CPU、8 MB L2 + 4 MB L3
  • 内存 32 GB 256 位 LPDDR4x | 137 GB/秒
  • 存储 32 GB eMMC 5.1
  • PCIe X16 X8 PCIe Gen4/x8 SLVS-EC
  • RJ45 千兆以太网
  • USB-C 2 个 USB 3.1 接口、DP 接口(可选)、PD 接口(可选) 可通过同一端口支持封闭系统调试和烧写
  • 摄像头接口 (16 个)CSI-2 通道
  • M.2 Key M NVMe
  • M.2 Key E PCIe x1 + USB 2.0 + UART (for Wi-Fi/LTE) / I2S + DMIC + GPIOs
  • 40 针接头 UART + SPI + CAN + I2 C + I2 S + DMIC + GPIOs
  • 高清音频接头 高清音频
  • eSTATp + USB 3.0 Type A 借助 PCIe x1 桥接器的 SATA 接口 + USB 3.0(PD + 适用于 2.5 英寸 SATA 接口的数据)
  • HDMI Type A HDMI 2.0
  • µSD/UFS 卡座 SD/UFS

软件环境

  • jetson4.4
  • vnc & xface
  • ros
  • osqp & qpOASES
  • cuda10.2
  • pcan8.10
  • tensorrt7.1
  • opencv4.1

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
FROM arm64v8/ubuntu:18.04

COPY file/clean-layer.sh /usr/bin/clean-layer.sh

RUN chmod +x /usr/bin/clean-layer.sh \
&& /usr/bin/clean-layer.sh \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone

#COPY file
ADD file/1_sys_config.sh /tmp/
RUN apt-get update \
&& apt-get install -y vim busybox net-tools iputils-ping iproute2 gpg apt-utils locales \
&& sh /tmp/1_sys_config.sh \
&& /usr/bin/clean-layer.sh

#Install VNC&XFCE
RUN gpg --keyserver keyserver.ubuntu.com --recv F42ED6FBAB17C888 \
&& gpg --export --armor F42ED6FBAB17C888 | apt-key add - \
&& sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
&& locale-gen \
&& dpkg-reconfigure --frontend=noninteractive locales \
&& update-locale LANG=en_US.UTF-8 \
&& apt-get update \
&& apt-get install -y xfce4 xfce4-terminal tigervnc-standalone-server \
&& bash -c "yes | apt-get install -y sudo" \
&& /usr/bin/clean-layer.sh

RUN echo "user" | adduser autopolit && \
echo "autopolit ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
usermod -aG dialout autopolit
# Install ros
ADD file/ros.key /tmp/ros.key
RUN apt-key add /tmp/ros.key \
&& apt-get update \
&& apt install -y ros-melodic-desktop-full \
ros-melodic-cv-bridge ros-melodic-abseil-cpp \
python-rosdep libgoogle-glog-dev libpcap-dev \
python3-qtpy python3-pip \
libopenblas-dev liblapacke-dev \
cmake libavcodec-dev libavformat-dev libavutil-dev \
libeigen3-dev libglew-dev libgtk2.0-dev libgtk-3-dev \
libjpeg-dev libpng-dev libpostproc-dev libswscale-dev \
libtbb-dev libtiff5-dev libv4l-dev libxvidcore-dev \
libx264-dev qt5-default \
zlib1g-dev libgl1 libglvnd-dev pkg-config \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
python-simplejson python-pip exfat-utils \
&& /usr/bin/clean-layer.sh

RUN sudo -H pip3 install jetson-stats rosdep \
&& sudo pip install google protobuf \
&& ln -s /usr/bin/vtk6 /usr/bin/vtk \
&& ln -s /usr/lib/aarch64-linux-gnu/python2.7/site-packages/vtk/libvtkRenderingPythonTkWidgets.aarch64-linux-gnu.so /usr/lib/aarch64-linux-gnu/libvtkRenderingPythonTkWidgets.so

#安装中文字体
RUN apt-get update \
&& apt-get install -y fonts-droid-fallback ttf-wqy-zenhei ttf-wqy-microhei fonts-arphic-ukai fonts-arphic-uming \
&& /usr/bin/clean-layer.sh

# Install osqp & qpOASES
ADD tools/osqp.zip /tmp/osqp.zip
ADD tools/qpOASES-3.2.1.zip /tmp/qpOASES.zip
RUN cd /tmp \
&& unzip osqp.zip \
&& unzip qpOASES.zip \
&& cd /tmp/osqp \
&& bash install.sh \
&& cd /tmp/qpOASES-3.2.1 \
&& mkdir build \
&& cd build \
&& cmake .. \
&& make install \
&& cd / \
&& rm -rf /tmp/*
# Install cuda
ADD tools/cuda /tmp/
RUN dpkg -i /tmp/*.deb \
&& apt-key add /var/cuda-repo-10-2-local-10.2.89/7fa2af80.pub \
&& apt-get update \
&& apt-get install cuda-toolkit-10.2 -y \
&& echo "export PATH=/usr/local/cuda/bin:$PATH" >> /home/autopolit/.bashrc \
&& echo "export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH" >> /home/autopolit/.bashrc \
&& echo "export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH" >> /home/autopolit/.bashrc \
&& echo "source /opt/ros/melodic/setup.bash" >> /home/autopolit/.bashrc \
&& rm -rf /tmp/* \
&& /usr/bin/clean-layer.sh

# Install pcan
ADD file/linux-headers-4.9.140-tegra /usr/src/linux-headers-4.9.140-tegra/
ADD file/pcanlib/etc/modules.conf.local /etc/
ADD file/pcanlib/lib/modules/4.9.140-tegra /lib/modules/4.9.140-tegra/
ADD file/pcanlib/usr/include /usr/include/
ADD file/pcanlib/usr/lib /usr/lib/
ADD file/pcanlib/usr/local/bin /usr/local/bin/
ADD tools/peak-linux-driver-8.10.2.tar.gz /tmp/
ADD file/tegra /usr/lib/aarch64-linux-gnu/tegra/
RUN echo "/usr/lib/aarch64-linux-gnu/tegra" >> /etc/ld.so.conf.d/aarch64-linux-gnu.conf \
&& ldconfig
RUN apt-get update \
&& apt-get install -y kmod libpopt-dev \
&& cd /tmp/peak-linux-driver-8.10.2 \
&& make all NET=NO PCI=NO ISA=NO DNG=NO PCC=NO \
&& modprobe pcan \
&& rm -rf /tmp/* \
&& /usr/bin/clean-layer.sh

#Install opencv
ADD tools/build_opencv /tmp/
RUN cd /tmp \
&& ./buildOpenCV.sh \
&& rm -rf /tmp/*

# lib
ADD tools/libnvinfer-dev_7.1.3-1+cuda10.2_arm64.deb /tmp/
ADD tools/libnvinfer7_7.1.3-1+cuda10.2_arm64.deb /tmp/
RUN dpkg -i /tmp/*.deb \
&& rm -rf /tmp/*

#Install tensorrt
ADD tools/tensorrt /tmp
RUN dpkg -i /tmp/libnv* \
&& dpkg -i /tmp/tensorrt_7.1.3.0-1+cuda10.2_arm64.deb \
&& rm -rf /tmp/*


#添加VNC文件,设置环境变量
ADD file/xstartup /autocar-code/xstartup
ADD file/passwd /autocar-code/passwd
ADD file/.Xauthority /autocar-code/.Xauthority
RUN mkdir /home/autopolit/.vnc \
&& cp /autocar-code/passwd /home/autopolit/.vnc/ \
&& cp /autocar-code/xstartup /home/autopolit/.vnc/ \
&& cp /autocar-code/.Xauthority /home/autopolit/ \
&& chown -R autopolit:autopolit /home/autopolit \
&& chown -R autopolit:autopolit /autocar-code