2019年11月18日 星期一

apt-get update異常處理

1. 問題描述

系統環境:Ubuntu 18.04.3 LTS

執行apt-get update更新時遇到如下狀況

錯誤訊息:
Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
  Could not resolve 'security.ubuntu.com'
Err:2 http://tw.archive.ubuntu.com/ubuntu bionic InRelease               
  Could not resolve 'tw.archive.ubuntu.com'
Err:3 http://packages.ros.org/ros/ubuntu bionic InRelease                
  Could not resolve 'packages.ros.org'
Err:4 http://tw.archive.ubuntu.com/ubuntu bionic-updates InRelease
  Could not resolve 'tw.archive.ubuntu.com'
Err:5 http://tw.archive.ubuntu.com/ubuntu bionic-backports InRelease
  Could not resolve 'tw.archive.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://tw.archive.ubuntu.com/ubuntu/dists/bionic/InRelease  Could not resolve 'tw.archive.ubuntu.com'
W: Failed to fetch http://tw.archive.ubuntu.com/ubuntu/dists/bionic-updates/InRelease  Could not resolve 'tw.archive.ubuntu.com'
W: Failed to fetch http://tw.archive.ubuntu.com/ubuntu/dists/bionic-backports/InRelease  Could not resolve 'tw.archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease  Could not resolve 'security.ubuntu.com'
W: Failed to fetch http://packages.ros.org/ros/ubuntu/dists/bionic/InRelease  Could not resolve 'packages.ros.org'
W: Some index files failed to download. They have been ignored, or old ones used instead.


2. 解決方法

Linux Force DHCP client (dhclient) to renew ip address

Linux renew ip command
$ sudo dhclient -r //release ip 釋出IP
$ sudo dhclient //獲取IP


Now obtain fresh IP:
$ sudo dhclient

$ sudo ifdown eth0
$ sudo ifup eth0
$ sudo /etc/init.d/network restart
OR
$ sudo /etc/init.d/networking restart

參考資料


2019年11月15日 星期五

麥輪車開發相關問題

  1. MeOrion 記憶空間不足
  2. 說明:
      MeOrion採用Arduino Uno架構,記憶體空間只有2048 bytes。若是要同時使用Makeblock及ros的函式庫,則會使得超過記憶體空間大小。

    處理方式:
    1. 透過修改ros nodehandle的宣告方式,減少rosarduino使用的publisher及subscriber數量,可以減少使用空間。但測試後仍然還是不夠使用。實際做法可參考此篇部落格 Using rosserial for a ATmega168/Arduino based motorcontroller

    2. 改為使用MeAuriga開發版,此開發版為Arduino 2560的架構,具有flash memory 256 KB。即可同時使用Mackblock及rosarduino函式庫。 

  3. MeAuriga無法與Raspberry PI3 進行連線
  4. 說明:
    1. Raspberry PI3預設將UART串口指定連接至藍芽介面

    2. MeAuriga UART埠為Serial2,但rosarduino預設為Serial

    處理方式
    1. 修改Raspberry PI3 UART設定的路徑,改為連接至UART Serial串口
      可參考此部落格,樹莓派3 串列埠使用 raspberry pi 3B+ uart boot overlay

    2. 修改rosarduino呼叫時,使用的nodehandle預設的UART埠,實際做法如下:

  5. ROS與C# UI連線之後,在使用者沒有操作的情況下,ROS端的callback函式也沒有做動
  6. 說明:
      ros端,Socket.recv 指令會導致系統block,才使得callback函式沒有執行

    處理方式
      在Socket初始化完成之後,加上fcntl函式設定socket參數為O_NONBLOCK,參考如下
      Beej's Guide to Network Programming 正體中文版




2019年7月26日 星期五

學習經典卷積神經網路一 (LeNet、AlexNet、VGGNet)

說明

