The depth sensor is controlled by the onboard fathom binary. The fathom binary running on the Magellan board has an HTTP API, which you can use to turn on and off different types of data and manipulate the depth sensor hardware in various ways. All interactions are HTTP GET requests.
Monkey (HTTP Server) configuration Requests against this HTTP API are routed through Monkey, an HTTP server which is also running on the Magellan board, and into different functions in the fathom binary itself. In order for any HTTP requests to be routed through Monkey, they have to match patterns specified in a file on the Magellan board’s file system, here:
/etc/monkey/sites/default
The match-able routes through Monkey are specified at the bottom of this file - this is what you’ll find there:
[HANDLERS]
# FastCGI
# =======
Match /command/.* fastcgi
Match /calibration/.* fastcgi
Match /stream/.* fastcgi
Match /imager/.* fastcgi
Match /status/.* fastcgi
Match /system/.* fastcgi
Match /status.* fastcgi
Match /filter/.* fastcgi
This lets you interact with different endpoints like this (assuming the IP of
your depth sensor is fe80::2%eth0):
curl http://fe80::2%eth0/status
All of the following endpoints are available as top-level paths on port 80.
/imager/startStart the imager.
/imager/stopStop the imager.
/imager/duty/<set_number>/<value>Change duty cycle with http://
Where set_number is one of the non-greyscale frame sets and value is a valid duty cycle.
/imager/exposure/<set_number>/<value>Change exposure with http://
Where set_number is one of the frame sets and value is a valid exposure in microseconds.
/imager/framerate/<desired framerate>The desired framerate must be a float or int value.
/imager/mode/<desired mode>Change imager mode with http://
Allowed options: twofreq, threefreq
The depth sensor publishes data packets out from its ethernet port - these API calls turn on and off various types of data in the stream.
/stream/enableRawEnable raw data stream.
/stream/disableRawDisable raw data stream.
/stream/enableDistanceEnable distance data stream.
/stream/disableDistanceDisable distance data stream.
/stream/enableIntensityEnable intensity data stream.
/stream/disableIntensityDisable intensity data stream.
/stream/enableFlagsEnable flags data in stream.
/stream/disableFlagsDisable flags data in stream.
/stream/enableAmplitudeEnable amplitude data in stream.
/stream/disableAmplitudeDisable amplitude data in stream.
/stream/enableNoiseEnable noise data in stream.
/stream/disableNoiseDisable noise data in stream.
/stream/enablePointCloudEnable point cloud in stream.
/stream/disablePointCloudDisable point cloud in stream.
/system/rebootReboot the Magellan board.
/system/shutdownShut down the Magellan board.
/command/send_to_meInstruct the depth sensor to send data packets to the address from which you are making the HTTP GET request.
/command/pixel/amplitude_threshold/command/pixel/asymmetry_threshold/filter/pop/filter/push/median/filter/push/neighbor/filter/push/asymmetryThresh/filter/push/amplitudeThresh/statusReturn some basic information about the state of the sensor’s calibration, hardware, and processing - like this:
{
module: {
frame_count: 0,
uptime: 0:01:11.862,
version: master-10000-abcdefg-dirty-qwerty
},
comms: {
running: true,
destination: fe80::1,
port: 10000,
queue_size: 0
time_since_last_sent: 78
},
calibration: {
state: GOOD,
frequencies: { 80320000: { 90, 135, 180 }, 60240000: { 90, 135, 180 }, 29500000: { 90, 135, 45 }, 3500000: { 45, 90, 135 } },
min_amplitude: 16.5,
max_asymmetry: 50,
bin_mask: 0
convolution: 0},
processing: {
pre: {
frames: 728,
bad frames: 0,
corrupt frames: 0,
},
pixel: { },
post: {
empty frames: 0,
streams: {
send_raw: false,
send_distance: false,
send_intensity: false,
send_amplitude: false,
send_cloud: true
},
filters: {
Median Filter,
Neighbor Filter,
}
},
},
imager: {
serial: 0006-3818-0407-0819,
state: RUNNING,
safety circuit: RUNNING,
mode: {
tag: two_frequency,
framerate: 10,
set_count: 3,
0: { frequency: off, duty_cycle: 0%, exposure: 2000, n_frames: 1 },
1: { frequency: 80320000, duty_cycle: 37.5%, exposure: 2000, n_frames: 4 },
2: { frequency: 60240000, duty_cycle: 37.5%, exposure: 2000, n_frames: 4 }
}
},
timing: {
pre_processing_ema: 18,
pixel_processing_ema: 78,
post_processing_ema: 45,
post_serializing_ema: 0,
packet_sending_ema: 0
}
}