You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio中使用Java搭建ROS(机器人操作系统)开发环境?

在Android Studio中为Java项目添加ROS支持的有效步骤

环境准备

  • 安装Android Studio Arctic Fox及以上版本,避免Gradle兼容性问题
  • 本地部署ROS Noetic(LTS版本,rosjava支持最稳定),执行以下命令安装rosjava核心组件:
    sudo apt-get install ros-noetic-rosjava-core
    
    Windows用户建议用WSL2部署ROS Noetic,rosjava依赖ROS本地工具链

配置Android项目Gradle

  1. 创建空Android Java项目,最低SDK设置为API 24(Android 7.0),rosjava对低版本系统兼容性有限
  2. 修改项目根目录的build.gradle,在allprojects.repositories中添加rosjava的Maven仓库:
    allprojects {
        repositories {
            google()
            mavenCentral()
            maven { url 'https://raw.githubusercontent.com/rosjava/rosjava_mvn_repo/master' }
        }
    }
    
  3. 修改app模块的build.gradle:
    • 添加rosjava核心依赖:
      dependencies {
          // 基础rosjava库
          implementation 'org.ros.rosjava_core:rosjava:[0.4,0.5)'
          // 标准消息类型,可按需添加其他消息包
          implementation 'org.ros.rosjava_messages:std_msgs:0.5.11'
      }
      
    • 配置NDK支持(ROS依赖JNI):
      android {
          defaultConfig {
              ndk {
                  abiFilters 'armeabi-v7a', 'arm64-v8a'
              }
          }
      }
      
    • 开启Java 8支持:
      android {
          compileOptions {
              sourceCompatibility JavaVersion.VERSION_1_8
              targetCompatibility JavaVersion.VERSION_1_8
          }
      }
      

编写基础ROS代码示例

1. 创建ROS发布者节点

import org.ros.namespace.GraphName;
import org.ros.node.AbstractNodeMain;
import org.ros.node.ConnectedNode;
import org.ros.node.CancellableLoop;
import org.ros.node.topic.Publisher;
import std_msgs.String;

public class TalkerNode extends AbstractNodeMain {
    @Override
    public GraphName getDefaultNodeName() {
        return GraphName.of("android_talker");
    }

    @Override
    public void onStart(ConnectedNode connectedNode) {
        // 创建话题发布者,话题名chatter,消息类型std_msgs/String
        final Publisher<std_msgs.String> publisher = connectedNode.newPublisher("chatter", std_msgs.String._TYPE);
        
        // 循环发布消息
        connectedNode.executeCancellableLoop(new CancellableLoop() {
            private int sequenceNum = 0;

            @Override
            protected void setup() {
                sequenceNum = 0;
            }

            @Override
            protected void loop() throws InterruptedException {
                std_msgs.String msg = publisher.newMessage();
                msg.setData("Hello ROS from Android! " + sequenceNum);
                publisher.publish(msg);
                sequenceNum++;
                Thread.sleep(1000);
            }
        });
    }
}

2. 在Activity中初始化ROS连接

直接继承rosjava提供的RosActivity,它已封装ROS连接的生命周期管理:

import android.os.Bundle;
import org.ros.android.RosActivity;
import org.ros.node.NodeConfiguration;
import org.ros.node.NodeMainExecutor;

public class MainActivity extends RosActivity {
    public MainActivity() {
        // 构造参数:应用名称、通知栏标题
        super("Android ROS Demo", "Android ROS Demo");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void init(NodeMainExecutor nodeMainExecutor) {
        // 配置节点:使用设备自身IP,关联ROS Master地址
        NodeConfiguration nodeConfig = NodeConfiguration.newPublic(getRosHostname());
        nodeConfig.setMasterUri(getMasterUri());
        
        // 启动ROS节点
        nodeMainExecutor.execute(new TalkerNode(), nodeConfig);
    }
}

配置Android权限

在AndroidManifest.xml中添加网络权限,确保设备能和ROS Master通信:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

<application ...>
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

运行调试

  1. 在ROS主机上启动Master:roscore
  2. 确保Android设备和ROS主机在同一局域网内
  3. 运行Android项目,启动后输入ROS Master的URI(格式:http://[主机IP]:11311)
  4. 在ROS主机上执行rostopic echo /chatter,即可看到Android设备发送的ROS消息

内容的提问来源于stack exchange,提问作者xeniosth19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:56:26