1. 程式人生 > >ROS Android開發環境搭建

ROS Android開發環境搭建

這是一篇關於ROS Android的開發環境搭建的筆記

對於一些在配置ros android環境失敗的朋友們可能會有一些幫助,本文會介紹關於ros android環境搭建和開發例項的執行 ,以及一些安裝過程中可能會碰到的問題和解決辦法

我使用的系統和ros版本是ubuntu14.04 + ROS Indigo

目前ROS和Android的通訊方式主要分兩種: 一、rosbridge 通過Websocket以JSON格式的API為非ROS環境提供ROS通訊支援,這種通訊方式輕量級,跨平臺 二、rosjava ros官方支援的語言只有C++和Python,目前Android想要和ROS通訊的話,需要藉助半官方的rosjava包 ,就能在Android上執行ROS節點,功能強大,但是編譯比較麻煩,而且ROS對其支援只到indigo版本!

那麼我們主要介紹通過rosjava開發的方式 通過rosjava讓android端和ros進行通訊的話需要依賴兩個包rosjava_core和android_core rosjava_core:它是用純JAVA實現的ROS 它提供了一個客戶端庫是JAVA程式可以快速的呼叫ROS的Topics,Services,Parameters android_core:集合rosjava元件和範例的ROS開發應用,提供了android庫程式來幫助ROS應用開發

那麼接下來詳細介紹如何安裝配置ros android開發環境,分為以下幾個步驟 跟隨以下步驟操作之前請了解ROS和其工作原理以及安裝好了ROS

  1. OpenJDK8 安裝
  2. android studio 安裝
  3. rosjava 安裝
  4. android core source 安裝
  5. android studio匯入android core專案
  6. 執行例項android_tutorial_pubsub實現收發訊息

一、OpenJDK8 安裝:

sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get install openjdk-8-jdk

If you have more than one Java versions installed on your system. Run below command set the default Java
如果在你的系統上裝有多個版本的Java的話,執行這條命令選擇一個Java版本作為預設的

sudo update-alternatives --config java

And set default Java Compiler by running

sudo update-alternatives --config javac java -version

輸入java -version如果出現類似這樣輸出的話就ok了:

openjdk version “1.8.0_01-internal” OpenJDK Runtime Environment (build 1.8.0_01-internal-b04) OpenJDK 64-Bit Server VM (build 25.40-b08, mixed mode)

After installation, set JAVA_HOME environment variable to the root directory of the JVM you just installed 設定一下JAVA_HOME環境變數

sudo nano /etc/profile 在最下面新增: export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

二、安裝Android Studio

可以在android studio中文社群下載到軟體壓縮包 http://www.android-studio.org/ 下載的檔名為android-studio-ide-145.3360264-linux.zip 並將其移動到/opt資料夾下

unzip android-studio-ide-145.3360264-linux.zip mv android-studio /opt/ cd /opt/android-studio/bin

啟動android studio

./studio

接下來就是android studio的安裝,這個就不講了…Google或百度一下一大堆 安裝的時候SDK的位置選擇最好不要選在root資料夾下 訪問的時候會有點麻煩

設定SDK的路徑: /home/hqy/Android/Sdk是SDK的位置

echo export PATH=${PATH}:/home/hqy/Android/Sdk/tools:/home/hqy/Android/Sdk/platform-tools:/opt/android-studio/bin >> ~/.bashrc echo export ANDROID_HOME=/home/hqy/Android/Sdk >> ~/.bashrc

常見問題:

1.在建立專案的時候會報錯:Error:Failed to resolve: com.android.support:appcompat-v7:27.+

在app/build.gradle中找到以下變數:

compileSdkVersion 27 targetSdkVersion 27 compile ‘com.android.support:appcompat-v7:27.+’

修改為:

compileSdkVersion 26 targetSdkVersion 26 compile ‘com.android.support:appcompat-v7:26.+’

然後點選上面的Try Again,然後再點下面的Install missing platform(s) and sync project把相關的build-tool安裝好就ok了 有篇部落格詳細的講了這個問題的處理 https://blog.csdn.net/mhl18820672087/article/details/78385361

2.在SDK Manager把SDK和SDK build-tools裝好

如果SDK Manager上面沒有找到一大排build-tools的話,在右下角有一個Show Package Details 點它就能看到 From the welcome window, select Configure->SDK Manager option and make sure you have installed Android SDK Build Tools 21.1.2, Android APIs 10 (gingerbread), 13 (honeycomb), 15 (ice cream), 18 (jellybean) SDK API 10 13 15 18 21一定得安裝好,如果沒裝的話在後面android core catkin_make的時候會報一大堆Error 如果空間容量足夠大的話 就把SDK和build-tools全部勾上安裝吧 省得後面麻煩

