Atlas小車部署
制卡
硬體準備
SD卡(建議64G)、讀卡器、已在虛拟機中安裝ubuntu-18.04桌面作業系統的PC機
軟體準備
Ubuntu伺服器作業系統鏡像包
ubuntu-18.04.xx-server-arm64.iso
開發者闆驅動包
A200dk-npu-driver-{software version}-ubuntu18.04-aarch64-minirc.tar.gz
操作步驟
- 将裝入SD卡的讀卡器與使用者PC機的USB接口連接配接。
-
在使用者PC機中執行如下指令安裝qemu-user-static、binfmt-support、yaml、squashfs-tools與交叉編譯器。
切換為root使用者
執行如下指令更新源su - root
執行如下指令安裝相關python依賴apt-get update
pip3 install pyyaml
apt-get install qemu-user-static binfmt-support python3-yaml squashfs-tools gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
- 在使用者PC機中以root使用者執行如下指令建立制卡工作目錄。
mkdir $HOME/mksd
- 将軟體包準備中的Ubuntu伺服器作業系統鏡像包、開發者闆驅動包上傳到制卡工作目錄中(“$HOME/mksd”)。
- 在制卡工作目錄下(“$HOME/mksd”)執行如下指令擷取制卡腳本。
- 下載下傳制卡入口腳本“make_sd_card.py”
wget https://gitee.com/ascend/tools/raw/master/makesd/generic_script/make_sd_card.py
- 下載下傳制作SD卡作業系統的腳本“make_ubuntu_sd.sh”
wget https://gitee.com/ascend/tools/raw/master/makesd/generic_script/make_ubuntu_sd.sh
- 下載下傳制卡入口腳本“make_sd_card.py”
- 執行制卡腳本。
- 以root使用者執行如下指令查找SD卡所在的USB裝置名稱。
例如,SD卡所在USB裝置名稱為“/dev/sda”,可通過插拔SD卡的方式确定裝置名稱。fdisk -l
- 運作SD制卡腳本“make_sd_card.py”
python3 make_sd_card.py local /dev/sda
- “local”表示使用本地方式制作SD卡。
- “/dev/sda”為SD卡所在的USB裝置名稱。
如圖1所示表示制卡成功。
圖1 SD制卡回顯資訊示例
Atlas小車部署Atlas小車部署
- 以root使用者執行如下指令查找SD卡所在的USB裝置名稱。
- 制卡成功後,将SD卡從讀卡器取出并插入Atlas 200 DK開發者闆卡槽。待開發闆四個燈亮起後開發闆正常啟動。(注:首次啟動開發闆的燈可能會閃爍,這是可能是開發闆在更新系統,等待一會兒四個燈就常亮了)
配置網絡(網絡共享方式)
共享PC機網絡方式配置示例
-
分别使用USB連接配接線及網線将Atlas 200 DK與PC機連接配接。
PC機中的“網絡連接配接”顯示如下圖所示:
圖3 網絡連接配接圖示
Atlas小車部署Atlas小車部署 - “Local connection(本地連接配接) ”:USB虛拟網卡,此連接配接為基本連接配接,用于從PC側SSH登入到Atlas 200 DK。
- “Ethernet2(以太網2)”:通過網線連接配接Atlas 200 DK的NIC網卡,後續将使用此網卡作為網關,用于Atlas 200 DK接入網際網路。
-
在PC機上配置USB虛拟網卡,使其可以通過SSH方式登入Atlas 200 DK。
配置USB虛拟網卡的IP位址,IP位址需要與Atlas 200 DK的USB網卡的預設IP位址在同一網段。
Atlas 200 DK的USB網卡預設IP為“192.168.1.2”,例如配置PC機的USB虛拟網卡的IP位址為“192.168.1.101”,如下圖所示:
圖4 修改PC機側USB虛拟網卡IP位址示例
配置完成後,執行如下指令測試下是否能夠登入到Atlas 200 DK:Atlas小車部署Atlas小車部署 ssh [email protected]
-
配置Atlas 200 DK的eth0網卡的網關。
Atlas 200 DK中eth0網卡的網關與eth0 IP位址在同一網段即可,例如Atlas 200 DK的eth0的預設IP位址為“192.168.0.2”,則此處可以配置eth0的網關為“192.168.0.101”。
**說明:**Atlas 200 DK通過網絡共享接入網絡的方式,資料走eth0,然後通過網關通路網絡,是以需要確定eth0的IP位址能夠通路網關。
配置方式如下:
- 在PC機上以SSH方式登入Atlas 200 DK。
ssh [email protected]
- 切換到root使用者。
su - root
- 配置eth0的網關位址。
vi /etc/netplan/01-netcfg.yaml
配置示例如下圖所示:
Atlas 200 DK eth0網關配置
儲存退出。按 escAtlas小車部署Atlas小車部署
注:域名伺服器可以配置為公共DNS“114.114.114.114”或者“8.8.8.8”,請根據實際環境進行選擇配置。:wq!
- 在PC機上以SSH方式登入Atlas 200 DK。
- 在PC側進行網絡配置,将網絡共享給Atlas 200 DK。
-
将PC機上能夠接入網際網路的網卡進行網絡共享配置,共享給連接配接Atlas 200 DK的網卡。
如[圖3](javascript:;)所示,能夠接入網際網路的網卡為“Ethernet”,連接配接Atlas 200 DK的網卡為“Ethernet2”。
右鍵單擊網卡“Ethernet”,然後選擇“Properties > Sharing”,按照下圖所示進行配置。
圖6 共享網絡配置
Atlas小車部署Atlas小車部署 - 單擊“OK”,儲存配置。
-
修改“Ethernet2”的IP位址為Atlas 200 DK eth0網關的IP位址(例如,
圖5
中配置的“192.168.0.101”)。
修改方法如下圖所示,至此,您的Atlas 200 DK已可以接入網際網路。
Ethernet2 IP位址修改
Atlas小車部署Atlas小車部署
-
安裝OS依賴
将使用者添加到sudo組
方法一(臨時有效):
usermod -a -G sudo HwHiAiUser
方法二(永久有效):
修改
/etc/sudoers
檔案
cd /etc/sudoers
目錄下
由于sudoers檔案為隻讀權限,是以需要添加寫入權限
chmod u+w sudoers
vim sudoers
找到 root ALL = (ALL) ALL 這一行,在其下一行加入 HwHiAiUser ALL = (ALL) ALL
儲存退出
:wq!
把sudoers檔案的權限修改回來
chmod u-w sudoers
更換開發闆鏡像源
執行以下換源操作
sudo wget -O /etc/apt/sources.list https://repo.huaweicloud.com/repository/conf/Ubuntu-Ports-bionic.list --no-check-certificate
更新源
sudo apt-get update
安裝依賴
- 執行
sudo apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 libopenblas-dev
-
檢查系統是否安裝滿足版本要求的python開發環境。
在目前安裝使用者下執行指令
。python3 --version
- 如果傳回資訊滿足python版本要求(3.7.0~ 3.7.11),則直接進入步驟3。
- 如果傳回資訊不滿足滿足python版本要求(3.7.0~ 3.7.11):
- 當環境上root使用者下已安裝滿足要求的python版本(3.7.0~ 3.7.11)時,如果目前安裝使用者需要複用該python,則可以直接參考[設定python3.7.5環境變量](javascript:;)配置環境變量。
- 當環境上未安裝滿足要求的python版本(3.7.0~ 3.7.11)時,則可以參考如下步驟安裝python。
- 使用wget下載下傳python3.7.5源碼包,可以下載下傳到安裝環境的任意目錄,指令為:
wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
- 進入下載下傳後的目錄,解壓源碼包,指令為:
tar -zxvf Python-3.7.5.tgz
- 進入解壓後的檔案夾,執行配置、編譯和安裝指令:
cd Python-3.7.5 ./configure --prefix=/usr/local/python3.7.5 --enable-loadable-sqlite-extensions --enable-shared make sudo make install
其中“–prefix”參數用于指定python安裝路徑,使用者根據實際情況進行修改。“–enable-shared”參數用于編譯出libpython3.7m.so.1.0動态庫。“–enable-loadable-sqlite-extensions”參數用于加載libsqlite3-dev依賴。
本手冊以–prefix=/usr/local/python3.7.5路徑為例進行說明。執行配置、編譯和安裝指令後,安裝包在/usr/local/python3.7.5路徑,libpython3.7m.so.1.0動态庫在/usr/local/python3.7.5/lib/libpython3.7m.so.1.0路徑。
- 設定python3.7.5環境變量。
通過以上export方式設定環境變量,該種方式設定的環境變量隻在目前視窗有效。您也可以通過将以上指令寫入~/.bashrc檔案中,然後執行**source /.bashrc**指令,使上述環境變量永久生效。注意如果後續您有使用環境上其他python版本的需求,則不建議将以上指令寫入到/.bashrc檔案中。#用于設定python3.7.5庫檔案路徑 export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH #如果使用者環境存在多個python3版本,則指定使用python3.7.5版本 export PATH=/usr/local/python3.7.5/bin:$PATH
- 安裝完成之後,執行如下指令檢視安裝版本,如果傳回相關版本資訊,則說明安裝成功。
python3 --version pip3 --version
- 安裝前請先使用
指令檢查是否安裝相關依賴,若已經安裝,則請跳過該步驟;若未安裝,則安裝指令如下(如果隻有部分軟體未安裝,則如下指令修改為隻安裝還未安裝的軟體即可)。pip3 list
- 請在安裝前配置好pip源,具體可參考配置pip源。
- 安裝前,建議執行指令pip3 install --upgrade pip進行更新,避免因pip版本過低導緻安裝失敗。
- 如下指令如果使用非root使用者安裝,需要在安裝指令後加上**–user**,例如:pip3 install attrs **–user,**安裝指令可在任意路徑下執行。
- 要求numpy版本大于等于1.14.3,如下指令以安裝numpy 1.17.2為例。
如果執行上述指令時報錯“subprocess.CalledProcessError:Command ‘(‘lsb_release’, ‘-a’)’ return non-zero exit status 1”,請參見pip3 install報錯“subprocess.CalledProcessError:Command ‘(‘lsb_release’, ‘-a’)’ return non-zero exit status 1”。pip3 install attrs pip3 install numpy==1.17.2 pip3 install decorator pip3 install sympy pip3 install cffi pip3 install pyyaml pip3 install pathlib2 pip3 install psutil pip3 install protobuf pip3 install scipy pip3 install requests
安裝CANN軟體(開發環境與運作環境合設)
-
準備軟體包。
請參見下載下傳連結下載下傳配套驅動版本的開發套件包“Ascend-cann-toolkit_{version}_linux-aarch64.run”。
驅動與CANN版本的配套關系請參見版本配套說明(Gitee)
- 安裝開發套件包。
- 以HwHiAiUser使用者将開發套件包上傳到開發闆 /home/HwHiAiUser 目錄,進入該目錄。
- 執行如下指令為安裝包增加可執行權限。
chmod +x \*.run
- 執行如下校驗安裝包的一緻性和完整性。
./Ascend-cann-toolkit_\*{version}\*_linux-aarch64.run --check
- 執行如下指令進行Toolkit軟體包的安裝。
以上指令為使用預設路徑進行安裝的示例,預設安裝路徑為“$HOME/Ascend”。./Ascend-cann-toolkit_\*{version}\*_linux-aarch64.run --install --chip=Ascend310-minirc
- 配置環境變量
-
配置環境變量。
CANN軟體提供程序級環境變量設定腳本,供使用者在程序中引用,以自動完成環境變量設定。使用者程序結束後自動失效。示例如下(以HwHiAiUser使用者預設安裝路徑為例):
使用者也可以通過修改~/.bashrc檔案方式設定永久環境變量,操作如下:. /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh
- 以運作使用者在任意目錄下執行
指令,打開 .bashrc 檔案,在檔案最後一行後面添加上述内容。vi ~/.bashrc
- 執行
指令儲存檔案并退出。:wq!
- 執行
指令使其立即生效。source ~/.bashrc
- 以運作使用者在任意目錄下執行
-
安裝ROS
- 設定源檔案
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- 設定密鑰
# 如果你沒有安裝 curl 執行這一步sudo apt install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
-
安裝步驟
更新源
安裝ROSsudo apt update
sudo apt install ros-melodic-desktop-full
- 環境設定
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc
- 建構包的依賴
初始化 rosdepsudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
sudo apt install python-rosdep sudo rosdep init rosdep update
安裝其他第三方依賴
昇騰AI裝置安裝開發環境,同時作為運作環境場景下的第三方依賴安裝
以下步驟以普通使用者HwHiAiUser安裝
安裝準備
請執行以下指令進行安裝準備
# 以安裝使用者在任意目錄下執行以下指令,打開.bashrc檔案。
vi ~/.bashrc
# 在檔案最後一行後面添加如下内容。
export CPU_ARCH=`arch`
export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} #代碼編譯時連結第三方庫
export LD_LIBRARY_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH}/lib:$LD_LIBRARY_PATH #運作時連結庫檔案
export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest #CANN軟體安裝後檔案存儲路徑
# 執行指令儲存檔案并退出。
:wq!
# 執行指令使其立即生效。
source ~/.bashrc
# 建立第三方依賴檔案夾
mkdir -p ${THIRDPART_PATH}
# 下載下傳源碼并安裝git
cd ${HOME}
sudo apt-get install git
git clone https://gitee.com/ascend/samples.git
# 拷貝公共檔案到第三方路徑中
cp -r ${HOME}/samples/common ${THIRDPART_PATH}
如果是200DK場景還需要執行以下指令拷貝media_mini等so檔案以及相關頭檔案,滿足攝像頭樣例編譯需要。
mkdir -p ${INSTALL_DIR}/driver
cp /usr/lib64/libmedia_mini.so ${INSTALL_DIR}/driver/
cp /usr/lib64/libslog.so ${INSTALL_DIR}/driver/
cp /usr/lib64/libc_sec.so ${INSTALL_DIR}/driver/
cp /usr/lib64/libmmpa.so ${INSTALL_DIR}/driver/
cp /usr/local/Ascend/include/peripheral_api.h ${INSTALL_DIR}/driver/
安裝過程
安裝opencv
執行以下指令安裝opencv,如果代碼中并沒有使用opencv相關功能及函數,可以跳過此步驟。
sudo apt-get install libopencv-dev
安裝ffmpeg+acllite庫
執行以下指令源碼安裝ffmpeg(apt安裝的ffmpeg版本較低,是以源碼安裝)并安裝acllite。如果代碼中并沒有使用acllite庫相關功能及函數,可以跳過此步驟。
# 下載下傳ffmpeg
cd ${HOME}
wget http://www.ffmpeg.org/releases/ffmpeg-4.1.3.tar.gz --no-check-certificate
tar -zxvf ffmpeg-4.1.3.tar.gz
cd ffmpeg-4.1.3
# 安裝ffmpeg
./configure --enable-shared --enable-pic --enable-static --disable-x86asm --prefix=${THIRDPART_PATH}
make -j8
make install
# 編譯并安裝acllite
cd ${HOME}/samples/cplusplus/common/acllite/
make
make install
安裝presentagent
執行以下指令源碼安裝protobuf及presentagent。如果代碼中并沒有使用presentagent相關功能及函數,可以跳過此步驟。
開始安裝protobuf及presentagent。
# 安裝protobuf相關依賴
sudo apt-get install autoconf automake libtool
# 下載下傳protobuf源碼
cd ${HOME}
git clone -b 3.13.x https://gitee.com/mirrors/protobufsource.git protobuf
# 編譯安裝protobuf
cd protobuf
./autogen.sh
./configure --prefix=${THIRDPART_PATH}
make clean
make -j8
sudo make install
# 進入presentagent源碼目錄并編譯
cd ${HOME}/samples/cplusplus/common/presenteragent/proto
${THIRDPART_PATH}/bin/protoc presenter_message.proto --cpp_out=./
# 開始編譯presentagnet
cd ..
make -j8
make install
小車樣例運作
前提條件
- 已完成對應産品的開發環境和運作環境安裝。(以上步驟都完成即可)
- 完整的小車,包含各個小車部件,電池,路由器,顯示屏,攝像頭等都已經正确安裝。
軟體準備
-
擷取源碼包。(如果第一次使用這個方法要将開發闆的密鑰添加到你的 gitee 賬号上)
可以使用以下兩種方式下載下傳,請選擇其中一種進行源碼準備。
-
指令行方式下載下傳(下載下傳時間較長,但步驟簡單)。
開發環境,非root使用者指令行中執行以下指令下載下傳源碼倉。
cd $HOME
git clone https://gitee.com/ascend/samples.git
- 壓縮包方式下載下傳(下載下傳時間較短,但步驟稍微複雜)。
- samples倉右上角選擇 克隆/下載下傳 下拉框并選擇 下載下傳ZIP。
- 将ZIP包上傳到開發環境中的普通使用者家目錄中,例如 $HOME/ascend-samples-master.zip。
- 開發環境中,執行以下指令,解壓zip包。
-
cd $HOME
unzip ascend-samples-master.zip
-
擷取此應用中所需要的原始網絡模型。
參考下表擷取此應用中所用到的原始網絡模型及其對應的權重檔案,并将其存放到開發環境普通使用者下目錄:$HOME/samples/cplusplus/contrib/Ascbot。
模型名稱 模型說明 collision_avoidance_model 檢測小車前方是否有跌落危險 road_following_model 檢測車道線,實作循道行駛 road_object_detection_deploy 檢測小車前方物體 - 部署模型
擷取 collision_avoidance_model 模型cd $HOME/samples/cplusplus/contrib/Ascbot/model
擷取 road_following_model 模型wget https://gitee.com/link?target=https%3A%2F%2Fmodelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com%2F003_Atc_Models%2FAE%2FATC%2520Model%2Fcar%2Fcollision%2Fcollision_avoidance_model.om
擷取 road_object_detection_deploy 模型wget https://gitee.com/link?target=https%3A%2F%2Fmodelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com%2F003_Atc_Models%2FAE%2FATC%2520Model%2Fcar%2Ffollowing%2Froad_following_model.om
wget https://gitee.com/link?target=https%3A%2F%2Fmodelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com%2F003_Atc_Models%2FAE%2FATC%2520Model%2Fcar%2Fobject_detection%2Froad_object_detection_deploy.om
設定LD_LIBRARY_PATH環境變量。
由于LD_LIBRARY_PATH環境變量在轉使用atc工具和運作樣例時會産生沖突,是以需要在指令行單獨設定此環境變量,友善修改。
export install_path=$HOME/Ascend/ascend-toolkit/latest export LD_LIBRARY_PATH=\\${install_path}/atc/lib64
樣例部署
- 開發環境指令行中設定編譯依賴的環境變量。
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest/arm64-linux:$DDK_PATH
export NPU_HOST_LIB=$DDK_PATH/acllib/lib64/stub:${install_path}/arm64-linux/acllib/lib64/stub:$NPU_HOST_LIB
- 切換到ascbot_c75目錄,建立目錄用于存放編譯檔案,例如,本文中,建立的目錄為 build/intermediates/host。
cd $HOME/samples/cplusplus/contrib/Ascbot
mkdir -p build/intermediates/host
- 切換到 build/intermediates/host 目錄,執行 cmake 生成編譯檔案。
cd build/intermediates/host
make clean
cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE**
- 執行make指令
make
樣例運作
-
設定環境
切換為 root
執行如下指令su - root
vim /etc/rc.local
添加以下指令
echo 504 >/sys/class/gpio/export
echo 444 >/sys/class/gpio/export
chown -R HwHiAiUser /sys/class/gpio/gpio444
chown -R HwHiAiUser /sys/class/gpio/gpio504
chown -R HwHiAiUser /sys/class/gpio/gpio444/direction
chown -R HwHiAiUser /sys/class/gpio/gpio504/direction
chown -R HwHiAiUser /sys/class/gpio/gpio444/value
chown -R HwHiAiUser /sys/class/gpio/gpio504/value
chown -R HwHiAiUser /dev/i2c-1
chown -R HwHiAiUser /dev/i2c-2
chown -R HwHiAiUser /dev/ttyAMA0
usermod -aG HwHiAiUser HwHiAiUser
- 運作可執行檔案。
切換目錄後,執行以下指令運作樣例。cd $HOME/samples/cplusplus/contrib/Ascbot/out
./main Channel-0
檢視結果
運作完成後,可下載下傳手機端應用控制小車運作。 手機端下載下傳位址