对于一些在配置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
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac
java -version
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)
sudo nano /etc/profile
在最下面添加:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
可以在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
./studio
接下来就是android studio的安装,这个就不讲了…Google或百度一下一大堆
安装的时候SDK的位置选择最好不要选在root文件夹下 访问的时候会有点麻烦
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
在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
如果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全部勾上安装吧 省得后面麻烦
mkdir -p ~/rosjava/src
wstool init -j4 ~/rosjava/src https://raw.githubusercontent.com/rosjava/rosjava/indigo/rosjava.rosinstall
source /opt/ros/indigo/setup.bash
cd ~/rosjava
rm /etc/ros/rosdep/sources.list.d/20-default.list
然后继续
sudo rosdep init
rosdep update
rosdep install --from-paths src -i -y
catkin_make
安装完成
rosdep update之前一定要输入sudo rosdep init
如果不行可以尝试更换软件源再试一试
mkdir -p ~/android_core
wstool init -j4 ~/android_core/src https://raw.github.com/rosjava/rosjava/indigo/android_core.rosinstall
cd ~/android_core
catkin_make
安装完成
要么SDK路径配置有误,要么SDK装少了版本…
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
把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了
导入项目: File - New - Import Project 选择 android_core/src下android_tutorial_pubsub
下载gradle-2.2.1版本 然后解压 Gradle下载网址 https://services.gradle.org/distributions/
在Settings搜索Gradle 勾选Use local gradle distribution 然后选择gradle-2.2.1所在目录
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’这行
接下来应该可以成功运行项目到手机了
echo export ROS_IP=192.168.1.101 >> ~/.bashrc
roscore
rostopic echo /chatter
正常情况下以下包可能已经安装:
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的开发环境基本配置成功