三、rosjava 安裝:

如果提示 ‘rm /etc/ros/rosdep/sources.list.d/20-default.list’ 就輸入下面這條命令試試:

rm /etc/ros/rosdep/sources.list.d/20-default.list

然後繼續

sudo rosdep init rosdep update rosdep install --from-paths src -i -y catkin_make

安裝完成

常見問題:

如果沒有必要,命令前面最好都不加sudo
wstool init -j4 ~/rosjava/src http://xxx 電腦的話可以把-j4換成-j8加快速度,樹莓派得換成-j2不然cpu吃不消
1.rosdep update前面一定不能加sudo,或者在root下執行,許可權問題
2.rosdep update Error:

rosdep update之前一定要輸入sudo rosdep init 如果不行可以嘗試更換軟體源再試一試

3.rosdep install --from-paths src -i -y報錯的話是因為rosdep update的問題

四、android core安裝:

安裝完成

常見問題:

幾乎都是catkin_make時候報錯的Error的問題
1. A problem occurred configuring project ‘:android_10’ > SDK location not found.

要麼SDK路徑配置有誤,要麼SDK裝少了版本…

2. 編譯報錯:Execution failed for task ‘:android_10:processReleaseResources’
java.io.IOException: Cannot run program "/home/hqy/Android/Sdk/build-tools/21.1.2/aapt": error=2, No such file or directory

是因為我裝的是Ubuntu 64位的系統 系統缺少32位的相關依賴庫 安裝32位相容庫 解決如下:

sudo apt-get install -y libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1

3. buildscript.gradle報錯導致無法編譯的問題

把rootProject.buildscript{}中程式碼換成以下內容:

rootProject.buildscript {
	/*apply from: "https://github.com/rosjava/rosjava_bootstrap/raw/indigo/buildscript.gradle"*/
	apply from: "https://raw.githubusercontent.com/rosjava/rosjava_bootstrap/indigo/buildscript.gradle"
	dependencies {
	classpath "com.android.tools.build:gradle:1.0.+"
	compile 'com.github.rosjava.android_remocons:common_tools:0.2.1' //bumped version
	compile 'org.ros.android_core:android_10:[0.2,0.3)]'
	compile 'org.ros.rosjava_core:rosjava:0.1.+'
	compile 'org.ros.rosjava_messages:turtlebot_msgs:2.2.+'
	}
}

然後再編譯應該就ok了

五、Android Studio匯入android core專案

匯入專案: File - New - Import Project 選擇 android_core/src下android_tutorial_pubsub

問題:

1.因匯入專案和AndroidStudio的Gradle版本不同導致的問題

下載gradle-2.2.1版本 然後解壓 Gradle下載網址 https://services.gradle.org/distributions/ 在Settings搜尋Gradle 勾選Use local gradle distribution 然後選擇gradle-2.2.1所在目錄

2.修改gradle後執行專案依然報以下錯
UnsupportedMethodException
Unsupported method: AndroidProject.getPluginGeneration().
The version of Gradle you connect to does not support that method.
To resolve the problem you can change/upgrade the target version of Gradle you connect to.
Alternatively, you can ignore this exception and read other information from the model.

出現這個問題的原因是新版本的Android Studio2.2會檢查“ Instant Run” 這個特性,所以解決辦法就是關掉這個檢查 在Build,Execution,Deployment下的Instant Run中取消第一行的勾選 'Enable Instant Run to hot swap code’這行

接下來應該可以成功執行專案到手機了

六、執行android_tutorial_pubsub

首先在~/.bashrc裡設定好本機的IP地址 export ROS_IP=192.168.1.101

echo export ROS_IP=192.168.1.101 >> ~/.bashrc roscore

開啟一個新終端輸入:

rostopic echo /chatter

常見問題:

1.執行android_tutorial_camera 接收手機攝像頭畫面

正常情況下以下包可能已經安裝:

sudo apt-get install ros-indigo-image-view ros-indigo-rqt-image-view ros-indigo-image-transport-plugins

在手機上開啟android_tutorial_camera 開啟一個新終端輸入:

rosrun image_view image_view image:=/camera/image _image_transport:=compressed

到這裡ROS和Android的開發環境基本配置成功