BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

12
返回列表 发新帖
楼主: 蒜薹

Blender无人机控制

[复制链接]
 楼主| 发表于 2016-11-8 09:58:45 | 显示全部楼层
本帖最后由 蒜薹 于 2016-11-8 21:38 编辑

Blender平无人机控制界面-第二轮开发
开始时间:2016年10月
目标:连接真实的无人机飞行控制电路板和blender,实现真实无人机姿态在blender中的同步显示

一 简介
    2016年10月正式开始无人机第二阶段的开发,本轮开发始于无人机飞行控制电路板(简称飞控板,下同)调试,目标是实用blender控制真实的飞行控制芯片。主要涉及飞控板电路及程序优化设计、blender与飞控板的数据传输设计两个方面。
二 设备介绍
    无人机飞行控制相关设备包括最主体的飞行控制电路板(飞控板)、直接与飞控板进行无线数据传输的遥控器、连接电脑与电路板的转换接口设备USB转TTL、无线数据互传的数传模块等。
飞行控制电路板
    无人机飞行控制电路板(以下简称飞控板),以C/C++编写程序,通过Kei uVersion编译成可执行程序,通过硕飞编程器将可执行程序烧写到飞控板的Flash中。
    这个飞控板上包含一块CPU芯片(图1晶振下方),一个无线数据传输模块(晶振及配套的电容等),一个传感器芯片(集成了陀螺仪和加速度传感器)。无线数据传输模块不同于下方介绍的无线数传模块,这个无线模块是用来与遥控器配对的,不过目前还没连接上。传感器方面,陀螺仪用来输出飞机的姿态参数,包括俯仰角、翻滚角和航向角;加速度传感器用来输出三个轴向上的加速度值。结合这两套数据,可以计算出无人机的位置,但是目前还没有进行,也是下一步的目标。
    这个飞控板是开发版,包括电路原理和封装、程序设计编写烧录,都是由深圳大翰科技自行设计和开发的。我们番茄酱工作室在调试时得到了大翰科技的完全的支持,不仅得到飞控板,还有完整的源代码,更重要的是有大翰科技完整的人工技术支持,说的太委婉了,其实就是公司老板的全力支持!所以我们才能在一个月的时间里完成芯片的数据输出和程序调整。
