Python与机器人技术
此文为我参加PyCon2014北京场闪电演讲的演讲稿,每张下面附加了我演讲时的注释。给没有看到该演讲的同学看的。
不解释
大家理想中的机器人是这样的,来自三部电影的大反派。
而现实是残酷的,左图是4年前做的第二个智能小车。如果你认为这个已经很烂了。那么有如爱因斯坦的小板凳一样,我还做过更烂的,比如右图这个是我做的第一个智能小车。
前面开开玩笑,现实也并不总是如此残酷。此图为我做的几种四轴飞行器。做下是第一个,三年多了居然还能飞。因此谈起航空界的一个话题:好的降落是无人伤亡的降落,而完美的降落是飞机还能起飞的降落。右图是我做得第三架。因此谈起航模界的一大迷信,就是首飞前不要拍照,否则就是遗照。可惜我做的第二架首飞炸机,连个遗照都没留下。左上是我做的第四架,配置略高,未来将用于deepglint的无人机平台。
谈谈正事,Python如何与机器人结合。机器人的感知非常重要,并因此影响了机器人的发展。而视觉的信息量很大,是个重要方向。与Python结合的机器人视觉,有关的:
1. PyGame可以用于读取摄像头的图像
2. PIL可以读写图片和处理图片,Pythoner是很幸运的,PIL使得很多常见工作无需引用OpenCV
3. OpenCV用于读写图像/视频,以及集成了多种视频处理算法,包括高级一些的人脸识别以及视差合成
4. OpenNI用于读取PrimeSense传感器的图像,可以直接拿到深度数据
5. v4l2可以在Linux下控制摄像头非常精确的功能,如曝光、白平衡等
将处理的结果,变为现实世界中实际的动作。
1. wave可以将读写声音文件,将信息编码为声音后,可以使得很多设备能收发控制信号
2. PWM:脉冲宽度调制,对舵机控制、电机调速很重要
3. Servo:舵机,很常用的执行机构
4. Arduino:可以自己用Arduino搭建电脑到现实世界的接口
所有系统都会耗费不少调试时间,更好的调试就带来更高的效率。
1. PySerial:串口是电子设备最简单的接口,用PySerial可以让Python直接通过串口通信
2. Python C API control GPIO:可以在特定平台让Python直接控制GPIO来调试,控制LED和读取按键等
3. Automated Testing:自动化测试可以极大的提高效率,而这正是Python的强项
很多处理数据工作都需要极高的性能。所以一些高性能运算的思路:
1. NumPy:可以轻松的调用多种科学计算函数,并且效率上丝毫不会降低
2. PyCUDA:可以使用NumPy的数组以及Python来容易的使用CUDA,而核函数就是CUDA的,不会损耗性能和移植性
3. TK1:一种nVidia推出的开发板,可以在嵌入式平台上使用192个CUDA核心
4. Parallella:嵌入式超级计算机
1. 传感器网络:机器人上会配备很多种传感器,而通过Python将这些传感器配置成一些网络服务会使得系统更加灵活
2. ROS是机器人操作系统,未来很有潜力的机器人开发平台,运行于Linux上,提供的官方语言支持就只有C++和Python,成熟度很好
3. Python作为胶水,结合ZeroMQ等,使得机器人系统变得更加灵活可用
4. Python作为集群的底层,使用twisted、gevent等,使得机器人系统可以与外部灵活的通信
立体视觉与深度信息是deepglint创业的核心思路。这个思路使得计算机视觉变得容易了许多。
右上为MultiView摄像机,由两个摄像机的视差形成立体视觉,原理与人眼相同。这个结构是用于安装在deepglint自动驾驶汽车上的。
PrimeSense是与kinect为同一制造商的深度摄像头,使用简单方便。右下图就是。
右下图底下是乐高积木,便于搭建各种简单的机械结构,加速机器人开发。图中安装了TK1。
deepglint开发中的各种机器人。
左图是室内巡逻机器人,未来会实现危险场景巡防,以及自动驾驶原型。
右上为deepglint自动驾驶原型车,改装中。
右下为改装前,车子太好玩,可以经常带大家去公园,而耽误了改车。
感兴趣的联系我,关于deepglint (格灵深瞳)或机器人皆可。以下为我的联系方式。