簡單紀錄以下幾個經典卷積神經網路 ( AlexNet 、 VGGNet 、 Google Inception Net 、 ResNet ) 的概念及創新技術點。下圖為他們出現的順序及時間,其中AlexNet的出現為整個CNN的發展,帶來相當重大的一個突破。



並且它們分別在 ILSVRC ( ImageNet Large Scale Visual Recognition Challenge ) 比賽項目中取得如下的成就:
  1. AlexNet - 2012年冠軍 ( top-5 錯誤率 16.4%,使用額外資料可達15.3%,8層神經網路)
  2. VGGNet - 2014 年亞軍 ( top-5 錯誤率7.3%,19層神經網路 ) 
  3. Google Inception Net - 2014 年冠軍 ( top-5 錯誤率 6.7%,22層神經網路 ) 
  4. ResNet - 2015 年的冠軍 ( top-5 錯誤率 3.57% ,152 層神經網路 )

ILSVRC 的 top-5 錯誤率在最近幾年取得重大突破,而主要的突破點都是在深度學習和卷積神經網路,成績的大幅提升幾乎都伴隨著卷積神經網路的層數加深。目前在 ImageNet50 資料集上人眼能夠達到的錯誤率大約在 5.1%,而 ILSVRC 2015年冠軍 ResNet  (152層 ) 的成績已能夠達到錯誤率 3.57%。代表神經網路已基本解決了 ImageNet 資料集上的圖片分類問題。

「ILSVRC 層數」的圖片搜尋結果


LeNet (論文連結)

1998年,由電腦科學家Yann LeCun等提出的LeNet5採用了基於梯度的反向傳播演算法對網路進行有監督的訓練,Yann LeCun在機器學習、計算機視覺等都有傑出貢獻,被譽為卷積神經網路之父。 
LeNet5網路通過交替連接的卷積層 (Convolutions) 和池化層 (Subsampling),將原始影像逐漸轉換為一系列的特徵,之後再將這些特徵傳遞給全連接層 (Full Connection) 進行分類,並成功應用於手寫體識別。學術界對於卷積神經網路的關注,也正是開始於LeNet5網路的提出。LeNet網路架構如下。




卷積神經網路的特點在於 區域性連線 (Local Receptive Field)、權值共享 (Shared Weights)。
(1) 區域性連線 (Local Receptive Field)卷積網路的節點僅和其前一層的部分節點相連線,只用來學習區域性特徵。區域性感知結構的構思理念來源於動物視覺的皮層結構,其指的是動物視覺的神經元在感知外界物體的過程中起作用的只有一部分神經元。在計算機視覺中,影象中的某一塊區域中,畫素之間的相關性與畫素之間的距離同樣相關,距離較近的畫素間相關性強,距離較遠則相關性就比較弱,由此可見區域性相關性理論也適用於計算機視覺的影象處理領域。這種區域性連線的方式大幅減少了引數數量,加快了學習速率,同時也在一定程度上減少了過擬合的可能。


(2) 權值共享 (Shared Weights) 在卷積神經網路中,神經元對應的權值是相同的。由於權值相同,因此可以減少訓練的引數量。共享的權值和偏置也被稱作卷積核。

(3) 池化 (Pooling) - 池化層是卷積神經網路中另一個重要的概念,它實際上是一種形式的降採樣。透過將鄰近的區域內的特徵點整合得到新的特徵,用更高層的抽象表示圖像特徵達到降低維度的結果。並且因為區域降維的關係,具有對鄰近小區域抗干擾的能力。同時也減少了過度擬合 (over-fitting) 的情況。目前常見的作法有 mean-pooling、max-pooling和stochastic-pooling等三種,其中又以最大池化層 (Max-pooling) 最為常見。

AlexNet 

由深度學習大神 Hinton 的學生 Alex 於 2012年提出的深度卷積神經網路模型 AlexNet,將 LeNet 模型的思想發揚光大,把 CNN 的基本原理應用到了很深很寬的網路中。AlexNet 使用到的新技術點如下:

