主要内容

在RViz中可视化Android设备的传感器数据

这个例子展示了如何使用Simulink®Android设备支持包在ROS可视化(RViz)工具上生成一个Android™应用程序来可视化来自Android设备的实时传感器数据。金宝app金宝app在这个例子中,传感器数据,如设备的方向,角速度和加速度是可视化的。您的计算机已配置为ROS master, Android设备已配置为ROS client。设备通过ROS (Robot Operating System)接口与计算机连接。来自设备的传感器数据使用运行在计算机上的RViz工具进行可视化。

需求

硬件需求

  • Android设备

  • USB电缆

软件需求

在你的电脑中安装以下产品:下载188bet金宝搏

的必备条件

简介

机器人操作系统(ROS)是一个通信接口,使机器人系统的不同部分能够发现、发送和接收数据。使用ToAppblock从Simulink支金宝app持包为A金宝appndroid设备,您可以与ros支持的物理机器人或机器人模拟器,如Gazebo交换数据。有关更多信息,请参见ROS概念的网页。

第一步:在电脑上运行凉亭模拟器

1.完成下载虚拟机开始凉亭和模拟乌龟机器人(ROS工具箱)的例子。

2.在下载的虚拟机上打开ROS Melodic Terminal。

3.在ROS Melodic Terminal中执行该命令,可以使ROS节点之间通信。

roscore

步骤2:使用Simulink生成Android项目金宝app

本节解释如何从Simulink模型生成Android项目。金宝app

打开Simulin金宝appk模型

1.用USB线将Android设备连接到计算机。

2.安装金宝appAndr金宝appoid设备的Simulink支持包.如果已安装支持包,请跳过此步骤。金宝app

3.在Simuli金宝appnk编辑器中,打开IMUControl模型。这个模型被预先配置为在Android设备上运行。模型有这些块:

  • 取向:块读取设备的旋转使用三个角度量:pitch (aroundx-轴),滚(绕y-轴)和方位角(绕z-轴)。

  • 加速度计:块读取加速度沿x-,y- - - - - -,z-设备方向。

  • 陀螺仪:块读取沿轴的旋转速率x-,y- - - - - -,z-设备方向。

  • MATLAB函数: MATLAB函数块转换函数的输出取向块到四元数角。

  • ToApp:块接收来自设备的传感器数据,并将数据发送到ROS发布方法。的ROS发布方法将数据发布到RViz。

  • 范围:显示模拟过程中产生的信号。

配置Simulink模型金宝app

1.在Simuli金宝appnk编辑器中,选择模拟>型号配置参数

2.在“配置参数”对话框中,选择硬件实现

3.设置硬件板参数Android设备.属性中的参数将自动填充硬件板设置Android的默认值。

a.从列表下目标硬件资源中,选择设备的选择

b.从设备列表,选择你的Android设备。如果您的设备不在列表中,请单击刷新

请注意:如果您的设备在单击后仍未列出刷新按钮,确保已启用USB调试您的设备上的选项。要启用USB调试,输入androidhwsetup在MATLAB命令窗口,并按照屏幕上的指示。

4.点击应用.点击好吧关闭对话框。

在Androi金宝appd设备上部署Simulink模型

硬件选项卡中的Simuli金宝appnk模型模式部分中,选择在船上跑然后点击构建、部署和启动.模型窗口的左下角显示了Simulink在硬件上准备、下载和部署模型时的状态。金宝app成功部署模型后,在MATLAB build文件夹中生成一个项目文件MATLAB_build_folder / modelName_ert_rtw / modelName.例如,李:/ workspace / IMUControl / IMUControl_ert_rtw / IMUControl

