Ubuntu14.04+ROS+OpenCV+KinectV2
KinectV2+Ubuntu 14.04+Ros 安裝教程 - hitcm - 部落格園
視覺SLAM實戰(二):ORB-SLAM2 with Kinect2 - 半閒居士 - 部落格園
剛跟著高博的書學到點雲,本想跟著課後練習,學習一下在ROS系統中Kinect2的標定的,誰知安裝配置ROS時,可能是因為之前安裝運行了OpenCV3和ROS自帶的2.4.8不相容帶來的各種問題,現打算解除安裝重灌,由於問題還未解決,所以就暫時把處理的有些過程貼上如下,待處理完畢再做梳理:
1.安裝ROS
ROS大致每年釋出一個版本,目前正在維護的ROS版本包括indigo,jade,kinetic
ROS被稱為機器人作業系統,其實ROS充當的是通訊中介軟體的角色,即在已有作業系統的基礎上搭建了一整套針對機器人系統的實現框架。
值得一提的是,ROS的設計者考慮到各開發者使用的開發語言不同,因此ROS的開發語言獨立,支援C++,python等多種開發語言。ROS還提供一組實用工具和軟體庫,用於維護、構建、編寫和執行可用於多個計算平臺的軟體程式碼。
ROS的系統結構設計也頗有特色,ROS執行時是由多個鬆耦合的程序組成,每個程序ROS稱之為節點(Node
例如,在一個支援SLAM功能的移動機器人中,鐳射資料採集和里程資料獲取分別由兩個node實現,用於感知環境;SLAM演算法執行在另一個node中,用於處理感測器資料,繪製地圖;SLAM節點和資料採集節點之間採用topics方式通訊。當新增一個攝像頭模組時,僅需在現有結構裡增加一個新的視訊節點,讓其與SLAM節點採用topics方式通訊即可,另外兩個功能節點不需任何改動。
ROS只是一個框架,他很方便,最大的優點是可以在諸多不同的平臺之間建立起通訊,而如今機器人開發使用
官方:http://wiki.ros.org/indigo/Installation/Ubuntu
配置詳解:https://www.cnblogs.com/Jessica-jie/p/6520061.html
Q1:設定鑰匙時出錯
gpgkeys:HTTP fetch error 7: couldn't connect: bad URI
gpg:找不到有效的OpenPGP資料。
A1:使用這個代替官網金鑰$wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
Q2:GPG錯誤:下列簽名無法驗證【公鑰數字要對應!!!】
在新增一個PPA時可能會導致以下GPG錯誤:下列簽名無法驗證,這通常發生在終端中執行更新時:W:GPG error: http://repo.mate-desktop.org saucy InRelease: Thefollowing signatures couldn’t be verified because the public key isnot available:NO_PUBKEY6DA746A05F00FA99
A2:我們所要做的,就是獲取系統中的這個公鑰,從資訊中獲取金鑰號。在上述資訊中,金鑰號為6DA746A05F00FA99。該金鑰可通過以下方式使用:
sudoapt-key adv --keyserverkeyserver.ubuntu.com --recv-keys
6DA746A05F00FA99
在新增金鑰後,再次執行更新就沒有問題了。
參考:https://blog.csdn.net/wche1990/article/details/6759422; https://blog.csdn.net/wqhlmark64/article/details/78036563
Q3:無法下載的PPA(可能因為過時)
W:無法下載http://ppa.launchpad.NET/fcitx-team/nightly/ubuntu/dists/jessie/main/binary-amd64/Packages404 Not Found
A3:解決辦法:將對應的PPA刪除掉即可
https://itsfoss.com/failed-to-download-repository-information-ubuntu-13-04/
Q4:源的問題--問題原因:要裝A,依賴B,但是已經安裝的軟體C也依賴B,但是A依賴的B的版本和C依賴的B的版本不一致,導致瞭如果要安裝B,那麼C便不能正常運行了,所以系統報錯,組織安裝B;軟體依賴於某一軟體舊(新)的版本,可是你卻已經安裝了新(舊)的。
下列軟體包有未滿足的依賴關係:ros-indigo-desktop-full: 依賴:ros-indigo-simulators 但是它將不會被安裝
E:無法修正錯誤,因為您要求某些軟體包保持現狀,就是它們破壞了軟體包間的依賴關係。
A4:刪除掉已安裝(錯安裝的源),重新安裝
參考:https://www.cnblogs.com/LeoGodfrey/p/3316834.html
注:源就是軟體源的意思,包管理器從軟體源下載軟體包,並從軟體源下載軟體更新,相當於軟體的下載伺服器和更新服務
使用aptitude$ sudo aptitude install
對比$ sudo apt-get install
aptitude與apt-get一樣,是Debian及其衍生系統中功能極其強大的包管理工具。與apt-get不同的是,aptitude在處理依賴問題上更佳一些,例如,aptitude在刪除一個包時,會同時刪除本身所依賴的包。這樣,系統中不會殘留無用的包,整個系統更為乾淨;
2.安裝OpenCV
下載 https://opencv.org/opencv-3-1.html
下載時注意下載.tar.gz版本的而不是zip(Windows)版本的,zip解壓後進入資料夾安裝時可能會提示如下錯誤
The source directory "/home/junwang/下載" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
安裝
Ubuntu14.04ROS自帶opencv2.4.8和opencv3.1多版本共存
Ubuntu14.04中opencv2.4.8 和opencv3.1.0共存安裝(含使用設定CMakeLists.txt)
ubuntu檢視opencv版本pkg-config --modversion opencv
BUG
將下載的ippicv,tgz檔案直接拷貝進入opencv3.1原始碼的下面這個目錄:
opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e
由於先安裝了3.1.0在ROS中需要2.4導致的問題
(最後仍沒有解決,後重裝系統,先裝了ROS自帶的2.4.8後按照上述方法安裝3.1解決)
基於ubuntu14.04的ROSindigo的安裝和解除安裝
CvBridge是一個ROS庫,提供ROS和OpenCV之間的介面。CvBridge可以在找到cv_bridge包在vision_opencv堆疊
將裡面的cv_bridge包拿出來,放到src中,重新編譯(在catkin_ws資料夾中):
catkin_make--pkgcv_bridge
自己摸索,發現在/usr/include/下並沒有opencv,建立了一個opencv資料夾,在github下下載了對應的indigo版本的cv_bridge,是一個包
( https://github.com/ros-perception/vision_opencv/tree/indigo ), cv_bridge 只是其中一部分,把 cv_bridge 這部分移動到新建立的 opencv 下即可,用到了 sudomv 路徑 1 路經 2/usr/lib/x86_64-linux-gnu/libopencv_videostab.so.2.4.8
沒有規則可以建立“/home/junwang/catkin_ws/devel/lib/libkinect2_bridge_nodelet.so”需要的目標“/usr/lib/x86_64-linux-gnu/libopencv_videostab.so.2.4.8”。停止。
類似解答:https://stackoverflow.com/questions/40023058/missing-libopencv-ts-missing-under-arm-linux
MakeErrorat/opt/ros/indigo/share/cv_bridge/cmake/cv_bridgeConfig.cmake:106(message):
Project 'cv_bridge'specifies'/usr/include/opencv' as an include dir,
which is not found. It does neither exist as an absolute directory nor in'/opt/ros/indigo//usr/include/opencv'.Ask the maintainer ..
https://answers.ros.org/question/234483/how-to-link-opencv-to-ros-indigo-catkin-with-cmake-ubuntu-1404/
Finally,I modifiedfile /opt/ros/indigo/share/cv_bridge/cmake/cv_bridgeConfig.cmake
I changed
set(cv_bridge_FOUND_CATKIN_PROJECTTRUE)
if(NOT"include;/usr/include/opencv;/usr/include"STREQUAL"")
set(cv_bridge_INCLUDE_DIRS"")
set(_include_dirs"include;/usr/include/opencv;/usr/include")
to
set(cv_bridge_FOUND_CATKIN_PROJECT TRUE)
if(NOT "include;/usr/local/include/opencv" STREQUAL " ")
set(cv_bridge_INCLUDE_DIRS "")
set(_include_dirs "/usr/local/include/opencv;/usr/include;/usr/local/include")
Infact I just changed usr/include
to /usr/local/include
.This solved my problem.
在Ubuntu中修改只讀文件
法一:可以使用chmod命令,為改檔案提供其他的許可權。
u表示使用者、a表示全部、g表示組,r表示可讀、w表示可寫、x表示可執行,你可以使用 chmod a+w test.c 來新增許可權,這是比較方便的直觀的方法
法二:在Vim編輯器中編輯儲存
sudo vim /etc/laptop-mode/laptop-mode.conf
法三:用Ubuntu自帶的gedit編輯器,在文件的圖形視窗介面編輯完儲存就可以了
sudo gedit /etc/laptop-mode/laptop-mode.conf
完成了動態庫的共享,還不能使用opencv來程式設計,還需要為程式指定openvc的標頭檔案位置。
這裡使用pkg-config命令來完成。首先在/etc/profile中新增
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
pkg-config維護著一個關於opencv的配置檔案,這個檔案(opencv.pc)在目錄/usr/local/lib/pkgconfig,這個檔案記錄著opencv的一些動態庫資訊,還有標頭檔案資訊,輸入pkg-config–cflags opencv 和pkg-config–libs opencv ,可以發現以下資訊,正確結果應為:
[email protected]:/usr/local/lib# pkg-config --cflags opencv
-I/usr/local/include/opencv -I/usr/local/include
[email protected]:/usr/local/lib# pkg-config --libs opencv
/usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libo..........
同樣錯誤,未解決:
https://answers.ros.org/question/52341/building-cv_bridge-with-catkin-fails/
https://answers.ros.org/question/223481/failed-to-process-package-cv_bridge/