(1) ReLU - AlexNet成功使用 ReLU 作為 CNN 的啟動函數,並驗證其效果在較深的網路超過了 Sigmoid,成功解決了 Sigmoid 在網路較深時的梯度消失問題。

(2) Dropout - 訓練時使用 Dropout 隨機忽略一部分神經元,以避免模型過度擬合。

(3) 使用重疊的最大池化 ( max pooling ) - 此前 CNN 中普遍使用平均池化,而 AlexNet 中則全部使用最大池化,避免平均池化的模糊化效果。並且 AlexNet 提出讓步長比池化核的尺寸小,這樣池化層的輸出之間會有重疊和覆蓋,提升了特徵的豐富性。

(4) 提出 LRN 層 - 對局部神經元的活動建立競爭機制,使得其中響應較大的值變得更大,並抑制其他回饋較小的神經元,增強了模型的泛化性。

(5) 使用 CUDA 加速深度卷積網路的訓練

(6) 資料增強 ( data argumentation ) - 透過擷取影像中不同部位的子影像,以及水平翻轉的鏡像影像等作法,增加資料的豐富性,可以大大減輕過度擬合,提升泛化能力。


AlexNet 網路結構如下:
「Alexnet 網路結構」的圖片搜尋結果



VGGNet 

VGGNet 是牛津大學電腦視覺組 ( Visual Geometry Group ) 和 Google DeepMind 公司的研究員一起研發的深度卷積神經網路。

VGGNet 探索了卷積神經網路的深度與其效能之間的關係。透過反覆堆疊 3 x 3 的小型卷積核和 2 x 2 的最大池化層,VGGNet 成功構築了 16 ~ 19 層深的卷積神經網路。VGGNet 相比之前的網路結構,錯誤率大幅下降許多。同時 VGGNet 的拓展性很強,遷移到其他影像資料的泛化性非常好。VGGNet 的特點如下:


(1) 探索卷積神經網路的深度與其效能之間的關係 - 下圖為 VGGNet 各級別的網路結構圖,以及每一級別的參數量,從 11 層的網路一直到 19 層的網路都有詳盡的效能測試。其中 D、E 網路結構,也就是我們常說的 VGGNet-16 和 VGGNet-19。

「VGGNET 各級別參數量」的圖片搜尋結果

VGGNet 擁有 5 段卷積,每一段內有 2 ~ 3 個卷積層,同時每段尾部會連接一個最大池化層用來縮小圖片尺寸。每段內的卷積核數量一樣,越靠後段的卷積核數量越多。

(2) 使用同樣大小的卷積核 - VGGNet 中全部使用了 3 x 3 的卷積核和 2 x 2 的最大池化核。如下圖所示,兩個 3 x 3 的卷積層串聯相當於一個 5 x 5 的卷積層,即一個像素會跟周圍 5 x 5的像素產生關聯,可視為感受區大小為 5 x 5。
 ã€ŒVGGNET 卷積層 等效」的圖片搜尋結果

而 3 個 3 x 3 的卷積層串聯的效果則相當於 1 個 7 x 7 的卷積層。但 3 個串聯的 3 x 3 卷積層,擁有比 1 個 7 x 7 的卷積層更少的參數量,只有後者的 ( 3 * 3 * 3 ) / ( 7 * 7 ) = 55%。最重要的是, 3 個 3 x 3的卷積層擁有比 1 個 7 x 7 的卷積層更多的非線性變換 ( 前者可以使用三次 ReLU啟動函數,而後者只有一次 )。

(3) 採用 Multi-Scale 的方法 - 預測時將原始影像 Scale至不同的尺寸 ,並對不同尺寸進行分類預測,再將不同尺寸的預測結果平均得到最後結果。另外還使用 Multi-Scale的方法做資料增強,將原始影像縮放到不同尺寸,然後再隨機裁 224 x 224 的圖片。



另外Google Inception Net、ResNet則下次有機會再說明了...

參考資料






2019年1月31日 星期四

