diff options
Diffstat (limited to 'lib/support/drivers/ax.lua')
-rw-r--r-- | lib/support/drivers/ax.lua | 118 |
1 files changed, 0 insertions, 118 deletions
diff --git a/lib/support/drivers/ax.lua b/lib/support/drivers/ax.lua deleted file mode 100644 index d505511..0000000 --- a/lib/support/drivers/ax.lua +++ /dev/null @@ -1,118 +0,0 @@ -local device = _G -local WRITE_INFO = 0x01 -local READ_INFO = 0x02 -local GET_RAW_POS = 0x03 -local char000 = string.char(0,0,0) -local mode='wheel' - ---byte id,byte regstart, int value -api={} -api.write_info = {} -api.write_info.parameters = {[1]={rname="id", rtype="number", min=0, max=255},[2]={rname="regstart", rtype="number", min=0, max=255},[3]={rname="value", rtype="number", min=0, max=65536}} ----byte id,byte regstart, int value -api.write_info.returns = {[1]={rname="write_info_return", rtype="number"}} --one return -api.write_info.call = function (id, regstart, value) - id, regstart, value = tonumber(id), tonumber(regstart), tonumber(value) - local write_info_payload = string.char(WRITE_INFO, id, regstart, math.floor(value / 256),value % 256) - device:send(write_info_payload) - local write_info_response = device:read(2) or char000 - local raw_val = (string.byte(write_info_response, 2) or 0) - return raw_val -end - ---- Set wheel mode. ---Set the motor to continuous rotation mode. -api.wheel_mode = {} -api.wheel_mode.parameters = {[1]={rname="id", rtype="number", min=0, max=255}} -api.wheel_mode.returns = {} -api.wheel_mode.call = function (id ) - id = tonumber(id) - local ret = device:send(string.char(WRITE_INFO,id,0x06,0x00,0x00)) - local write_info_response = device:read(1) or string.char(0,0) - local ret = device:send(string.char(WRITE_INFO,id,0x08,0x00,0x00)) - local write_info_response = device:read(1) or string.char(0,0) - mode='wheel' - end - ---- Set joint mode. --- Set the motor to joint mode. Angles are provided in degrees, --- in the full servo coverage (0 - 300 degrees arc) --- @param min the minimum joint angle (defaults to 0) --- @param max the maximum joint angle (defaults to 300) -api.joint_mode = {} -api.joint_mode.parameters = {[1]={rname="id", rtype="number", min=0, max=255},[2]={rname="minimo", rtype="number", min=0, max=1023},[3]={rname="maximo", rtype="number", min=0, max=1023}} -api.joint_mode.returns = {} -api.joint_mode.call = function (id ,minimo, maximo) - id = tonumber(id) - minimo=tonumber(minimo) - maximo=tonumber(maximo) - local ret = device:send(string.char(WRITE_INFO,id,0x06,math.floor(minimo / 256),minimo % 256)) - local write_info_response = device:read(1) or string.char(0,0) - local ret = device:send(string.char(WRITE_INFO,id,0x08,math.floor(maximo / 256),maximo % 256)) - local write_info_response = device:read(1) or string.char(0,0) - mode='joint' - end - - ---- Set motor position. --- Set the target position for the motor's axle. Only works in --- joint mode. --- @param value Angle in degrees, in the 0 .. 300deg range. -api.set_position = {} -api.set_position.parameters = {[1]={rname="id", rtype="number", min=0, max=255},[2]={rname="pos", rtype="number", min=0, max=1023}} -api.set_position.returns = {} -api.set_position.call = function (id, pos ) - id = tonumber(id) - pos = tonumber(pos) - local ret = device:send(string.char(WRITE_INFO,id,0x1E,math.floor(pos / 256),pos % 256)) - local write_info_response = device:read(1) or string.char(0,0) - end - - ---- Get motor position. --- Read the axle position from the motor. --- @return The angle in deg. The reading is only valid in the --- 0 .. 300deg range -api.get_position = {} -api.get_position.parameters = {[1]={rname="id", rtype="number", min=0, max=255},[2]={rname="pos", rtype="number", min=0, max=1023}} -api.get_position.returns = {[1]={rname="motor_position", rtype="number"}} --one return -api.get_position.call = function(id) - local send_response = device:send(string.char(GET_RAW_POS,id)) - local value = device:read(3) or string.char(0,0,0) - local h_value = string.byte(value, 2) - local l_value = string.byte(value, 3) - local raw_angle = 256 * h_value + l_value - local ang=0.29*(raw_angle) -- deg ? - return raw_angle - - end - - ---- Set motor speed. --- @param value If motor in joint mode, speed in deg/sec in the 1 .. 684 range --- (0 means max available speed). --- If in wheel mode, as a fraction of max torque (in the -1 .. 1 range). -api.set_speed = {} -api.set_speed.parameters = {[1]={rname="id", rtype="number", min=0, max=255},[2]={rname="speed", rtype="number", min=-1, max=684}} -api.set_speed.returns = {} --no return -api.set_speed.call = function(id, speed) - --if mode=='joint' then - -- 0 .. 684 deg/sec - local vel=math.floor(speed * 1.496) - local lowb = math.floor(vel/ 256) - local highb = vel % 256 - - - --local lowb, highb = get2bytes_unsigned(vel) - local ret = device:send(id,0x20,string.char(lowb,highb)) - print ("ret= ",ret, " lowb= ", lowb, " highb= ", highb) - if ret then return ret:byte() end - --else --mode=='wheel' - -- -1 .. +1 max torque - --local vel=math.floor(speed * 1023) - --local lowb, highb = get2bytes_signed(vel) - --local ret = device:send(id,0x20,string.char(lowb,highb)) - --if ret then return ret:byte() end - --end -end - - |