Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
734 changes: 734 additions & 0 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@
"express": "^4.15.2",
"jade": "^1.11.0"
}
}
}
25 changes: 25 additions & 0 deletions public/javascript/pages/scan.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,19 @@ function initScanForm() {
_UTILS.initDropdownForEnum('select_MotorSpeed', _SETTINGS.MOTOR_SPEED_ENUM);
_UTILS.initDropdownForEnum('select_SampleRate', _SETTINGS.SAMPLE_RATE_ENUM);

$("#input_MinRangeVal").attr({
min: _SETTINGS.RANGE_VAL_ENUM.MIN,
max: _SETTINGS.RANGE_VAL_ENUM.MAX,
step: _SETTINGS.RANGE_VAL_ENUM.STEP
});
$("#input_MaxRangeVal").attr({
min: _SETTINGS.RANGE_VAL_ENUM.MIN,
max: _SETTINGS.RANGE_VAL_ENUM.MAX,
step: _SETTINGS.RANGE_VAL_ENUM.STEP
});
$("#input_MinRangeVal").val(_SETTINGS.RANGE_VAL_ENUM.MIN)
$("#input_MaxRangeVal").val(_SETTINGS.RANGE_VAL_ENUM.MAX)

// Request that a scan be initiated when button is pressed
$("#btn_PerformScan").click(function () {
let options = readSpecifiedScanOptions();
Expand Down Expand Up @@ -128,6 +141,16 @@ function readSpecifiedScanOptions() {
let alt_filename = "3D Scan - " + d.toDateString() + " " + d.toLocaleTimeString().replace(/:\s*/g, "-");
options.file_name = _UTILS.textInputHasValue("#input_FileName") ? $("#input_FileName").val() : alt_filename;

options.min_range_val = _UTILS.textInputHasValue("#input_MinRangeVal") ? $("#input_MinRangeVal").val() : _SETTINGS.RANGE_VAL_ENUM.MIN;
options.min_range_val = isNaN(options.min_range_val) ? _SETTINGS.RANGE_VAL_ENUM.MIN : parseInt(options.min_range_val);
options.min_range_val = (options.min_range_val < _SETTINGS.RANGE_VAL_ENUM.MIN) ? _SETTINGS.RANGE_VAL_ENUM.MIN : options.min_range_val;
options.min_range_val = (options.min_range_val > _SETTINGS.RANGE_VAL_ENUM.MAX) ? _SETTINGS.RANGE_VAL_ENUM.MAX : options.min_range_val;

options.max_range_val = _UTILS.textInputHasValue("#input_MaxRangeVal") ? $("#input_MaxRangeVal").val() : _SETTINGS.RANGE_VAL_ENUM.MAX;
options.max_range_val = isNaN(options.max_range_val) ? _SETTINGS.RANGE_VAL_ENUM.MAX : parseInt(options.max_range_val);
options.max_range_val = (options.max_range_val < _SETTINGS.RANGE_VAL_ENUM.MIN) ? _SETTINGS.RANGE_VAL_ENUM.MIN : options.max_range_val;
options.max_range_val = (options.max_range_val > _SETTINGS.RANGE_VAL_ENUM.MAX) ? _SETTINGS.RANGE_VAL_ENUM.MAX : options.max_range_val;

return options;
}

Expand All @@ -141,6 +164,8 @@ function showScanProgress(params) {
$("#span_ScanType").html(`${params.angular_range * 2} degree scan`);
$("#span_MotorSpeed").html(params.motor_speed);
$("#span_SampleRate").html(params.sample_rate);
$("#span_MinRangeVal").html(params.min_range_val);
$("#span_MaxRangeVal").html(params.max_range_val);
$("#span_FileName").html(params.file_name);
}

Expand Down
9 changes: 8 additions & 1 deletion public/javascript/scanner/Settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ ScannerLib.Settings = function () {
}
};

const RANGE_VAL_ENUM = {
MIN: 10,
MAX: 4000,
STEP: 1
};

/****************************************************************************************
* Methods
****************************************************************************************/
Expand All @@ -71,6 +77,7 @@ ScannerLib.Settings = function () {
MOTOR_SPEED_ENUM: MOTOR_SPEED_ENUM,
SAMPLE_RATE_ENUM: SAMPLE_RATE_ENUM,
SCAN_TYPE_ENUM: SCAN_TYPE_ENUM,
TEST_TYPE_ENUM: TEST_TYPE_ENUM
TEST_TYPE_ENUM: TEST_TYPE_ENUM,
RANGE_VAL_ENUM: RANGE_VAL_ENUM
};
}();
4 changes: 4 additions & 0 deletions routes/script_execution.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ function performScan(params) {
`--motor_speed=${params.motor_speed}`,
`--sample_rate=${params.sample_rate}`,
`--angular_range=${params.angular_range}`,
`--min_range_val=${params.min_range_val}`,
`--max_range_val=${params.max_range_val}`,
`--output=${filename}`
];
if (GLOBAL_APPLICATION_VARIABLE_bUseDummy)
Expand Down Expand Up @@ -165,6 +167,8 @@ function performTest(params) {
}

function executeScript(args) {
console.log(args);

// reset the update queue
updateQueue = [];

Expand Down
38 changes: 32 additions & 6 deletions scanner/scan_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@ class ScanSettings(object):
"""

def __init__(self, motor_speed=None, sample_rate=None, deadzone=None,
scan_range=None, mount_angle=None):
scan_range=None, mount_angle=None, min_range_val=None, max_range_val=None):
"""Return a ScanSettings object.
:param motorSpeed: Integer value between 1:10 representing motor speed in HZ
:param sampleRate: Integer value (500, 750 or 1000), representing a sample rate in HZ
:param deadzone: Integer value between 0:180, angle at which the base should begin
rotating (measured in degrees from sweep device 0 angle)
:param scan_range: Range of movement for the scan to cover (default 180deg)
:param mount_angle: Mount angle of the device relative to horizontal plane (defaults 90deg)
:min_range_val: Minimum range value for a sensor reading to be recorded (defaults 10 cm)
:max_range_val: Maximum range value for a sensor reading to be recorded (defaults 4000 cm)
"""
if motor_speed is None:
motor_speed = sweep_helpers.MOTOR_SPEED_1_HZ
Expand All @@ -33,13 +35,17 @@ def __init__(self, motor_speed=None, sample_rate=None, deadzone=None,
scan_range = 180
if mount_angle is None:
mount_angle = 90
if min_range_val is None:
min_range_val = 10
if max_range_val is None:
max_range_val = 4000
self.motor_speed = motor_speed
self.sample_rate = sample_rate
self.deadzone = deadzone
self.scan_range = scan_range
self.mount_angle = mount_angle
self.min_range_val = 10
self.max_range_val = 4000
self.min_range_val = min_range_val
self.max_range_val = max_range_val

def set_motor_speed(self, motor_speed=None):
"""Sets the motor speed setting
Expand Down Expand Up @@ -82,6 +88,22 @@ def set_mount_angle(self, mount_angle=None):
mount_angle = 90
self.mount_angle = mount_angle

def set_min_range_val(self, min_range_val=None):
"""Sets the minimum range value for a sensor reading to be recorded
:param min_range_val: Minimum range value for a sensor reading to be recorded (defaults 10 cm)
"""
if min_range_val is None:
min_range_val = 10
self.min_range_val = min_range_val

def set_max_range_val(self, max_range_val=None):
"""Sets the maximum range value for a sensor reading to be recorded
:param max_range_val: Maximum range value for a sensor reading to be recorded (defaults 4000 cm)
"""
if max_range_val is None:
max_range_val = 4000
self.max_range_val = max_range_val

def get_motor_speed(self):
"""Returns the motor speed setting in HZ"""
return self.motor_speed
Expand Down Expand Up @@ -133,6 +155,8 @@ def print_details(self):
print "ScanSettings Object"
print "\tMotor speed: {} HZ".format(self.get_motor_speed())
print "\tSample rate: {} HZ".format(self.get_sample_rate())
print "\tMinimum range: {} cm".format(self.get_min_range_val())
print "\tMaximum range: {} cm".format(self.get_max_range_val())
print "\tDeadzone angle: {} degrees".format(self.get_deadzone())
print "\tTime to reach deadzone angle: {} ms, or {} sec".format(
self.get_time_to_deadzone_ms(), self.get_time_to_deadzone_sec())
Expand All @@ -146,11 +170,13 @@ def main():
default_params = ScanSettings()
# Create a ScanSettings obj with specific settings
custom_params = ScanSettings(
sweep_helpers.MOTOR_SPEED_2_HZ, # desired motor speed setting
sweep_helpers.SAMPLE_RATE_750_HZ, # desired sample rate setting
sweep_helpers.MOTOR_SPEED_2_HZ, # desired motor speed setting
sweep_helpers.SAMPLE_RATE_750_HZ, # desired sample rate setting
135, # desired deadzone angle threshold
180, # desired range of movement
90) # mount angle of device relative to horizontal plane
90, # mount angle of device relative to horizontal plane
10, # minimum range value for a sensor reading to be recorded
4000) # maximum range value for a sensor reading to be recorded

# Prints details for both objects
default_params.print_details()
Expand Down
25 changes: 17 additions & 8 deletions scanner/scanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ def setup(self):

def perform_scan(self):
"""Performs a 3d scan"""
# Calcualte some intermediate values
# Calculate some intermediate values
num_sweeps, angle_between_sweeps, steps_per_move = self.calculate_scan_variables()

# Report that the scan is initiating, and start scanning
Expand Down Expand Up @@ -251,12 +251,13 @@ def main(arg_dict):
"""Creates a 3D scanner and gather a scan"""
# Create a scan settings obj
settings = scan_settings.ScanSettings(
int(arg_dict['motor_speed']), # desired motor speed setting
int(arg_dict['sample_rate']), # desired sample rate setting
int(arg_dict['dead_zone']), # starting angle of deadzone
int(arg_dict['angular_range']), # angular range of scan
# mount angle of device relative to horizontal
int(arg_dict['mount_angle'])
int(arg_dict['motor_speed']), # desired motor speed setting
int(arg_dict['sample_rate']), # desired sample rate setting
int(arg_dict['dead_zone']), # starting angle of deadzone
int(arg_dict['angular_range']), # angular range of scan
int(arg_dict['mount_angle']), # mount angle of device relative to horizontal
int(arg_dict['min_range_val']), # minimum range value
int(arg_dict['max_range_val']) # maximum range value
)

# Create an exporter
Expand Down Expand Up @@ -312,14 +313,22 @@ def main(arg_dict):
help='Starting angle of deadzone',
default=135,
required=False)
parser.add_argument('-lr', '--min_range_val',
help='Minimum range value',
default=10,
required=False)
parser.add_argument('-hr', '--max_range_val',
help='Maximum range value',
default=4000,
required=False)
default_filename = "Scan " + datetime.datetime.fromtimestamp(
time.time()).strftime('%Y-%m-%d %H-%M-%S') + '.csv'
parser.add_argument('-o', '--output',
help='Filepath for the exported scan',
default=default_filename,
required=False)
parser.add_argument('-d', '--use_dummy',
help='Use the dummy verison without hardware',
help='Use the dummy version without hardware',
default=False,
action='store_true',
required=False)
Expand Down
34 changes: 24 additions & 10 deletions views/scan.jade
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@ block content
td Sample Rate
td
span(id="span_SampleRate")
tr
td Minimum Distance
td
span(id="span_MinRangeVal")
tr
td Maximum Distance
td
span(id="span_MaxRangeVal")
tr
td File Name
td
Expand Down Expand Up @@ -54,16 +62,22 @@ block content
div.form-group
label(for="input_FileName") File Name:
input.form-control.input-lg(type="text", id="input_FileName", name="input_FileName")
div.form-group
label(for="select_ScanType") Scan Type:
select.form-control.input-lg(id="select_ScanType", name="input_ScanType")
div.form-group
label(for="select_MotorSpeed") Motor Speed:
select.form-control.input-lg(id="select_MotorSpeed", name="input_MotorSpeed")
div.form-group
label(for="select_SampleRate") Sample Rate:
select.form-control.input-lg(id="select_SampleRate", name="input_SampleRate")
button.btn.btn-primary.btn-lg(id="btn_PerformScan", type="button") Start Scan
div.form-group
label(for="select_ScanType") Scan Type:
select.form-control.input-lg(id="select_ScanType", name="input_ScanType")
div.form-group
label(for="select_MotorSpeed") Motor Speed:
select.form-control.input-lg(id="select_MotorSpeed", name="input_MotorSpeed")
div.form-group
label(for="select_SampleRate") Sample Rate:
select.form-control.input-lg(id="select_SampleRate", name="input_SampleRate")
div.form-group
label(for="input_MinRangeVal") Minimum Distance:
input.form-control.input-lg(type="number", id="input_MinRangeVal", name="input_MinRangeVal")
div.form-group
label(for="input_MaxRangeVal") Maximum Distance:
input.form-control.input-lg(type="number", id="input_MaxRangeVal", name="input_MaxRangeVal")
button.btn.btn-primary.btn-lg(id="btn_PerformScan", type="button") Start Scan
block scripts
include scanner_lib_scripts
script(src='/javascript/pages/scan.js')