天天看點

Atlas小車部署Atlas小車部署

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

操作步驟

  1. 将裝入SD卡的讀卡器與使用者PC機的USB接口連接配接。
  2. 在使用者PC機中執行如下指令安裝qemu-user-static、binfmt-support、yaml、squashfs-tools與交叉編譯器。

    切換為root使用者

    su - root

    執行如下指令更新源

    apt-get update

    執行如下指令安裝相關python依賴

    pip3 install pyyaml

    apt-get install qemu-user-static binfmt-support python3-yaml squashfs-tools gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

  3. 在使用者PC機中以root使用者執行如下指令建立制卡工作目錄。

    mkdir $HOME/mksd

  4. 将軟體包準備中的Ubuntu伺服器作業系統鏡像包、開發者闆驅動包上傳到制卡工作目錄中(“$HOME/mksd”)。
  5. 在制卡工作目錄下(“$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

  6. 執行制卡腳本。
    1. 以root使用者執行如下指令查找SD卡所在的USB裝置名稱。

      fdisk -l

      例如,SD卡所在USB裝置名稱為“/dev/sda”,可通過插拔SD卡的方式确定裝置名稱。
    2. 運作SD制卡腳本“make_sd_card.py”

      python3 make_sd_card.py local /dev/sda

      • “local”表示使用本地方式制作SD卡。
      • “/dev/sda”為SD卡所在的USB裝置名稱。

      如圖1所示表示制卡成功。

      圖1 SD制卡回顯資訊示例

      Atlas小車部署Atlas小車部署
  7. 制卡成功後,将SD卡從讀卡器取出并插入Atlas 200 DK開發者闆卡槽。待開發闆四個燈亮起後開發闆正常啟動。(注:首次啟動開發闆的燈可能會閃爍,這是可能是開發闆在更新系統,等待一會兒四個燈就常亮了)

配置網絡(網絡共享方式)

共享PC機網絡方式配置示例

Atlas小車部署Atlas小車部署
  1. 分别使用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接入網際網路。
    說明:以上名字僅為示例,您可以通過拔插網口的方式檢視連接配接Atlas 200 DK的是哪一個網卡。
  2. 在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小車部署Atlas小車部署
    配置完成後,執行如下指令測試下是否能夠登入到Atlas 200 DK:

    ssh [email protected]

  3. 配置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位址能夠通路網關。

    配置方式如下:

    1. 在PC機上以SSH方式登入Atlas 200 DK。

      ssh [email protected]

    2. 切換到root使用者。

      su - root

    3. 配置eth0的網關位址。

      vi /etc/netplan/01-netcfg.yaml

      配置示例如下圖所示:

      Atlas 200 DK eth0網關配置

      Atlas小車部署Atlas小車部署
      儲存退出。按 esc

      :wq!

      注:域名伺服器可以配置為公共DNS“114.114.114.114”或者“8.8.8.8”,請根據實際環境進行選擇配置。
  4. 在PC側進行網絡配置,将網絡共享給Atlas 200 DK。
    1. 将PC機上能夠接入網際網路的網卡進行網絡共享配置,共享給連接配接Atlas 200 DK的網卡。

      如[圖3](javascript:;)所示,能夠接入網際網路的網卡為“Ethernet”,連接配接Atlas 200 DK的網卡為“Ethernet2”。

      右鍵單擊網卡“Ethernet”,然後選擇“Properties > Sharing”,按照下圖所示進行配置。

      圖6 共享網絡配置

      Atlas小車部署Atlas小車部署
    2. 單擊“OK”,儲存配置。
    3. 修改“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

安裝依賴

  1. 執行

    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

  2. 檢查系統是否安裝滿足版本要求的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。
    1. 使用wget下載下傳python3.7.5源碼包,可以下載下傳到安裝環境的任意目錄,指令為:
      wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
                 
    2. 進入下載下傳後的目錄,解壓源碼包,指令為:
      tar -zxvf Python-3.7.5.tgz
                 
    3. 進入解壓後的檔案夾,執行配置、編譯和安裝指令:
      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路徑。

    4. 設定python3.7.5環境變量。
      #用于設定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
                 
      通過以上export方式設定環境變量,該種方式設定的環境變量隻在目前視窗有效。您也可以通過将以上指令寫入~/.bashrc檔案中,然後執行**source /.bashrc**指令,使上述環境變量永久生效。注意如果後續您有使用環境上其他python版本的需求,則不建議将以上指令寫入到/.bashrc檔案中。
    5. 安裝完成之後,執行如下指令檢視安裝版本,如果傳回相關版本資訊,則說明安裝成功。
      python3 --version
      pip3 --version
                 
  3. 安裝前請先使用

    pip3 list

    指令檢查是否安裝相關依賴,若已經安裝,則請跳過該步驟;若未安裝,則安裝指令如下(如果隻有部分軟體未安裝,則如下指令修改為隻安裝還未安裝的軟體即可)。
    • 請在安裝前配置好pip源,具體可參考配置pip源。
    • 安裝前,建議執行指令pip3 install --upgrade pip進行更新,避免因pip版本過低導緻安裝失敗。
    • 如下指令如果使用非root使用者安裝,需要在安裝指令後加上**–user**,例如:pip3 install attrs **–user,**安裝指令可在任意路徑下執行。
    • 要求numpy版本大于等于1.14.3,如下指令以安裝numpy 1.17.2為例。
    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
               
    如果執行上述指令時報錯“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”。

安裝CANN軟體(開發環境與運作環境合設)

  1. 準備軟體包。

    請參見下載下傳連結下載下傳配套驅動版本的開發套件包“Ascend-cann-toolkit_{version}_linux-aarch64.run”。

    驅動與CANN版本的配套關系請參見版本配套說明(Gitee)

  2. 安裝開發套件包。
    1. 以HwHiAiUser使用者将開發套件包上傳到開發闆 /home/HwHiAiUser 目錄,進入該目錄。
    2. 執行如下指令為安裝包增加可執行權限。

      chmod +x \*.run

    3. 執行如下校驗安裝包的一緻性和完整性。

      ./Ascend-cann-toolkit_\*{version}\*_linux-aarch64.run --check

    4. 執行如下指令進行Toolkit軟體包的安裝。

      ./Ascend-cann-toolkit_\*{version}\*_linux-aarch64.run --install --chip=Ascend310-minirc

      以上指令為使用預設路徑進行安裝的示例,預設安裝路徑為“$HOME/Ascend”。
  3. 配置環境變量
    1. 配置環境變量。

      CANN軟體提供程序級環境變量設定腳本,供使用者在程序中引用,以自動完成環境變量設定。使用者程序結束後自動失效。示例如下(以HwHiAiUser使用者預設安裝路徑為例):

      . /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh    
                 
      使用者也可以通過修改~/.bashrc檔案方式設定永久環境變量,操作如下:
      1. 以運作使用者在任意目錄下執行

        vi ~/.bashrc

        指令,打開 .bashrc 檔案,在檔案最後一行後面添加上述内容。
      2. 執行

        :wq!

        指令儲存檔案并退出。
      3. 執行

        source ~/.bashrc

        指令使其立即生效。

安裝ROS

  1. 設定源檔案

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

  2. 設定密鑰

    sudo apt install curl

    # 如果你沒有安裝 curl 執行這一步

    curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

  3. 安裝步驟

    更新源

    sudo apt update

    安裝ROS

    sudo apt install ros-melodic-desktop-full

  4. 環境設定
    echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
    source ~/.bashrc
               
  5. 建構包的依賴

    sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

    初始化 rosdep
    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
           

小車樣例運作

前提條件

  • 已完成對應産品的開發環境和運作環境安裝。(以上步驟都完成即可)
  • 完整的小車,包含各個小車部件,電池,路由器,顯示屏,攝像頭等都已經正确安裝。

軟體準備

  1. 擷取源碼包。(如果第一次使用這個方法要将開發闆的密鑰添加到你的 gitee 賬号上)

    可以使用以下兩種方式下載下傳,請選擇其中一種進行源碼準備。

    • 指令行方式下載下傳(下載下傳時間較長,但步驟簡單)。

      開發環境,非root使用者指令行中執行以下指令下載下傳源碼倉。

      cd $HOME

      git clone https://gitee.com/ascend/samples.git

    • 壓縮包方式下載下傳(下載下傳時間較短,但步驟稍微複雜)。
      1. samples倉右上角選擇 克隆/下載下傳 下拉框并選擇 下載下傳ZIP。
      2. 将ZIP包上傳到開發環境中的普通使用者家目錄中,例如 $HOME/ascend-samples-master.zip。
      3. 開發環境中,執行以下指令,解壓zip包。
cd $HOME
unzip ascend-samples-master.zip
           
  1. 擷取此應用中所需要的原始網絡模型。

    參考下表擷取此應用中所用到的原始網絡模型及其對應的權重檔案,并将其存放到開發環境普通使用者下目錄:$HOME/samples/cplusplus/contrib/Ascbot。

    模型名稱 模型說明
    collision_avoidance_model 檢測小車前方是否有跌落危險
    road_following_model 檢測車道線,實作循道行駛
    road_object_detection_deploy 檢測小車前方物體
  2. 部署模型

    cd $HOME/samples/cplusplus/contrib/Ascbot/model

    擷取 collision_avoidance_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_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%2Ffollowing%2Froad_following_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%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  
               

樣例部署

  1. 開發環境指令行中設定編譯依賴的環境變量。
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
           
  1. 切換到ascbot_c75目錄,建立目錄用于存放編譯檔案,例如,本文中,建立的目錄為 build/intermediates/host。
cd $HOME/samples/cplusplus/contrib/Ascbot
mkdir -p build/intermediates/host
           
  1. 切換到 build/intermediates/host 目錄,執行 cmake 生成編譯檔案。
cd build/intermediates/host
make clean        
cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE**
           
  1. 執行make指令

    make

樣例運作

  1. 設定環境

    切換為 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
           
  1. 運作可執行檔案。

    cd $HOME/samples/cplusplus/contrib/Ascbot/out

    切換目錄後,執行以下指令運作樣例。

    ./main Channel-0

檢視結果

運作完成後,可下載下傳手機端應用控制小車運作。 手機端下載下傳位址