步骤3:在Android Studio中导入项目并添加ROS依赖项

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'
afterEvaluate{项目->
android {
//排除一些在依赖关系中重复的文件,防止打包Android应用程序。
packagingOptions {
排除“META-INF/LICENSE.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 " / >
  • 位置3-添加活动而且服务之后的部分活动部分。


              
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—将这些ROS users -permissions添加到列出的users -permission下面。

< 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”))

a.复制这些文件并粘贴到src>主要>java>com.example.IMUControl项目的文件夹。在这里,IMUControl是项目的名称。

  • ROSMainActivity.java

  • PublishNode.java

  • MainActivity.java

  • MWNodeMainExecutorListener.java

  • MWNodeMainExecutorService.java

  • MWNodeMainExecutorServiceListener.java

b.保存main。xmlsrc>主要>res>布局项目的文件夹。

c.保存mwstyle.xmlsrc>主要>res>项目的文件夹。

6.打开IMUControl.java文件位于src>主要>java>com.example.IMUControl项目的文件夹。在这里,IMUControl是项目的名称。通过更改图像中标记位置的代码来更新文件。

  • 位置1—添加ROS导入语句。

进口org.ros.node.NodeConfiguration;
进口org.ros.node.NodeMainExecutor;
  • 位置2——取代AppCompactActivityROSMainActivity

  • 位置3-添加PublishNode语句之前的定义CountDownTimer方法。

PublishNode pn;
  • 位置4-添加ROSPublish而且初始化方法定义之前的naMain方法。

ROSPublish(double[] data)
If (pn != null)
pn.publishData(数据);
protected void init(NodeMainExecutor) {
pn = new PublishNode("/android/imu","sensor_msgs/ imu");
NodeConfiguration NodeConfiguration = nodeconfigure . newpublic (getRosHostname());
nodeConfiguration.setMasterUri (getMasterUri ());
nodeMainExecutor。execute (pn, nodeConfiguration);

ROSPublish方法中的数据取向加速度计,陀螺仪块的Simulink模型。金宝app然后,该方法将数据发布到RViz (ROS master)。发布数据的数据类型取决于ROS主题的消息类型。在本例中,发布主题为/android/imu,消息类型为sensor_msg/ imu。您可以根据应用程序的需求使用不同的主题名称和消息类型。的初始化方法在创建ROS客户端后调用。在此函数中,您可以指定应用程序所需的发布者和订阅者的数量。在本例中,只需要一个发布者。

步骤4:在Android Studio中同步项目文件

在Android Studio中,单击现在同步按钮在Android Studio编辑器的右上角。

在同步项目时,您可能会看到以下错误消息。若要解决此问题,请单击错误消息中出现的链接。

请注意:错误信息中指定的构建工具版本号可能与计算机中安装的Android gradle插件版本不同。

步骤5:配置并运行Android设备作为ROS客户端

请注意:在继续之前,请确保您的计算机和Android设备连接到相同的Wi-Fi网络。

1.在Android Studio工具栏中,选择运行>运行“IMUControl”.Android Studio将应用程序安装到您的设备上。应用程序开始在设备上运行,并为您提供将设备配置为ROS主设备或ROS客户端设备的选项。

2.选择ROS的客户选项,并指定IP地址和端口号。本例中IP地址为192.255.88.128端口号为11311

3.单击,将设备连接到计算机连接.设备开始向计算机发送传感器数据。应用程序显示信号,这些信号表示来自设备的传感器数据在一定时间内。的y-轴表示传感器数据,而x-axis表示时间。

步骤6:在RViz中可视化传感器数据

1.在已安装的虚拟机中打开“ROS Melodic Terminal”,执行该命令。启动RViz工具。

rviz

2.要添加显示,单击添加按钮。显示侧边栏。

3.在“创建可视化”弹出窗口中,滚动到Imurviz_plugin_tutorial类别,然后单击好吧.一个Imu显示添加到显示侧边栏。

4.在显示侧边栏,单击Imu显示。相关联的属性列表Imu上市。

5.从属性列表中,设置主题/ android / imu.在Visualization窗口中,您现在将看到表示设备位置和方向的箭头。移动设备并观察箭头位置的变化。

此插图显示了当设备面向向上时可视化窗口中的箭头。

另请参阅

从Android设备使用ROS设置凉亭模拟器上Bebop无人机的位置