Jetson TX2上DeepStream安裝與範例執行 (deepstream-plugins)

DeepStream SDK是為大規模創建和部屬基於AI的視智慧視訊分析(IVA)方案而設計的,它提供完整的框架和所有基本構建模組。它可以讓開發者專注於自己的核心深度學習網路和應用,而不是從頭開始設計端到端解決方案。

應用程式開發人員可以使用此SDK快速構建原型,並構建從智慧相機到智慧城市應用裝置,機器人和工業自動化等產品。

NVIDIA DeepStream SDK官網介紹


Jetson上的DeepStream SDK使用Jetpack,包括L4T,多媒體API,CUDA和TensorRT。 SDK提供了豐富的外掛和庫集合,使用Gstreamer框架構建,使開發人員能夠構建靈活的應用程式,將視訊轉化為有價值的見解。DeepStream還附帶了示例應用程式,包括原始碼和應用程​​序適配指南,以幫助開發人員快速開始構建。

本篇執行的平台為 Jetson TX2,搭配軟體版本為:
1. Jetpack 3.3
2. CUDA 9.0
3. TensorRT 4.0

包含 DeepStream 安裝和範例 (deepstream-plugins) 執行測試兩個部分。主要紀錄在執行過程中遇到的問題,以及解決方式。

1. Jetson TX2上DeepStream安裝過程

首先,安裝步驟在以下這篇文章有完整的說明 ,按照其步驟執行即可。
Jetson TX2上运行Deepstream范例

錯誤 1.

在執行安裝的最後一步驟,測試安裝結果時:
$ nvgstiva-app -c ${HOME}/configs/PGIE-FP16-CarType-CarMake-CarColor.txt

出現以下錯誤訊息:
error_message: Segmentation fault (core dumped)

