基于ROS和安卓手机的IMU参数的通信软件

本文介绍如何在已安装ROS和Android Studio的环境下,利用ROSJava创建一个简单的应用,实现Android手机IMU参数与ROS系统的通信。首先从指定仓库下载对应ROS版本的app,然后导入Android Studio并取消build.gradle更新,选择一个模块运行验证。接着新建一个模块,让MainActivity继承RosActivity,添加RosActivity依赖。编写ImuPublisher类用于发布IMU数据,并在MainActivity中实现相关逻辑。通过布局文件和AndroidManifest.xml配置,最终能在终端看到手机IMU的加速度、角速度和方向参数。
摘要由CSDN通过智能技术生成

版权声明:本文为博主原创文章,未经博主允许不得转载。

标签(空格分隔): rosjava android手机 IMU


前提是成功安装好ROS和android studio,并且能够成功运行android_core中实例。

本文采用的是在别人建好的app中新建一个ros android app,简单快速度的一种方法。

1、下载相关的app
注意要和你安装的ROS版本对应,我采用的是indigo版本。
https://github.com/rosjava/android_apps/tree/indigo

2、导入android_apps
在android studio 中导入下载好的android_apps,在弹出的是否更新build.gradle窗口选择【cancle】,选择其中一个moudle进行编译运行,成功后就可以新建自己需要的app

3、新建app
在android_core中新建moudle,最小api设置为10,选择empty Activity 的moudle。
(1) 将MainActivity继承RosActivity,点击RosActivity后使用【alt+enter】添加RosActivity的依赖库,接着导入包import org.ros.android.RosActivity;
(2) 重写init方法和一个结构体。先编写 rosjava发布者ImuPublisher,新建一个ImuPublisher.class类,具体代码如下:

public class ImuPublisher implements NodeMain {
   
    private ImuThread imuThread;
    private SensorListener sensorListener;
    private SensorManager sensorManager;
    private Publisher<Imu> publisher;
    public ImuPublisher(SensorManager msensorManager) {
        this.sensorManager = msensorManager;
    }
    @Override
    public GraphName getDefaultNodeName() {
        return GraphName.of("android_sensors_driver/imuPublisher");
    }
    public interface NodeMain extends NodeListener {
   
        GraphName getDefaultNodeName();
    }
    @Override
    public void onStart(ConnectedNode connectedNode) {
        try
        {
            //主题为"android/imu"    消息类型为 "sensor_msgs/Imu" ,是标准类型的消息
            this.publisher = connectedNode.newPublisher("android/imu","sensor_msgs/Imu");
            int i = this.sensorManager.getSensorList(1).size();
            boolean hasAccel = false;
            if (i > 0)
                hasAccel = true;
            int j = this.sensorManager.getSensorList(4).size();
            boolean hasGyro = false;
            if (j > 0)
                hasGyro = true;
            int k = this.sensorManager.getSensorList(11).size();
            boolean hasQuat = false;
            if (k > 0)
                hasQuat = true;
            this.sensorListener = new SensorListener(publisher, hasAccel, hasGyro, hasQuat);
            this.imuThread = new ImuThread(this.sensorManager, sensorListener);
            this.imuThread.start();
        }catch (Exception e){
            if(connectedNode != 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值