2016-04-05 1 views
2

Мы разработали простое моделирование V-REP, которое очень хорошо работает на OS X, но не на Linux (Ubuntu 15.04). Lua используется в качестве основного языка сценариев.Lua `tonumber` V-REP's возвращает nil на Linux

Мы придаем следующий код (с возвращаемые значения в комментариях), к сожалению, возвращает nil на Linux (но преобразует e[3] номер без проблем на OS X):

e[3]     -- -0.677782532263 
type(e[3])    -- string 
type(tonumber(e[3])) -- nil 

Что действительно интересно, является тот факт, что предыдущий код работает так, как можно было бы ожидать в консоли Lua 5.2.3 (как OS X, так и Linux). Тем не менее, V-REP не может правильно преобразовать строку в номер при работе в Linux.

Мы попробовали оба 32b and 64b V-REP versions (сегодня скачано) с точно такими же результатами - nil s. Не могли бы вы указать на некоторые вещи, которые нам не хватает? Ни Lua, ни V-REP не являются утилитами, которые мы используем каждый день.

Редактировать 1: I Использование Ubuntu 15.04. V-REP использует Lua 5.1, Моя версия Lua:

$ apt-cache policy lua5.1 
lua5.1: 
    Installed: 5.1.5-7.1 
    Candidate: 5.1.5-7.1 
    Version table: 
*** 5.1.5-7.1 0 
     500 http://cz.archive.ubuntu.com/ubuntu/ vivid/main amd64 Packages 
     100 /var/lib/dpkg/status 

В консоли, я попытался следующие:

$ lua 
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio 
> e={[3]="-0.677782532263"}; print(e[3], type(e[3]), tonumber(e[3]), type(tonumber(e[3]))) 
-0.677782532263 string -0.677782532263 number 

Пакеты

+0

Вы действительно получаете распечатку 'Nil'? Или это 'nil'? Вы уверены, что используете одну и ту же версию lua как для ОС X, так и для Linux, когда это происходит? И обе первые две строки выводят одно и то же значение в OS X и linux, когда это происходит? –

+0

Привет, Etan, мы получаем 'nil', версия на обеих платформах одинакова, и о выходе - значения динамически создаются в python и отправляются через удаленный api в vrep (и lua), поэтому они не точные точные значения, но ошибка вообще не происходит на os x и происходит на linux на всех числах с плавающей запятой, которые передаются. – Gyfis

+0

@EtanReisner это точно так же, как писал Gyfis. – petrbel

ответ

4

ошибка вызвана тем, что V-REP использует Lua 5.1, а компьютеры, на которых мы тестировали его, имели разные локали для чисел (у linux был LC_NUMERIC=cs_CZ.UTF-8, а у mac был, возможно, en_US).

Это означает, что Lua на Mac признал число с плавающей запятой в строках, как числа, но Lua на Linux с другим языком не сделала - это не была запятой (например -3,513) в качестве десятичного разделителя, что локаль требуется, поэтому он возвращает нуль для преобразования.

Исправление установить LC_NUMERIC флаг перед запуском vrep в en_US местности, например:

...$ LC_NUMERIC=en_US.UTF-8 ./vrep 

, который заставит локаль быть точка на основе, а также включить Lua распознавать номера ,

Благодарим @Etan за помощь и за то, что вы писали о проблеме в правильном направлении.

+1

Работает как шарм. Спасибо за отличное решение! – Vitaljok

Смежные вопросы