人脸跟踪arduino代码的优化
Optimization on face tracking arduino code
我正在做一个项目,用相机跟踪你的脸。我的电脑上有一个程序,通过串行端口将面坐标发送到Arduino。Arduino程序驱动两个伺服系统。一个用于X坐标,一个用于Y坐标。代码可以工作,但速度非常慢。更新伺服大约需要一秒钟的时间。如何使此代码更快?
这是代码:
include <Servo.h>
Servo x_servo;
Servo y_servo;
void setup() {
Serial.begin(9600);
x_servo.attach(9);
y_servo.attach(10);
x_servo.write(90);
y_servo.write(90);
}
void loop() {
if (Serial.available()) {
String data = Serial.readString();
int delimeter = data.indexOf(',');
int x = data.substring(0, delimeter).toInt();
int y = data.substring(delimeter + 1).toInt();
int x_pos = map(x, 0, 640, 0, 180);
int y_pos = map(y, 0, 480, 0, 180);
x_servo.write(x_pos);
y_servo.write(y_pos);
}
}
9600的波特率在20世纪90年代初很快。
您可以简单地将其设置为115200(快12倍(。轶事证据表明,这是Arduino串行监视器允许的最快速度,但实际硬件可以轻松达到460800,可能更快。
不管怎样,通过串行端口发送数据都很慢,所以发送的数据要少一些
在PC端执行map()
,将坐标打包为二进制整数格式,然后发送。如果你想把它作为一个";文本";协议,将值转换为4个字符。
相关文章:
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- 需要消除这些"else if"并优化代码
- C/C++编译器是否会通过重用最近计算的函数结果来优化代码?
- 如何优化C 代码的以下片段 - 卷中的零交叉点
- C++按字符串调用函数,比较PHP的性能,如何在C++中优化代码
- 优化c++代码以添加两个作为字符串的数字
- x86 汇编和优化代码中的 for 循环
- 如何在gcc中设置模板功能的自动优化代码
- 优化代码/实现"for"循环而不是长"if - else if - else"
- 我的粒子群优化代码在 C++ 和 MATLAB 中生成不同的答案
- 优化代码以获取给定范围内可被整数整除的整数数
- if条件下两个字符串比较的优化代码
- Cuda Thrust - 如何使用sort_by_key、merge_by_key和reduce_by_key优化代码
- 如何优化代码中的参数
- 针对大量迭代优化代码
- 编译器在程序集中优化代码时会做什么?即O2标志
- 优化代码(康威的生命游戏)
- 用于 TSP 的 3 选项优化代码
- 如何使用 SSE 或 GLSL 优化"u[0]*v[0] + u[2]*v[2]"代码行
- 是否有任何情况将对象标记为 const 会导致更好的优化代码(使用优化编译时)