这个例子展示了如何使用Simulink®Android设备支持包在ROS可视化(RViz)工具上生成一个Android™应用程序来可视化来自Android设备的实时传感器数据。金宝app金宝app在本例中,设备的方向、角速度和加速度等传感器数据是可视化的。您的计算机配置为ROS master, Android设备配置为ROS client。设备通过ROS (Robot Operating System)接口与计算机连接。通过在计算机上运行的RViz工具,可以可视化设备的传感器数据。
硬件需求
Android设备
USB电缆
软件需求
在您的计算机中安装这些产品:下载188bet金宝搏
MATLAB®(R2018a或更高版本)
金宝appSimulink (R2018a或更高版本)
机器人系统工具箱™
一个MathWorks®提供的虚拟机(VM)
通过使用配置Android设备androidhwsetup
.
完成Android设备入门的例子。
ROS (Robot Operating System)是一个通信接口,使机器人系统的不同部分能够发现、发送和接收数据。使用ToApp您可以与支持ros的物理机器人金宝app或机器人金宝app模拟器(如Gazebo)交换数据。有关更多信息,请参见ROS和概念部分在ROS网站上。
1.完成下载虚拟机一步的开始使用凉亭和模拟乌龟机器人(ROS工具箱)的例子。
2.在下载的虚拟机上打开ROS Melodic Terminal。
3.若要开启ROS节点间的通信,请在ROS Melodic Terminal中执行此命令。
roscore
本节解释如何从Simulink模型生成一个Android项目。金宝app
打开Simulin金宝appk模型
1.用USB数据线将Android设备连接到你的电脑上。
2.安装金宝appAndr金宝appoid设备的Simulink支持包.如果已经安装支持包,请跳过此步骤。金宝app
3.在Simuli金宝appnk编辑器中,打开IMUControl
模型。该模型预先配置为在Android设备上运行。模型有这些块:
配置Simulink模型金宝app
1.在Simuli金宝appnk编辑器中,选择模拟>模型配置参数.
2.在“配置参数”对话框中,选择硬件实现.
3.设置硬件板参数Android设备
.属性中的参数将自动填充硬件板设置Android的默认值。
的。组列表下目标硬件资源中,选择设备的选择.
的b。设备列表,选择您的Android设备。如果您的设备不在列表中,单击刷新.
请注意:如果您的设备没有列出,即使点击刷新按钮,确保您已启用USB调试选择您的设备。要启用USB调试,输入androidhwsetup
,并按照屏幕上的说明操作。
4.点击应用.点击好吧关闭对话框。
在Androi金宝appd设备上部署Simulink模型
在硬件选项卡中的金宝app模式部分中,选择机上运行然后点击构建、部署和启动.模型窗口的左下角显示Simulink准备、下载和在硬件上部署模型时的状态。金宝app成功部署模型后,在MATLAB的build文件夹中生成一个项目文件MATLAB_build_folder / modelName_ert_rtw / modelName.例如,李:/ workspace / IMUControl / IMUControl_ert_rtw / IMUControl
.
1.按照下面的步骤将生成的项目导入到Android Studio导入项目到谷歌Android Studio.
2.选择项目选项来自“文件资源管理器”上方左上角的下拉菜单。
3.打开build.gradle文件,并通过更改图像中标记位置的代码来更新文件。
位置1-将这一行添加到buildscript部分。
应用:“https://github.com/rosjava/android_core/raw/kinetic/buildscript.gradle”
位置2-把这些行添加到allprojects部分。
应用插件:“ros-android”
在评估{项目->
android {
//排除一些在依赖项之间重复的文件,并防止打包Android应用程序。
packagingOptions {
exclude“META-INF/LICENSE.txt”exclude“META-INF/NOTICE.txt”
}
}
}
位置3-在列表下面添加这些ROS依赖项依赖关系.
实现“org.ros.rosjava_core: rosjava:(0.3.2, 0.4)”
实现“org.ros.rosjava_messages: diagnostic_msgs:[1.12, 1.13)”
实现“org.ros.rosjava_messages: sensor_msgs:[1.12, 1.13)”
实现“org.ros.rosjava_messages: geometry_msgs:[1.12, 1.13)”
实现“org.ros.rosjava_core: rosjava_geometry: 0.3.6”
实现“org.ros.rosjava_messages: visualization_msgs: [1.12, 1.13) '
实现“org.ros.rosjava_bootstrap: message_generation:[0.3, 0.4)”
实现“org.ros.rosjava_messages: std_msgs: 0.5.11”
4.打开AndroidManifest.xml文件位于src>主要项目的文件夹。通过更改图像中标记位置的代码来更新文件。
位置1-将此代码添加到应用程序标签。
xmlns:工具= " http://schemas.android.com/tools "工具:取代=“android:图标”
位置2——取代行动和类别部分。
<行动android: name = " com.android.ros金宝appupport.START_MODEL " / >
<类别android: name = " android.intent.category.DEFAULT " / >
位置3——添加活动和服务章节紧接在活动部分。
<活动android: label = " @string / app_name”android: name = "。MainActivity”
android:主题= " @style / MWAppTheme " android: configChanges =“拉取向|”>
<意图过滤器>
<行动android: name = " android.intent.action.MAIN " / >
<类别android: name = " android.intent.category.LAUNCHER " / >
< /意图过滤器>
> < /活动
<服务android: name = "。MWNodeMainExecutorService”
工具:忽视= " ExportedService " >
<意图过滤器>
<行动android: name = " org.ros.android.NodeMainExecutorService " / >
< /意图过滤器>
< /服务>
位置4—在列出的use -permission下面添加这些ROS use -permissions。
< uses-permission android: name = " android.permission.FOREGROUND_SERVICE " / >
< uses-permission android: name = " android.permission.WRITE_EXTERNAL_STORAGE " / >
< uses-permission android: name = " android.permission.ACCESS_WIFI_STATE " / >
< uses-permission android: name = " android.permission.CHANGE_WIFI_STATE " / >
< uses-permission android: name = " android.permission.WAKE_LOCK " / >
< uses-permission android: name = " android.permission.SYSTEM_ALERT_WINDOW " / >
5.在MATLAB命令窗口中使用下面的命令更改MATLAB当前文件夹:
cd (fullfile (matlabshare金宝appd.supportpkg.getSupportPackageRoot,“工具箱”,“目标”,“金宝appsupportpackages”,“android”,“androidexamples”,“ROSonAndroid”,“IMUControl”))
复制这些文件并粘贴到src>主要>java>com.example.IMUControl项目的文件夹。在这里,IMUControl是项目的名称。
ROSMainActivity.java
PublishNode.java
MainActivity.java
MWNodeMainExecutorListener.java
MWNodeMainExecutorService.java
MWNodeMainExecutorServiceListener.java
b。保存main。xml文件src>主要>res>布局项目的文件夹。
c。保存mwstyle.xml文件src>主要>res>值项目的文件夹。
6.打开IMUControl.java文件位于src>主要>java>com.example.IMUControl项目的文件夹。在这里,IMUControl是项目的名称。通过更改图像中标记位置的代码来更新文件。
位置1—添加ROS导入语句。
进口org.ros.node.NodeConfiguration;
进口org.ros.node.NodeMainExecutor;
位置2——取代AppCompactActivity与ROSMainActivity.
位置3——添加PublishNode语句前的定义CountDownTimer方法。
PublishNode pn;
位置4——添加ROSPublish和初始化方法定义之前的定义naMain方法。
public void ROSPublish(double[] data)
{
如果(pn ! = null)
pn.publishData(数据);
}
protected void init(NodeMainExecutor NodeMainExecutor) {
pn = new PublishNode("/android/imu","sensor_msgs/ imu");
nodeconconfiguration nodeconconfiguration = nodeconconfiguration . newpublic (getRosHostname());
nodeConfiguration.setMasterUri (getMasterUri ());
nodeMainExecutor。execute (pn, nodeConfiguration);
}
的ROSPublish方法从取向,加速度计,陀螺仪块的Simulink模型。金宝app然后,该方法将数据发布到RViz (ROS master)。已发布数据的数据类型取决于ROS主题的消息类型。在本例中,发布主题为/android/imu,消息类型为sensor_msg/ imu。您可以根据应用程序的需求使用不同的主题名称和消息类型。的初始化方法在创建ROS客户端后调用。在这个函数中,您可以指定应用程序所需的发布者和订阅者的数量。在本例中,只需要一个发布者。
在Android Studio中,点击现在同步按钮在Android Studio编辑器的右上角。
在同步项目时,您可能会看到以下错误消息。要解决此问题,请单击错误消息中出现的链接。
请注意:根据计算机中安装的Android gradle插件的版本不同,错误信息中指定的构建工具版本号可能会有所不同。
请注意:继续操作前,请确保您的计算机和Android设备连接到同一个Wi-Fi网络。
1.在Android Studio工具栏中,选择运行>运行“IMUControl”.Android Studio会在你的设备上安装应用程序。应用程序开始在设备上运行,并提供选项将设备配置为ROS主设备或ROS客户端。
2.选择ROS的客户选项,指定IP地址和端口号。在此例中,IP地址为192.255.88.128
端口号是11311
.
3.要将设备连接到计算机,请单击连接.设备开始向计算机发送传感器数据。该应用程序显示在一定时间内代表来自设备的传感器数据的信号。的y-轴表示传感器数据,而x设在代表时间。
1.在您的计算机上安装的虚拟机上打开ROS Melodic Terminal并执行此命令。启动RViz工具。
rviz
2.要添加显示,请单击添加按钮下显示侧边栏。
3.在“创建可视化”弹出窗口中,滚动到Imu下rviz_plugin_tutorial类别,然后单击好吧.一个Imu显示添加到显示侧边栏。
4.在显示侧边栏,单击Imu显示。关联的属性列表Imu上市。
5.从属性列表中,设置主题来/ android / imu
.在可视化窗口中,您现在将看到一个箭头,表示设备的位置和方向。移动设备并观察箭头位置的变化。
下图显示了当设备面向上方向时可视化窗口中的箭头。