在Jetson TK1上安裝ROS(機器人作業系統)
1.常規設定
- 安裝Grinch Kernel(為你的L4T選擇一個合適的版本,可以用
cat /etc/nv_tegra_release
來檢視L4T的版本號(執行之後,只需要看結果的第一行即可,R後為版本號,REVISION後為修正號,二者用.
連線起來即為我們所需要的版本號,如21.3等。 - 安裝cuda toolkit和opencvtegra從https://developer.nvidia.com/linux-tegra-rel-21;如果你已經在重新整理板子時安裝了cuda toolkit或者opencv那就無需在進行這一步了。
2.安裝ROS
2.1配置你的軟體源
開啟ubuntu軟體中心,然後點選編輯->軟體源,將軟體源屬性設定為
restricted、universal、multiverse(這三個是必須選擇的其他的可選可不選)
2.2設定你的環境
sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX
ps:如果這一步有問題的話,就試一試下面的命令:
$ export LANGUAGE=en_US.UTF-8 $ export LANG=en_US.UTF-8 $ export LC_ALL=en_US.UTF-8 $ locale-gen en_US.UTF-8 $ dpkg-reconfigure locales
2.3配置sources.list檔案
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'
ps:上述命令是針對ubuntu 14.04,開發代號為Trusty Tahr。
2.4設定密碼
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net --recv-key 0xB01FA116
2.5安裝
首先執行以下命令,升級一下ROS可能要用到的程式。這樣可以避免出現相容性問題。
sudo apt-get update
有許多不同版本的ROS,但是考慮到Jetson TK1的處理器為ARM架構的(並不是所有的庫和工具都能在ARM下編譯),建議單獨安裝ROS包。
ROS-Base: (Bare Bones) ROS編譯、交流的庫,可以滿足基本功能,但是並不是圖形介面。
sudo apt-get install ros-indigo-ros-base
2.5.1新增單獨的包
其實到這裡ROS已經基本安裝完成,你可以用以下命令來安裝特定的包:
sudo apt-get install ros-indigo-PACKAGE
eg:
sudo apt-get install ros-indigo-navigation
如果你要找到特定的包:
apt-cache search ros-indigo
2.5.2安裝大小
Base Package | robot variant | desktop variant |
---|---|---|
407 MB | 572 MB | ~1GB |
2.6初始化rosdep
在你正式使用ROS之前,你應該初始化rosdep。rosdep
可以讓你很容易的為你的程式碼安裝編譯的依賴項。
sudo apt-get install python-rosdep
sudo rosdep init
rosdep update
2.7環境變數的設定
如果你的ROS環境變數被新增到bash中,那麼每次啟動shell時,將可以直接使用ROS。
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
2.8安裝rosinstall
rosinstall在ROS單獨的釋出版本中是使用最頻繁的命令列工具之一,有了它,只要用一條命令,你就可以很容易為你的包下載完整的原始碼樹。
為了在你的ubuntu安裝,執行下述命令:
sudo apt-get install python-rosinstall
2.9驗證你的OS name
確保你的OS name(通過命令:sudo gedit /etc/lsb-release
修改)為如下內容:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04"
ps:這是是針對ubuntu 14.04的OS name。
因為ROS並不能識別Linaro作為OS,所以這是有必要的。