42“万里”树莓派小车——ROS学习(Android使用ROSBridge控制小乌龟)
<div class='showpostmsg'> 本帖最后由 lb8820265 于 2022-11-8 23:14 编辑<p><span style="font-size:16px;"> 前面通过网页<a href="https://bbs.eeworld.com.cn/thread-1223277-1-1.html" target="_blank">使用ROSBridge控制小乌龟</a>,这里介绍使用Android手机来控制小乌龟。</span></p>
<h2><span style="font-size:20px;"><b>一、从零开始新建ROSBridge工程</b></span></h2>
<p><span style="font-size:16px;"> 从Android源码开始学习并不是最好的方法,由于环境不一样,直接编译不一定能通过,移植到自己工程也不一定能成功,所有这里介绍从零开始新建ROSBridge工程。</span></p>
<p><span style="font-size:18px;"><strong>0. 下载源码</strong></span></p>
<p><span style="font-size:16px;"> 下载链接在帖子最后。</span></p>
<p><span style="font-size:18px;"><strong>1. 新建AS工程</strong></span></p>
<p><span style="font-size:16px;"> 本帖采用Android Studio 4.1,新建一个空白工程,包名为“Lb_ROSBridge_Turtle”。</span></p>
<p><span style="font-size:16px;"><strong> </strong></span><span style="font-size:18px;"><strong> 2. 复制例程文件到新工程</strong></span></p>
<p><span style="font-size:16px;"> 复制“libs”文件夹内的文件到新工程对应位置。</span></p>
<p><span style="font-size:16px;"></span></p>
<p><span style="font-size:16px;"> 复制“jilk”文件夹到新工程对应位置。</span></p>
<p><span style="font-size:16px;"> 替换“activity_main.xml”布局文件到新工程对应位置。如果包名不同,记得修改文件中tools:context的包路径。</span></p>
<p><span style="font-size:16px;"> 替换“MainActivity.java”与复制“RCApplication.java”文件到新工程对应位置,如果包名不同,记得要修改文件首行的包名。</span></p>
<p><span style="font-size:16px;"></span></p>
<p><span style="font-size:16px;"> </span><span style="font-size:18px;"> <strong> 3. 修改“AndroidManifest.xml”文件</strong></span></p>
<p><span style="font-size:16px;"> 添加权限</span></p>
<pre>
<code class="language-html"><uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/></code></pre>
<p><span style="font-size:16px;"> 关联Application</span></p>
<pre>
<code class="language-html">android:name="com.example.lb_rosbridge_turtle.RCApplication"</code></pre>
<p><span style="font-size:16px;"> 允许让外部组件启动(在Android 12版本以上手机上需要)</span></p>
<pre>
<code class="language-java">android:exported="true"</code></pre>
<p><span style="font-size:18px;"><b>4. 修改“build.gradle”文件</b></span></p>
<p><span style="font-size:16px;">添加libs文件夹库路径</span></p>
<p><span style="font-size:16px;"></span></p>
<pre>
<code class="language-html">implementation fileTree(include: ['*.jar'], dir: 'libs')</code></pre>
<p><span style="font-size:20px;"><b>二、ROSBridge工作流程</b></span></p>
<p><span style="font-size:16px;"> 所有编写均在“MainActivity.java”文件中。</span></p>
<p><strong><span style="font-size:18px;">1. 注册EventBus,用于接收消息</span></strong></p>
<pre>
<code class="language-cpp">EventBus.getDefault().register(this);</code></pre>
<p><strong><span style="font-size:18px;">2. 调用connect,用于连接树莓派服务器</span></strong></p>
<pre>
<code class="language-cpp">connect(String ip, String port)</code></pre>
<p><strong><span style="font-size:18px;">3. 获取已经连接的Rosbridgeclient类的实例</span></strong></p>
<pre>
<code class="language-cpp">client = ((RCApplication)getApplication()).getRosClient();</code></pre>
<p><span style="font-size:18px;"><strong>4. 发送数据给服务端</strong></span></p>
<pre>
<code class="language-cpp">client.send(msg);</code></pre>
<p><span style="font-size:16px;"> 订阅和发布信息都是同一指令。</span></p>
<p><span style="font-size:18px;"><strong>5. 获取服务端数据</strong></span></p>
<pre>
<code>onEvent(final PublishEvent event)</code></pre>
<p><span style="font-size: 16px;"> 上面只是主要的流程,详细的代码查看源代码。</span></p>
<h2><span style="font-size:20px;"><b>三、操作与演示</b></span></h2>
<p><span style="font-size:18px;"><b>树莓派服务端操作</b></span></p>
<p><span style="font-size:16px;"><strong>1. 启动内核</strong></span></p>
<pre>
<code class="language-bash">roscore</code></pre>
<p><span style="font-size:16px;"><strong>2. 启动小乌龟</strong></span></p>
<pre>
<code class="language-bash">rosrun turtlesim turtlesim_node</code></pre>
<p><span style="font-size:16px;"><strong>3. 开启rosbridgea服务</strong></span></p>
<pre>
<code class="language-bash">roslaunch rosbridge_server rosbridge_websocket.launch</code></pre>
<p><span style="font-size:18px;"><b>手机端操作</b></span></p>
<p><span style="font-size:16px;"><strong>0. 运行APP</strong></span></p>
<p><span style="font-size:16px;"> 可以通过在线仿真或者直接安装APP。</span></p>
<p><span style="font-size:16px;"><strong>1. 输入树莓派IP</strong></span></p>
<p><span style="font-size:16px;"> 需要手机和树莓派在同一个局域网中。</span></p>
<p><span style="font-size:16px;"><strong>2. 点击“连接”</strong></span></p>
<p><span style="font-size:16px;"> 连接正常,连接状态会显示“已连接”</span></p>
<p><span style="font-size:16px;"><strong>3. 点击“订阅位置”</strong></span></p>
<p><span style="font-size:16px;"> 也就是发送订阅指令,随后树莓派会不停的发送位置信息给手机</span></p>
<p><span style="font-size:16px;"><strong>4. 输入控制参数</strong></span></p>
<p><span style="font-size:16px;"> 滑动拖动条来选择控制参数,控制参数有:直行速度、横向速度和转向速度。</span></p>
<p><span style="font-size:16px;"><strong>5. 点击“发布”</strong></span></p>
<p><span style="font-size:16px;"> 将控制参数发布出去,树莓派小乌龟就会根据运动参数开始运动。</span></p>
<h2><span style="font-size:16px;"></span></h2>
<h2><span style="font-size:16px;"> </span><b>四、源码</b></h2>
<p><span style="font-size:16px;">GitHub:</span><span style="font-size:16px;"><a href="https://github.com/wanli-car/Examples/tree/master/Android/Lb_ROSBridge_Turtle" target="_blank"><u>https://github.com/wanli-car/Examples/tree/master/Android/Lb_ROSBridge_Turtle</u></a></span></p>
<p><span style="font-size:16px;">Gitee:</span><span style="font-size:16px;"><a href="https://gitee.com/wanli-car/Examples/tree/master/Android/Lb_ROSBridge_Turtle"><u>https://gitee.com/wanli-car/Examples/tree/master/Android/Lb_ROSBridge_Turtle</u></a></span></p>
<p><span style="font-size:16px;">APK安装包见帖子附件。</span></p>
</div><script> var loginstr = '<div class="locked">查看精华帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
}
</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>先新建ROSBridge工程文件,进行ROS学习学习是个好习惯</p>
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td id="postmessage_3187642">
<p>先新建ROSBridge工程文件,进行ROS学习学习是个好习惯</p>
</td>
</tr>
</tbody>
</table>
买了一个树莓派4B 2G版的,可惜忙的要死,买回来就接灰了。而且后面还降价了一多半
页:
[1]