2016-04-05 35 views
2

Wir haben eine einfache V-REP Simulation entwickelt, die ziemlich gut auf OS X funktioniert, aber nicht auf Linux (Ubuntu 15.04). Lua wird als Haupt-Skriptsprache verwendet.V-REPs Lua `tonumber` gibt null auf Linux

Wir legen den folgenden Code (mit den Rückgabewerten in den Kommentaren), die leider nil auf Linux gibt (aber wandelt e[3] Nummer ohne Problem auf OS X):

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

Was wirklich interessant ist, ist die Tatsache, dass der vorherige Code so funktioniert, wie man es von der Lua 5.2.3 Konsole erwarten würde (sowohl OS X als auch Linux). V-REP kann die Zeichenfolge unter Linux jedoch nicht ordnungsgemäß in Nummer konvertieren.

Wir versuchten beide 32b and 64b V-REP versions (heute heruntergeladen) mit genau den gleichen Ergebnissen - nil s. Könntest du bitte auf einige Dinge hinweisen, die uns fehlen? Weder Lua noch V-REP sind Gebrauchsgegenstände, die wir jeden Tag benutzen.

Bearbeiten 1: Ich benutze Ubuntu 15.04. V-REP verwendet Lua 5.1, My Lua-Version:

$ 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 

In Konsole habe ich versucht, die folgenden:

$ 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 

Pakete

+0

Haben Sie wirklich "Nil" ausgedruckt? Oder ist es "Null"? Sie sind sicher, dass Sie die gleiche Version von Lua auf OS X und Linux verwenden, wenn dies passiert? Und beide der ersten beiden Zeilen geben den gleichen Wert auf OS X und Linux aus, wenn dies geschieht? –

+0

Hallo Etan, wir bekommen 'nil', die Version ist die gleiche auf beiden Plattformen und über die Ausgabe - die Werte werden dynamisch in Python erstellt und über Remote-API an Vrep (und Lua) gesendet, so dass sie nicht genau identisch sind Werte, aber der Fehler passiert nicht auf os x überhaupt und geschieht auf Linux auf allen Float-Zahlen, die übergeben werden. – Gyfis

+0

@EtanReisner es ist genau so, wie Gyfis schrieb. – petrbel

Antwort

4

Der Fehler wird verursacht durch die Tatsache, dass V-REP verwendet Lua 5.1, und die Computer, auf denen wir es getestet haben, hatten unterschiedliche Locales für Nummern (der Linux hatte LC_NUMERIC=cs_CZ.UTF-8 und der Mac hatte wahrscheinlich).

Das bedeutet, dass Lua auf Mac die Float-Zahlen in Strings als Zahlen erkannt, aber Lua unter Linux mit dem anderen Gebietsschema nicht - es (zB -3,513) als Dezimaltrennzeichen dass das Gebietsschema ein Komma nicht hat erforderlich, so dass es für die Konvertierung null zurückgegeben.

Das Update ist die LC_NUMERIC Flag zu setzen, bevor die VREP zum en_US locale, wie diese ausgeführt wird:

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

die die locale zwingen würde, ein Punkt-basierte, zu sein und ermöglichen, Lua, die Zahlen zu erkennen .

Dank @Etan für alle Hilfe und für das Stoßen auf das Problem aus der richtigen Richtung.

+1

Funktioniert wie ein Charme. Danke für die tolle Lösung! – Vitaljok