Я работаю с данными акселерометра, которые мне нужно «отобразить / преобразовать» в новый диапазон значений.
Итак, из приведенного ниже примера данных акселерометра:
X: [0.363209]
Y: [0.723211]
Z: [-9.806650]
Запустив мой скрипт на Python и отфильтровав максимальное и минимальное значения по всем 3 осям », я получил следующий диапазон значений:
LOWEST-X: -47.2172037037
HIGHEST-X: 45.4011574074
LOWEST-Y: -27.6039037037
HIGHEST-Y: 44.6747388889
LOWEST-Z: -49.03325
HIGHEST-Z: 43.3755673077
Я не уверен, что эти диапазоны являются исчерпывающими, так как я не мог найти документацию. Поэтому я полчаса швырял свой wiimote, пока цифры не перестали обновляться.
Мне нужно конвертировать Икс данные акселерометра в новое значение в диапазоне -От 0,22 до 0,22 и Y данные в значение в диапазоне -От 2,84 до 2,84.
Я попытался сделать это с помощью следующего кода:
.
.
.
k = self.map(twist.linear.y, -27.6039037037, 44.6747388889, -0.22, 0.22)
print "Testing Y conversion: " + str(k)
def map(self, x, in_min, in_max, out_min, out_max):
return round(float((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min), 2)
Это немного изменено, карта функция копируется из Arduino реализация той же функции.
Тем не менее, отображение сопоставления не отражает желаемый -От 0,22 до 0,22 диапазон выходного сигнала при перемещении акселерометра. Ниже приведен пример вывода моего скрипта:
Testing Twist-Y: -2.17925555556 mapping to: -0.07
Testing Twist-Y: 0.726418518519 mapping to: -0.05
Testing Twist-Y: 1.45283703704 mapping to: -0.04
Testing Twist-Y: 6.53776666667 mapping to: -0.01
Testing Twist-Y: 8.71702222222 mapping to: 0.0
Testing Twist-Y: 10.1698592593 mapping to: 0.01
Testing Twist-Y: 3.26888333333 mapping to: -0.03
Testing Twist-Y: -1.8160462963 mapping to: -0.06
Testing Twist-Y: -4.35851111111 mapping to: -0.08
Testing Twist-Y: -1.8160462963 mapping to: -0.06
Testing Twist-Y: 3.99530185185 mapping to: -0.03
Testing Twist-Y: 4.72172037037 mapping to: -0.02
Testing Twist-Y: 6.90097592593 mapping to: -0.01
Testing Twist-Y: 6.53776666667 mapping to: -0.01
Testing Twist-Y: 0.726418518519 mapping to: -0.05
Testing Twist-Y: 0.726418518519 mapping to: -0.05
Testing Twist-Y: -2.17925555556 mapping to: -0.07
Testing Twist-Y: 3.26888333333 mapping to: -0.03
Testing Twist-Y: 9.44344074074 mapping to: 0.01
Testing Twist-Y: 11.259487037 mapping to: 0.02
Testing Twist-Y: 15.6179981481 mapping to: 0.04
Testing Twist-Y: 6.53776666667 mapping to: -0.01
Testing Twist-Y: 1.8160462963 mapping to: -0.04
Testing Twist-Y: 3.26888333333 mapping to: -0.03
Testing Twist-Y: 7.9906037037 mapping to: -0.0
Testing Twist-Y: 7.9906037037 mapping to: -0.0
Testing Twist-Y: 6.90097592593 mapping to: -0.01
Testing Twist-Y: 0.726418518519 mapping to: -0.05
Testing Twist-Y: 3.99530185185 mapping to: -0.03
Testing Twist-Y: 1.08962777778 mapping to: -0.05
Testing Twist-Y: 0.726418518519 mapping to: -0.05
Testing Twist-Y: -3.26888333333 mapping to: -0.07
Testing Twist-Y: 5.08492962963 mapping to: -0.02
Testing Twist-Y: -2.17925555556 mapping to: -0.07
Testing Twist-Y: 10.5330685185 mapping to: 0.01
Testing Twist-Y: 2.90567407407 mapping to: -0.03
Testing Twist-Y: 6.53776666667 mapping to: -0.01
Testing Twist-Y: 6.90097592593 mapping to: -0.01
Testing Twist-Y: -1.8160462963 mapping to: -0.06
Testing Twist-Y: -6.53776666667 mapping to: -0.09
Testing Twist-Y: 1.8160462963 mapping to: -0.04
Testing Twist-Y: 7.26418518519 mapping to: -0.01
Testing Twist-Y: 7.26418518519 mapping to: -0.01
Testing Twist-Y: 0.0 mapping to: -0.05
Testing Twist-Y: 1.45283703704 mapping to: -0.04
Testing Twist-Y: -5.08492962963 mapping to: -0.08
Testing Twist-Y: 0.363209259259 mapping to: -0.05
Testing Twist-Y: 3.63209259259 mapping to: -0.03
Testing Twist-Y: 1.8160462963 mapping to: -0.04
Testing Twist-Y: 5.44813888889 mapping to: -0.02
Testing Twist-Y: 10.8962777778 mapping to: 0.01
Testing Twist-Y: 5.08492962963 mapping to: -0.02
Testing Twist-Y: 5.08492962963 mapping to: -0.02
Testing Twist-Y: 3.26888333333 mapping to: -0.03
Testing Twist-Y: 1.45283703704 mapping to: -0.04
Testing Twist-Y: 3.26888333333 mapping to: -0.03
Testing Twist-Y: 9.80665 mapping to: 0.01
Testing Twist-Y: 9.08023148148 mapping to: 0.0
Testing Twist-Y: 10.1698592593 mapping to: 0.01
Testing Twist-Y: 12.7123240741 mapping to: 0.03
Testing Twist-Y: 3.63209259259 mapping to: -0.03
Testing Twist-Y: -1.8160462963 mapping to: -0.06
Testing Twist-Y: -3.26888333333 mapping to: -0.07
Testing Twist-Y: -1.08962777778 mapping to: -0.06
Testing Twist-Y: 0.726418518519 mapping to: -0.05
Testing Twist-Y: 2.17925555556 mapping to: -0.04
Testing Twist-Y: 2.17925555556 mapping to: -0.04
Testing Twist-Y: 2.17925555556 mapping to: -0.04
Testing Twist-Y: 3.26888333333 mapping to: -0.03
Testing Twist-Y: 7.26418518519 mapping to: -0.01
Testing Twist-Y: 7.26418518519 mapping to: -0.01
Testing Twist-Y: 7.26418518519 mapping to: -0.01
Testing Twist-Y: 1.08962777778 mapping to: -0.05
Testing Twist-Y: 0.0 mapping to: -0.05
Testing Twist-Y: 2.90567407407 mapping to: -0.03
Testing Twist-Y: 6.90097592593 mapping to: -0.01
Testing Twist-Y: 7.9906037037 mapping to: -0.0
Testing Twist-Y: 5.81134814815 mapping to: -0.02
Testing Twist-Y: 7.26418518519 mapping to: -0.01
Testing Twist-Y: 1.45283703704 mapping to: -0.04
Testing Twist-Y: -0.726418518519 mapping to: -0.06
Testing Twist-Y: 5.44813888889 mapping to: -0.02
Testing Twist-Y: 10.5330685185 mapping to: 0.01
Testing Twist-Y: 9.80665 mapping to: 0.01
Testing Twist-Y: 10.1698592593 mapping to: 0.01
Testing Twist-Y: 1.45283703704 mapping to: -0.04
Testing Twist-Y: 1.45283703704 mapping to: -0.04
Testing Twist-Y: 5.44813888889 mapping to: -0.02
Testing Twist-Y: 7.62739444444 mapping to: -0.01
Testing Twist-Y: 10.1698592593 mapping to: 0.01
Testing Twist-Y: 9.08023148148 mapping to: 0.0
Testing Twist-Y: 5.81134814815 mapping to: -0.02
Testing Twist-Y: 0.0 mapping to: -0.05
Testing Twist-Y: 2.17925555556 mapping to: -0.04
Testing Twist-Y: 13.4387425926 mapping to: 0.03
Testing Twist-Y: 10.5330685185 mapping to: 0.01
Testing Twist-Y: 13.0755333333 mapping to: 0.03
Testing Twist-Y: 4.72172037037 mapping to: -0.02
Testing Twist-Y: 10.5330685185 mapping to: 0.01
Testing Twist-Y: 12.7123240741 mapping to: 0.03
Testing Twist-Y: 7.62739444444 mapping to: -0.01
Testing Twist-Y: 9.44344074074 mapping to: 0.01
Testing Twist-Y: 9.44344074074 mapping to: 0.01
Testing Twist-Y: 1.45283703704 mapping to: -0.04
Testing Twist-Y: 3.99530185185 mapping to: -0.03
Testing Twist-Y: 2.54246481481 mapping to: -0.04
Testing Twist-Y: 9.80665 mapping to: 0.01
Testing Twist-Y: 6.53776666667 mapping to: -0.01
Testing Twist-Y: 6.17455740741 mapping to: -0.01
Testing Twist-Y: 5.44813888889 mapping to: -0.02
Testing Twist-Y: 7.26418518519 mapping to: -0.01
Testing Twist-Y: 7.26418518519 mapping to: -0.01
Testing Twist-Y: 9.08023148148 mapping to: 0.0
Testing Twist-Y: -1.08962777778 mapping to: -0.06
Testing Twist-Y: -0.363209259259 mapping to: -0.05
Testing Twist-Y: -0.363209259259 mapping to: -0.05
Testing Twist-Y: 0.363209259259 mapping to: -0.05
Testing Twist-Y: 1.8160462963 mapping to: -0.04
Testing Twist-Y: 10.5330685185 mapping to: 0.01
Testing Twist-Y: 14.1651611111 mapping to: 0.03
Testing Twist-Y: 4.35851111111 mapping to: -0.03
Testing Twist-Y: 4.72172037037 mapping to: -0.02
Testing Twist-Y: 7.9906037037 mapping to: -0.0
Testing Twist-Y: 9.44344074074 mapping to: 0.01
Testing Twist-Y: 7.62739444444 mapping to: -0.01
Testing Twist-Y: 2.54246481481 mapping to: -0.04
Testing Twist-Y: 5.44813888889 mapping to: -0.02
Testing Twist-Y: 3.26888333333 mapping to: -0.03
Testing Twist-Y: 2.90567407407 mapping to: -0.03
Testing Twist-Y: 3.99530185185 mapping to: -0.03
Testing Twist-Y: 2.17925555556 mapping to: -0.04
Testing Twist-Y: 3.63209259259 mapping to: -0.03
Testing Twist-Y: 5.81134814815 mapping to: -0.02
Testing Twist-Y: 7.9906037037 mapping to: -0.0
Testing Twist-Y: 6.17455740741 mapping to: -0.01
Testing Twist-Y: 0.0 mapping to: -0.05
Testing Twist-Y: -3.63209259259 mapping to: -0.07
Testing Twist-Y: 4.35851111111 mapping to: -0.03
Testing Twist-Y: 10.5330685185 mapping to: 0.01
Testing Twist-Y: 13.8019518519 mapping to: 0.03
Testing Twist-Y: 9.80665 mapping to: 0.01
Testing Twist-Y: 4.35851111111 mapping to: -0.03
Testing Twist-Y: 3.26888333333 mapping to: -0.03
Testing Twist-Y: 3.63209259259 mapping to: -0.03
Testing Twist-Y: -1.08962777778 mapping to: -0.06
Testing Twist-Y: -2.17925555556 mapping to: -0.07
Testing Twist-Y: 7.62739444444 mapping to: -0.01
Testing Twist-Y: 3.99530185185 mapping to: -0.03
Testing Twist-Y: 3.99530185185 mapping to: -0.03
Testing Twist-Y: 10.5330685185 mapping to: 0.01
Testing Twist-Y: 3.99530185185 mapping to: -0.03
Testing Twist-Y: -5.08492962963 mapping to: -0.08
Testing Twist-Y: 0.363209259259 mapping to: -0.05
Testing Twist-Y: -1.8160462963 mapping to: -0.06
Testing Twist-Y: -1.8160462963 mapping to: -0.06
Testing Twist-Y: 1.8160462963 mapping to: -0.04
Testing Twist-Y: 23.2453925926 mapping to: 0.09
Testing Twist-Y: 17.0708351852 mapping to: 0.05
Testing Twist-Y: 14.1651611111 mapping to: 0.03
Testing Twist-Y: 6.90097592593 mapping to: -0.01
Testing Twist-Y: 4.72172037037 mapping to: -0.02
Testing Twist-Y: 5.08492962963 mapping to: -0.02
Testing Twist-Y: 8.35381296296 mapping to: -0.0
Testing Twist-Y: 12.7123240741 mapping to: 0.03
Testing Twist-Y: 10.1698592593 mapping to: 0.01
Testing Twist-Y: 10.8962777778 mapping to: 0.01
Testing Twist-Y: 4.72172037037 mapping to: -0.02
Testing Twist-Y: -2.90567407407 mapping to: -0.07
Testing Twist-Y: -2.54246481481 mapping to: -0.07
Testing Twist-Y: 10.5330685185 mapping to: 0.01
Testing Twist-Y: 7.26418518519 mapping to: -0.01
Testing Twist-Y: 8.71702222222 mapping to: 0.0
Testing Twist-Y: 5.44813888889 mapping to: -0.02
Testing Twist-Y: 1.45283703704 mapping to: -0.04
Testing Twist-Y: 5.44813888889 mapping to: -0.02
Testing Twist-Y: 5.44813888889 mapping to: -0.02
Testing Twist-Y: 7.9906037037 mapping to: -0.0
Testing Twist-Y: 5.81134814815 mapping to: -0.02
Testing Twist-Y: 4.35851111111 mapping to: -0.03
Testing Twist-Y: 4.72172037037 mapping to: -0.02
Testing Twist-Y: 8.71702222222 mapping to: 0.0
Testing Twist-Y: 7.9906037037 mapping to: -0.0
Я хотел бы точно настроить или исправить этот код, чтобы вывод лучше отражал желаемый диапазон.
Предположим, что диапазон ввода xmin...xmax
и выходной диапазон xmin'...xmax'
, так
x'(xmin) = xmin'
x'(xmax) = xmax'
затем
x' = xmin' + (x - xmin) * (xmax'-xmin') / (xmax-xmin) = xmin' + k * (x - xmin)
где
k = (xmax'-xmin') / (xmax-xmin)
Другой случай, если вам нужно зафиксировать значение в определенном интервале:
x'(x) = x, xmin < x < xmax
x'(x) = xmin, x <= xmin
x'(x) = xmax, x >= xmax
В этом случае вам нужно
newx = std::clamp(x, xmin, xmax); // since C++17
Или же
newx = std::max(xmin, std::min(x, xmax));
Преобразуется следующим образом, предполагая исходный диапазон от 0 до 1:
x * 4.4 - 2.2
y * 5.68 - 2.84
Преобразуется следующим образом, предполагая исходный диапазон от -1 до 1
x * 2.2
y * 2.84
Преобразуется следующим образом, предполагая исходный диапазон от a до b
(x - a) * 4.4 / (b - a) - 2.2
(y - a) * 5.68 / (b - a) - 2.84