Home » autolabor2.5入门教程 » autolabor2.5入门教程-APP开发

autolabor2.5入门教程-APP开发

autolabor2.5入门教程-APP开发

说明:

  • 介绍如何开发autolabor2.5的APP

APP介绍:

1.基于ROSBridge和Unity3D开发

  • 脱离ROS开发是指客户端程序运行不依赖于ROS系统独立运行的开发方式.
  • 这样做的主要原因是为了避免对ROS的依赖.这样做会带来一些好处和一些缺点.
  • 缺点: 需要中间层对ROS的数据包进行转换, 需要自己实现一些数据格式,增加一些工作量.
  • 好处: 可以轻松把您的算法或控制程序轻松移植到各种平台上,可以用任何一种语言开发.
  • 举例而言,Autolabor2.5无雷达版的手机程序是基于游戏引擎Unity3D开发的.
  • rosbridge是比较常见的ros中间件功能包,也有很多语言的客户端实现,比较出名的是roslibjs
  • 下面以Autolabor2.5无雷达版附带的手机遥控程序为例,介绍在Unity3D开发环境下如何控制机器人.

2.Unity3D开发示例

  • 首先下载AutolaborMobileController的工程.
  • 下载解压到随意目录中确保本机已经安装好 Unity3D 5.3以上开发环境.
  • 如果没有安装,可以到Unity3D官网下载.
  • Unity3D是一个免费的游戏开发引擎,具备轻松跨平台的特性,开发语言是C#
  • 使用Unity3D打开刚才下载的工程.
  • 打开TestScene 这个场景
  • 在Canvas 这个物体上,有一个名叫RosTest1 的脚本,右键在弹出菜单内,选择Edit Script 即可打开.
  • 首先映入眼帘的是Start函数, 这个函数会在场景启动时被自动调用
void Start() {
    ros = new ROSBridgeWebSocketConnection("ws://192.168.1.1", 9090);
    ros.AddPublisher(typeof(TeleopPublisher));
    ros.Connect();
}
  • 首先创建了一个类型为RosBridgeWebSocket实例,并且指定了连接的地址和端口.
  • 这个实例将处理所有与ros core的事物.
  • 然后新增了一个Publisher对象,这个类型TeleopPublisher的对象类似一个模板
  • 定义了我们将来要发布的topic的名字和类型,它的内部定义是这样的.
public class TeleopPublisher : ROSBridgePublisher {
    public static string GetMessageTopic() {
        return "cmd_vel";
    }
    public static string GetMessageType() {
        return "geometry_msgs/Twist";
    }
    public static string ToYAMLString(VelocityMsg msg) {
        return msg.ToYAMLString();
    }
}
  • 我们需要控制机器人的移动,所以只要发布cmd_vel这个话题就可以了,这个话题的数据类型是“geometry_msgs/Twist”
  • 接下来是最核心的部分,接受屏幕触控操作,并向ros发布信息.
void Update() {
    Vector2 inputVector = new Vector2(CnInputManager.GetAxis("Horizontal"), CnInputManager.GetAxis("Vertical"));
    TwistMsg msg = new TwistMsg(new Vector3Msg(inputVector.ymaxLinearSpeed.value, 0.0, 0.0), new Vector3Msg(0.0, 0.0, -inputVector.xmaxAngularSpeed.value));
    ros.Publish(TeleopPublisher.GetMessageTopic(), msg);
    ros.Render();
}
  • Update是Unity3D内部定义的一个函数,它会在每次渲染时调用.

  • 当这个方法被运行时,首先会从触控组件中取出摇杆偏移的坐标, 保存到inputVector里.

  • 之后会把偏移的坐标进行简单的计算, 封装到一个Vector3Msg类型的实例里. 从而把屏幕偏移转化为速度和旋转角度.

  • 再封装到一个TwistMsg实例中,交给RosBridge组件进行发布.

  • 最后一个函数是 OnApplicationQuit, 功能也比较简单:在程序退出的时候,断开rosbridge的连接,代码如下.

void OnApplicationQuit() {
    if (ros != null) { ros.Disconnect(); }
}
  • 通过以上简单的代码,我们就可以实现用手机对Autolabor2.5无雷达版的控制了.

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: autolabor2.5入门教程