解決方式:
參考此篇NVIDIA論壇的回覆,執行以下指令將快取暫存內容清除即可。
$ rm ~/Model/*/*.cache
$ rm ~/.cache/gstreamer-1.0/ -rf


錯誤 2.

解決了Segmentation fault之後,接著很快就遇到另一個錯誤訊息。
error_message: Error from src_elem: Your GStreamer installation is missing a plug-in.
Missing decoder: H.264 (High Profile)

此錯誤主要是因為我的系統中缺少H.264的decoder (gstreamer),GStreamer的安裝指令如下。
$ sudo apt-get install gstreamer1.0-libav

安裝完成後應該就能夠順利執行DeepStream指令了!

2. deepstream-plugins範例執行 (github)


(2.1) 按照 github 上 Readme 說明,先安裝 Pre-requisites,及Setup步驟。

Installing Pre-requisites:

Install GStreamer pre-requisites using:
$ sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
Install Google flags using:
$ sudo apt-get install libgflags-dev
1. 修改Makefile.config,按照個人電腦配置設定,參考如下:
#Update the install directory paths for dependencies below CXX=g++ 
CUDA_VER:=9.0
#Set to TEGRA for jetson or TESLA for dGPU's
PLATFORM:=TEGRA
#For Tesla Plugins 

OPENCV_INSTALL_DIR:= /path/to/opencv-3.4.x
TENSORRT_INSTALL_DIR:= /path/to/TensorRT-5.x
DEEPSTREAM_INSTALL_DIR:= /path/to/DeepStream_Release_3.0
#For Tegra Plugins
NVGSTIVA_APP_INSTALL_DIR:= /home/nvidia/nvgstiva-app_sources


2. 下載YOLOv3模型 (For yolo v3)
$ wget https://raw.githubusercontent.com/pjreddie/darknet/master/cfg/yolov3.cfg
$ wget https://pjreddie.com/media/files/yolov3.weights

3. 修改 "data/yolo/calibration_images.txt" 輸入圖片路徑

4. 執行安裝 (For tegra)
$cd sources/plugins/gst-yoloplugin-tegra
make && sudo make install


(2.2) 執行 nvgstiva-app [TEGRA platform only]

1. 按照 github 說明修改配置文件 config/nvgstiva-app_yolo_config.txt

2. 執行指令
$ nvgstiva-app -c config/nvgstiva-app_yolo_config.txt

錯誤 1.

輸入執行指令後,遇到以下錯誤訊息
** WARN: : Using software video decoder instead of hardware accelerated OMX decoder. Unsupported format. Try re-encoding.
** ERROR: : Failed to link decodebin to pipeline 
** INFO: : Pipeline running 

解決方式:
參考此篇論壇回復,需要再另外安裝以下套件:
$ apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools



(2.3) 測試trt-yolo-app

Object Detection using trt-yolo-app

$ cd sources/apps/trt-yolo
$ make && sudo make install
$ cd ../../../
$ trt-yolo-app --flagfile=config/yolov3.txt


錯誤 1.

trt-yolo-app編譯錯誤,錯誤訊息如下。

trt_utils.h:83:22: error: ‘nvinfer1::DimsHW YoloTinyMaxpoolPaddingFormula::compute(nvinfer1::DimsHW, nvinfer1::DimsHW, nvinfer1::DimsHW, nvinfer1::DimsHW, nvinfer1::DimsHW, const char*) const’ marked ‘override’, but does not override 
nvinfer1::DimsHW compute(nvinfer1::DimsHW inputDims, nvinfer1::DimsHW kernelSize,  




解決方式:

參考此篇論壇回復,deepstream-plugins改為使用DS2 Release版本即可。(下載連結)

錯誤 2. 選擇不同的YOLO模型

無法透過選擇不同的yolo.txt,去切換yolo模型 (yolov3.txt -> yolov3-tiny.txt)

解決方式:
(1) 需要修改文件 “./sources/lib/network_config.h”,並重新編譯才行。

(2) 並且需要將模型檔案放置於“./data/”中。



2019年1月28日 星期一

Jetson TX2安裝OpenCV3.4

TX2 install OpenCV3.4

在將TX2上原本的OpenCV升級至v3.4.0的過程中遇到了一些阻礙,將問題紀錄下來。


1. 安裝教學

此篇安裝教學寫得非常詳細,安裝的步驟大致與其相同
How to Install OpenCV (3.4.0) on Jetson TX2

在OpenCV安裝(更新)完成之後,能夠順利地import cv2執行。
但再重新開機之後卻會出現如下錯誤。




Error message
"ImportError: /usr/local/lib/python3.5/dist-packages/cv2.cpython-35m-aarch64-linux-gnu.so: undefined symbol: _ZTIN2cv3dnn19experimental_dnn_v35LayerE"


2. 解決方式

這個問題主要的原因是因為,需要更新環境變數 (/etc/bash.bashrc)。

以下這篇文章說明了一些可能問題的解決方法,其中也包括更新環境變數的方法。
Jetson TX2--python3下编译安装opencv3.4


1. 開啟文件 (/etc/bash.bashrc)
sudo vim /etc/bash.bashrc

2. 在文件底部加入以下內容,並儲存
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

#添加完成後應該會如下圖


之後就可以順利使用OpenCV囉~

2018年4月29日 星期日

TensorFlow 學習筆記(一) - Windows 上安裝 TensorFlow

本文將說明如何在 Windows 上安裝 TensorFlow ,以及在安裝之前需要注意的事項。

確定 TensorFlow 版本

請按照個人配備及需求,在以下版本中選擇一種來安裝:
  • 只支援 CPU 的 TensorFlow。如果你的系統不支援 NVIDIA® GPU ,你必須安裝這個版本。这个版本的 TensorFlow 通常安裝起來比較簡單,所以對於初入門的使用者,即使你擁有 NVIDIA GPU,我們也推薦首先使用這個版本。
  • 支援 GPU 的 TensorFlow。 TensorFlow 在 GPU 上通常比在 CPU 上的執行得更快。所以如果你有符合以下要求的 NVIDIA® GPU 並且注重效能,可以隨後安裝這個版本。
GPU support TensorFlow 的 NVIDIA 需求
需要事先安裝以下套件:
  • CUDA® Toolkit 8.0。詳見 NVIDIA's documentation。確保按照文檔中描述的將 Cuda 相關路徑加入到 %PATH% 環境變數中。
  • CUDA Toolkit 8.0 相關的 NVIDIA 驅動程式。
  • cuDNN v5.1。詳見 NVIDIA's documentation。注意:cuDNN 通常與其他 CUDA DLLs 安裝的位置不同。確保將 cuDNN 庫的安裝目錄加入到 %PATH% 中。
  • CUDA Compute Capability 3.0 或更高的 GPU 晶片。支援的 GPU 晶片詳見 NVIDIA documentation 。
如上述軟體版本較舊,請將其升級到指定版本。

確定如何安裝 TensorFlow

Windows下安裝TensorFlow有如下選擇:
  • "native" pip
  • Anaconda
使用原生 pip 直接在系統中安裝 TensorFlow,而不使用虛擬環境。 因為原生 pip 將直接安裝於Windows系統中,所以可能會干擾其他基於Python的安裝。不過,如果你理解 pip 和 Python 環境,原生 pip 安裝通常只需要一個指令! 如果使用原生 pip 安裝,則可在任何目錄中執行 TensorFlow 程式。
在 Anaconda 中,你可以通過 conda 建立一個虛擬環境,在開發測試上較為安全。因此即使官網推薦使用 pip install 安裝 TensorFlow,而非conda install但小編之後仍將以 Anaconda 的方式進行測試。原生 pip 安裝方式僅提供參考。
注意:使用 conda install 指令安裝而非官方支持。也就是说 TensorFlow 團隊沒有測試也沒有管理過 conda 安裝。 使用 conda 需要自行承擔風險。

原生 pip 安裝

如果還沒安裝以下版本的 Python ,請先安裝:
TensorFlow 在 Windows 上支援 Python 3.5.x 和  3.6.x 。 注意 Python 3 使用 pip3,我们用 pip3 來安裝 TensorFlow。
在 terminal 中輸入如下指令安裝 CPU版本 的 TensorFlow:
C:\> pip3 install --upgrade tensorflow
安裝支援 GPU 版本的 TensorFlow,使用以下指令:
C:\> pip3 install --upgrade tensorflow-gpu

Anaconda 安裝

Anaconda 安裝是社區支持,而非官方支持
按照以下步驟在 Anaconda 環境中安裝 TensorFlow:
  1. 按說明下載並安裝 Anaconda: Anaconda download site
  2. 建立一個 conda 環境,命名為 tensorflow,以便運行某個 Python 版本:
    C:\> conda create -n tensorflow 
  3. 啟用 anaconda 環境:
    C:\> activate tensorflow
    (tensorflow)C:\>  # 你的提示符號應該發生變化 
  4. 在你的 conda 環境中安裝 CPU 版本的 TensorFlow:
    (tensorflow)C:\> pip install --ignore-installed --upgrade tensorflow 
    安裝支援 GPU 版本的 TensorFlow:
    (tensorflow)C:\> pip install --ignore-installed --upgrade tensorflow-gpu 

驗證安裝結果

啟動 terminal。
如果通過 Anaconda 安裝,啟用 Anaconda 環境。
啟動 Python:
$ python
在 Python 互動式環境中輸入以下程式
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
如果系统輸出如下,則安裝成功:
Hello, TensorFlow!
如果你是新接觸 TensorFlow,可以前往 Getting Started with TensorFlow 進行下一步的學習。
如果你是新接觸機器學習,則可以參考以下連結
如果系统輸出錯誤訊息而非歡迎訊息,查看Common installation problems


參考資料



<備註>

順便在這邊記錄下 Anaconda 及 Spyder 的一些操作指令。

1. Anaconda Update

開啟 Anaconda Prompt

C:> conda update --all
Or
C:> conda update conda
C:> conda update anaconda
C:> conda update spyder

2. Spyder 安裝 TensorFlow

安裝完成 Anaconda 之後,可再安裝運行 spyder 編譯器。 Spyder 下安裝 package 的方式如下。

1. 開啟 Anaconda Navigator,並選擇安裝 Spyder 編譯器。
2. 在 Spyder 編譯器環境中的 terminal 中,只需在指令開頭加入' ! ',即可使用 pip install 安裝套件。
In [1]: !pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-1.7.0-cp36-cp36m-win_amd64.whl


 


2018年3月13日 星期二

MoveIt 入門教學 - 加入Trac_IK運動學求解(Trac-IK Kinematics Solver)

MoveIt入門教學 - 加入Trac_IK運動學求解(Trac-IK Kinematics Solver)


说明
  • 由於在使用MoveIt中最常見的KDL作為Kinematics Solver的過程中,在進行基本操作時擁有不錯的使用體驗。
  • 但隨著任務需求的增加,在加入環境障礙物以及attach object等操作之後,會遇到執行運算時間過長的問題。甚至可能會因此而失敗(timeout)。
  • 因此嘗試使用不同的Kinematics Solver來解決此一問題,目前測試使用Trac_IK,普遍上會擁有較佳的結果,甚至在某些條件下,運算速度可能會相差十倍以上,並且也比較不會出現失敗的狀況。
甚麼是Trac_IK
  • 来自ROS維基百科上的說明:Trac_IK係作為目前最常見的運動學編譯器(KDL)的改良版本,提供一更快速,且更穩定的運動學編譯器。在處理關節極限(joint-limited)的數值解上會具有較佳的結果,不會再增加額外的計算時間。
  • 並且Trac_IK具有與KDL編譯器相近的API calls,僅需調整部分輸入參數即可切換使用。詳細計算內容請參閱ROS Wiki - Trac_IK中的說明。
MoveIt! Trac_IK
  • MoveIt! Trac_IK是一種Open-Source的函式庫,提供一改善的解運動學的工具。
  • 本文旨在說明如何在機器人的MoveIt系統中使用Trac_IK的强大功能
  • 本文中MoveIt! Trac_IK的測試環境是ROS Kinetic,使用catkin编译。理論上可以工作再任何自由度的機械臂上。
準備
  • 应该已经通过MoveIt!配置助手生成MoveIt!配置包
MoveIt! IKFast 安装

兩種安裝方式:二進制debs包或源安裝
Binary Install:
sudo apt-get install ros-kinetic-trac-ik-kinematics-plugin

    源安装:(在catkin工作空間)
    1. 至官網source中下載原始程式碼
    2. 將package "trac_ik_kinematics_plugin"及"trac_ik_lib"放入catkin的工作空間中
    3. 於機器人的配置文件中"/config/"找到"kinematics.yaml"文件,並將文件內的
kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin 置換為 
=> kinematics_solver: trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin
4. 調整參數
  1. kinematics_solver_timeout (timeout in seconds, e.g., 0.005) and position_only_ik ARE supported.
  2. solve_type can be Speed, Distance, Manipulation1, Manipulation2 (see trac_ik_lib documentation for details). Default is Speed.
  3. kinematics_solver_attempts parameter is unneeded: unlike KDL, TRAC-IK solver already restarts when it gets stuck
  4. kinematics_solver_search_resolution is not applicable here.



備註: 在完成Trac_IK的安裝之後,即可直接開啟使用。並且在之後的MoveIt_Setup_Assistant中,也會直接出現Trac_IK的選項可以直接選取。




參考資料:
ROS Wiki - Trac_IK
trac_ik - source
MoveIt!入门教程-生成IKFast插件

apt-get update異常處理

1. 問題描述 系統環境:Ubuntu 18.04.3 LTS 執行apt-get update更新時遇到如下狀況 錯誤訊息: Err:1 http://security.ubuntu.com/ubuntu bionic-security InRe...