前面通过网页使用ROSBridge控制小乌龟,这里介绍使用Android手机来控制小乌龟。
从Android源码开始学习并不是最好的方法,由于环境不一样,直接编译不一定能通过,移植到自己工程也不一定能成功,所有这里介绍从零开始新建ROSBridge工程。
0. 下载源码
下载链接在帖子最后。
1. 新建AS工程
本帖采用Android Studio 4.1,新建一个空白工程,包名为“Lb_ROSBridge_Turtle”。
2. 复制例程文件到新工程
复制“libs”文件夹内的文件到新工程对应位置。
复制“jilk”文件夹到新工程对应位置。
替换“activity_main.xml”布局文件到新工程对应位置。如果包名不同,记得修改文件中tools:context的包路径。
替换“MainActivity.java”与复制“RCApplication.java”文件到新工程对应位置,如果包名不同,记得要修改文件首行的包名。
3. 修改“AndroidManifest.xml”文件
添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
关联Application
android:name="com.example.lb_rosbridge_turtle.RCApplication"
允许让外部组件启动(在Android 12版本以上手机上需要)
android:exported="true"
4. 修改“build.gradle”文件
添加libs文件夹库路径
implementation fileTree(include: ['*.jar'], dir: 'libs')
二、ROSBridge工作流程
所有编写均在“MainActivity.java”文件中。
1. 注册EventBus,用于接收消息
EventBus.getDefault().register(this);
2. 调用connect,用于连接树莓派服务器
connect(String ip, String port)
3. 获取已经连接的Rosbridgeclient类的实例
client = ((RCApplication)getApplication()).getRosClient();
4. 发送数据给服务端
client.send(msg);
订阅和发布信息都是同一指令。
5. 获取服务端数据
onEvent(final PublishEvent event)
上面只是主要的流程,详细的代码查看源代码。
树莓派服务端操作
1. 启动内核
roscore
2. 启动小乌龟
rosrun turtlesim turtlesim_node
3. 开启rosbridgea服务
roslaunch rosbridge_server rosbridge_websocket.launch
手机端操作
0. 运行APP
可以通过在线仿真或者直接安装APP。
1. 输入树莓派IP
需要手机和树莓派在同一个局域网中。
2. 点击“连接”
连接正常,连接状态会显示“已连接”
3. 点击“订阅位置”
也就是发送订阅指令,随后树莓派会不停的发送位置信息给手机
4. 输入控制参数
滑动拖动条来选择控制参数,控制参数有:直行速度、横向速度和转向速度。
5. 点击“发布”
将控制参数发布出去,树莓派小乌龟就会根据运动参数开始运动。
先新建ROSBridge工程文件,进行ROS学习学习是个好习惯 |