lb8820265 发表于 2022-11-8 23:14

42“万里”树莓派小车——ROS学习(Android使用ROSBridge控制小乌龟)

<div class='showpostmsg'> 本帖最后由 lb8820265 于 2022-11-8 23:14 编辑

<p><span style="font-size:16px;">&nbsp; &nbsp; 前面通过网页<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;">&nbsp; &nbsp; 从Android源码开始学习并不是最好的方法,由于环境不一样,直接编译不一定能通过,移植到自己工程也不一定能成功,所有这里介绍从零开始新建ROSBridge工程。</span></p>

<p><span style="font-size:18px;"><strong>0. 下载源码</strong></span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; 下载链接在帖子最后。</span></p>

<p><span style="font-size:18px;"><strong>1. 新建AS工程</strong></span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; 本帖采用Android Studio 4.1,新建一个空白工程,包名为&ldquo;Lb_ROSBridge_Turtle&rdquo;。</span></p>

<p><span style="font-size:16px;"><strong>&nbsp;</strong></span><span style="font-size:18px;"><strong> 2. 复制例程文件到新工程</strong></span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; &nbsp;复制&ldquo;libs&rdquo;文件夹内的文件到新工程对应位置。</span></p>

<p><span style="font-size:16px;"></span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; 复制&ldquo;jilk&rdquo;文件夹到新工程对应位置。</span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; &nbsp; 替换&ldquo;activity_main.xml&rdquo;布局文件到新工程对应位置。如果包名不同,记得修改文件中tools:context的包路径。</span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; &nbsp; 替换&ldquo;MainActivity.java&rdquo;与复制&ldquo;RCApplication.java&rdquo;文件到新工程对应位置,如果包名不同,记得要修改文件首行的包名。</span></p>

<p><span style="font-size:16px;"></span></p>

<p><span style="font-size:16px;">&nbsp;</span><span style="font-size:18px;"> &nbsp;<strong>&nbsp;3. 修改&ldquo;AndroidManifest.xml&rdquo;文件</strong></span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; &nbsp;添加权限</span></p>

<pre>
<code class="language-html">&lt;uses-permission android:name="android.permission.INTERNET"/&gt;
&lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&gt;</code></pre>

<p><span style="font-size:16px;">&nbsp; &nbsp; 关联Application</span></p>

<pre>
<code class="language-html">android:name="com.example.lb_rosbridge_turtle.RCApplication"</code></pre>

<p><span style="font-size:16px;">&nbsp; &nbsp; 允许让外部组件启动(在Android 12版本以上手机上需要)</span></p>

<pre>
<code class="language-java">android:exported="true"</code></pre>

<p><span style="font-size:18px;"><b>4. 修改&ldquo;build.gradle&rdquo;文件</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;">&nbsp; &nbsp; &nbsp;所有编写均在&ldquo;MainActivity.java&rdquo;文件中。</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;">&nbsp; &nbsp; &nbsp;订阅和发布信息都是同一指令。</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;">&nbsp; &nbsp; 上面只是主要的流程,详细的代码查看源代码。</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;">&nbsp; &nbsp; 可以通过在线仿真或者直接安装APP。</span></p>

<p><span style="font-size:16px;"><strong>1. 输入树莓派IP</strong></span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; 需要手机和树莓派在同一个局域网中。</span></p>

<p><span style="font-size:16px;"><strong>2. 点击&ldquo;连接&rdquo;</strong></span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; 连接正常,连接状态会显示&ldquo;已连接&rdquo;</span></p>

<p><span style="font-size:16px;"><strong>3. 点击&ldquo;订阅位置&rdquo;</strong></span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; 也就是发送订阅指令,随后树莓派会不停的发送位置信息给手机</span></p>

<p><span style="font-size:16px;"><strong>4. 输入控制参数</strong></span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; 滑动拖动条来选择控制参数,控制参数有:直行速度、横向速度和转向速度。</span></p>

<p><span style="font-size:16px;"><strong>5. 点击&ldquo;发布&rdquo;</strong></span></p>

<p><span style="font-size:16px;">&nbsp; &nbsp; 将控制参数发布出去,树莓派小乌龟就会根据运动参数开始运动。</span></p>

<h2><span style="font-size:16px;"></span></h2>

<h2><span style="font-size:16px;">&nbsp;</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>

Jacktang 发表于 2022-11-10 08:13

<p>先新建ROSBridge工程文件,进行ROS学习学习是个好习惯</p>

leilei0000 发表于 2023-2-22 15:36

<table cellpadding="0" cellspacing="0">
        <tbody>
                <tr>
                        <td id="postmessage_3187642">
                        <p>先新建ROSBridge工程文件,进行ROS学习学习是个好习惯</p>
                        </td>
                </tr>
        </tbody>
</table>

lkh747566933 发表于 2023-11-25 01:54

买了一个树莓派4B 2G版的,可惜忙的要死,买回来就接灰了。而且后面还降价了一多半
页: [1]
查看完整版本: 42“万里”树莓派小车——ROS学习(Android使用ROSBridge控制小乌龟)