USB转TTL模块
    将USB的数据以引脚的形式输出和输入,需要安装驱动。
    模块使用江苏沁恒(WCH)的USB转串口CH341芯片,支持Windows和Mac OS系统,驱动在官方网站下载。(驱动:http://www.wch.cn/download/CH341SER_EXE.html )
    使用串口调试程序sscon对模块的数据接收和发送进行检测。
无线数传模块
    一组无线模块含有两个独立的无线数传电路,两个电路已经设定好了无线通信,也就是这两个电路已经配对完成。
    这组数传模块是用来无线连接飞控板和电脑USB端口的。若不使用该模块,在目前的设备条件下,没有其他无线数据传输方式可以使用,要连接飞控板和电脑USB端口,就需要用信号线(实际使用排线)将飞控板的数据发送引脚和USB转串口的数据接收引脚(RXD)连接,并将USB转串口插入电脑的USB端,这样连接会妨碍飞控板的姿态调整,如改变俯仰、翻滚和航向,但是,实际上,最开始的时候我也用这种方法,但是在整套程序框架搭建完毕之后,就添加了无线数传模块。




   我所写的程序均遵循开源协议,允许大家封装和商业化使用。
   附件中包括了服务器(transfering.py)、blender端(recording_multi_controll.py)和无人机数据接收端(recording_multi_real.py)的代码
   感谢blenderCN社区朋友们的长期帮助和支持!

无人机控制界面程序.zip

5.28 KB, 下载次数: 307

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-8 09:59:23 | 显示全部楼层
本帖最后由 蒜薹 于 2016-11-8 21:39 编辑

Blender平无人机控制界面-第二轮开发
开始时间:2016年10月
目标:连接真实的无人机飞行控制电路板和blender

三 开发细节记录
     2016年10月末完成了各个模块的独立调试,包括USB转串口模块的驱动安装、电脑端sscom程序的控制,无线数传模块的USB转TTL模块接入、波特率调整和两个无线数传模块的通信,飞控板的USB转TTL模块接入、上电运行、输出数据在电脑端sscom程序中的检查。
    2016年11月初开始进行飞控板的具体调试。在深圳做无人机的朋友的远程协助下,成功地进行了飞行控制程序的修改、编译、烧写,并且通过USB转串口,成功地在电脑上看到了无人机的传感器数据,包括陀螺仪和加速度传感器。
    接着使用USB串口通信和socket网络传输,实现了用单片机生成数据并且通过本地电脑(win)读取,再通过服务器将数据传输至远程电脑(mac)的blender中,但数据并不是由飞控板产生的,而是使用两个USB转TTL模块,各连接一个无线数传模块,一个端口用sscom等时间间隔地发送数据,另一个端口用python接收。

接着将无人机飞控板的数据通过USB转TTL模块接入本地电脑(windows)的USB端口,配合本地电脑(windows)的串口通信将数据取得,再通过socket上传到服务器(Mac)。虚拟显示方面,作为显示平台的blender在Mac系统中,与windows下的数据上传程序一样,都属于客户端,两者的数据在服务器程序中进行交互。具体的交互方式和程序框架沿袭自无人机控制界面第一轮开发的结果,搞懂不大,可以参考。
    接着测试无线传输模块。无人机的数据原本是通过USB转TTL模块直接接入电脑的,但是受到信号线(这里使用排线)长度限制,飞控芯片不能自由变换姿态,因此在飞控板和电脑USB接口(实际上是USB转TTL模块)之间使用无线数传模块。飞控板方面,无线数传模块同样适用飞控板的电池供电,因此飞控板旁边有两个部件——电池和无线数传模块。
    由于目前的飞控板程序内只有三个姿态角(俯仰、翻滚和航向)的数据,没有坐标数据,这次(2016年11月7日)调试的目标是将无人机姿态实时传输到blender内,并在blender中同步显示。由于之前的工作已经解决了网络数据传输和串口通信的问题,数据传输方面已经可以正常工作了,本次的重心在blender变量上。具体而言,就是找出飞机俯仰、翻滚和航向在blender中的对应的表示方式。
    飞机的姿态角实际是与笛卡尔坐标系中三个轴的夹角,常用的坐标系有两个,一个是相对于地球不变的坐标系(blender中的全局坐标系),一个是相对于飞控板不变的坐标系(blender中的局部坐标系),大翰科技的飞控程序所使用的坐标系属于前者。在blender中,物体的旋转使用三套数学表示方式,坐标轴角度(Axis Angle)、欧拉角(Euler)和四元数(Quaternion),其中的欧拉角与姿态角很像,坐标轴角度不懂,四元数是另外一套方式。因此我们使用欧拉角做对应,参考图3。其实欧拉角还是不懂,目前的结果是试出来的,接下来需要了解blender中的欧拉角的具体设定。
    实际上针对blender旋转控制,调试中还使用过一个方法,就是使用bpy.ops.transform.rotate()函数,这个函数是在物体现有的姿态基础上进行旋转,可以选择全局坐标系或者局部坐标系。使用这个函数之前需要将被旋转的物体设置为当前激活(active)的物体,代码方面使用bpy.context.scene.objects.active = bpy.data.objects[‘drone1’]即可,具体参考官方的Python API的Types, Object(ID)章节(https://www.blender.org/api/blender_python_api_2_78a_release/bpy.types.Object.html#bpy.types.Object )。


   我所写的程序均遵循开源协议,允许大家封装和商业化使用。
   附件中包括了服务器(transfering.py)、blender端(recording_multi_controll.py)和无人机数据接收端(recording_multi_real.py)的代码
   感谢blenderCN社区朋友们的长期帮助和支持!


回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2019-12-11 16:01 , Processed in 0.029157 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表