JeVois
1.22
JeVois Smart Embedded Machine Vision Toolkit
|
|
In addition to interacting with your JeVois camera through a video capture software, you can also use any of two available serial ports:
You, or another machine (e.g., an Arduino) can connect to JeVois and issue simple commands to the smart camera. These commands allow one to tune camera parameters, vision processing parameters, and general operation of the JeVois smart camera.
Things you can do with the JeVois command-line interface include:
Follow these instructions to connect to JeVois using serial-over-USB:
Once connected, you can use the command-line interface. Supported commands, general operation parameters, and camera sensor controls are as follows (further detailed in the following sections):
help - print help message info - show system information including CPU speed, load and temperature setpar <name> <value> - set a parameter value getpar <name> - get a parameter value(s) runscript <filename> - run script commands in specified file setcam <ctrl> <val> - set camera control <ctrl> to value <val> getcam <ctrl> - get value of camera control <ctrl> listmappings - list all available video mappings setmapping <num> - select video mapping <num>, only possible while not streaming setmapping2 <CAMmode> <CAMwidth> <CAMheight> <CAMfps> <Vendor> <Module> - set no-USB-out video mapping defined on the fly, while not streaming ping - returns 'ALIVE' serlog <string> - forward string to the serial port(s) specified by the serlog parameter serout <string> - forward string to the serial port(s) specified by the serout parameter usbsd - export the JEVOIS partition of the microSD card as a virtual USB drive sync - commit any pending data write to microSD restart - restart the JeVois smart camera General Options: --tracelevel (unsigned int) default=[0] Set the minimum trace level to display Exported By: engine --nickname (string) default=[jevois] Nickname associated with this camera, useful when multiple JeVois cameras are connected to a same USB bus Exported By: engine --help (bool) default=[false] Print this help message Exported By: engine value=[true] --loglevel (jevois::manager::LogLevel) default=[info] List:[fatal|error|info] Set the minimum log level to display Exported By: engine Engine Options: --videoerrors (bool) default=[true] Show any machine vision module errors (exceptions) in the video stream. Only takes effect if streaming video to USB. Exported By: engine --cpumode (jevois::engine::CPUmode) default=[Performance] List:[PowerSave|Conservative|OnDemand|Interactive|Performance] CPU frequency modulation mode Exported By: engine --videomapping (int) default=[-1] Index of Video Mapping to use, or -1 to use the default mapping Exported By: engine --cpumax (unsigned int) default=[1344] List:[120|240|312|408|480|504|600|648|720|816|912|1008|1044|1056|1080|1104|1116|1152|1200|1224|1248|1296|1344] CPU maximum frequency in MHz Exported By: engine --serialdev (string) default=[stdio] Hardware (4-pin connector) serial device name, or 'stdio' to use the console, or empty for no hardware serial port Exported By: engine --serlog (jevois::engine::SerPort) default=[None] List:[None|All|Hard|USB] Show log and debug messages on selected serial port(s) Exported By: engine --serout (jevois::engine::SerPort) default=[None] List:[None|All|Hard|USB] Send module serial messages to selected serial port(s) Exported By: engine --camturbo (bool) default=[false] Enable camera turbo mode by relaxing the need for DMA-coherent video buffer memory. This can accelerate severalfolds access to the captured image data, but it may also yield stripe artifacts with some modules, such as PassThrough. The stripes are pieces of incorrect data in the cache. You should experiment with each particular module. Turbo mode is not recommended for any production-grade application. Exported By: engine value=[true] --usbserialdev (string) default=[] Over-the-USB serial device name, or empty Exported By: engine --camreg (bool) default=[false] Enable raw access to camera registers through setcamreg and getcamreg Exported By: engine --python (bool) default=[true] When true, enable support for modules written in Python. Otherwise, attempting to load a python module will throw an exception. Disabling python saves a lot of memory and may be useful when using C++ modules that run large deep neural networks. Exported By: engine --cameradev (string) default=[/dev/video0] Camera device name (if starting with /dev/v...), or movie file name (e.g., movie.mpg) or image sequence (e.g., im%02d.jpg, to read frames im00.jpg, im01.jpg, etc). Exported By: engine --cameranbuf (unsigned int) default=[0] Number of video input (camera) buffers, or 0 for automatic. Exported By: engine --gadgetdev (string) default=[] Gadget device name. This is used on platform hardware only. On host hardware, a display window will be used unless gadgetdev is None (useful for benchmarking) or is a file stem for a movie file that does not start with /dev/ (and which should contain a printf-style directive for a single int argument, the movie number). Exported By: engine --serlimit (unsigned long) default=[0] Maximum number of serial messages that can be sent by a module using sendSerial(), for each video frame, or 0 for no limit. Any message sent by the module beyond the first serlimit ones will be dropped. This is useful to avoid overloading the serial link, for example in case one is running a ArUco detector and a large number of ArUco tags are present in the field of view of JeVois. Exported By: engine --gadgetnbuf (unsigned int) default=[0] Number of video output (USB video) buffers, or 0 for auto Exported By: engine --multicam (bool) default=[false] Allow up to 3 JeVois cameras on one USB bus. Enabling this reduces the amount of USB bandwidth used by each JeVois camera, from 3kb per USB isochronous microframe to 1kb. All 3 JeVois cameras must have this option enabled, and the JeVois linux kernel module should also have been loaded with multicam on. Exported By: engine --quietcmd (bool) default=[false] When true, do not issue a message 'OK' after every correct command received at the command-line interface. Recommended for advanced users only. Exported By: engine AVAILABLE CAMERA CONTROLS: - brightness [int] min=-3 max=3 step=1 def=0 curr=0 - contrast [int] min=0 max=6 step=1 def=3 curr=3 - saturation [int] min=0 max=4 step=1 def=2 curr=2 - autowb [bool] default=1 curr=0 - dowb [int] min=0 max=1 step=1 def=0 curr=1 - redbal [int] min=0 max=255 step=1 def=128 curr=125 - bluebal [int] min=0 max=255 step=1 def=128 curr=151 - autogain [bool] default=1 curr=1 - gain [int] min=16 max=1023 step=1 def=16 curr=58 - hflip [bool] default=0 curr=0 - vflip [bool] default=0 curr=0 - powerfreq [menu] values 0:disabled 1:50hz 2:60hz curr=2 - sharpness [int] min=0 max=32 step=1 def=6 curr=6 - autoexp [menu] values 0:auto 1:manual curr=0 - absexp [int] min=1 max=1000 step=1 def=1000 curr=500 - presetwb [menu] values 0:manual 1:auto 2:incandescent 3:fluorescent 4:fluorescent_h 5:horizon 6:daylight 7:flash 8:cloudy 9:shade curr=1
Additional parameters and additional commands may be available depending on which machine vision module is currently loaded. For example, the SaveVideo module allows two new commands, start
(to start recording video to disk) and stop
(to stop recording to disk). It also brings in a few new options which are specific to video encoding. When this module is loaded (by selecting the corresponding video resolution in your camera viewer software), typing help
will show these new sections:
PARAMETERS: Video Saving Options: --fourcc (string) default=[MJPG] Regex:[^\w{4}$] FourCC of the codec to use. The OpenCV VideoWriter doc is unclear as to which codecs are supported. Presumably, the ffmpeg library is used inside OpenCV. Hence any video encoder supported by ffmpeg should work. Tested codecs include: MJPG, MP4V, AVC1. Make sure you also pick the right filename extension (e.g., .avi for MJPG, .mp4 for MP4V, etc) Exported By: SaveVideo --fps (double) default=[30] Video frames/sec as stored in the file and to be used during playback Exported By: SaveVideo --filename (string) default=[video%06d.avi] Name of the video file to write. If path is not absolute, /jevois/data/savevideo/ will be prepended to it. Name should contain a printf-like directive for one int argument, which will start at 0 and be incremented on each streamoff command. Exported By: SaveVideo
and
MODULE-SPECIFIC COMMANDS: start - start saving video stop - stop saving video and increment video file number
You can also use help2
to only show the parameters and commands of the currenly loaded module.
Commands are case-sensitive and must be entered exactly as shown here. Because the command-line interface is mostly for use by machines (e.g., an Arduino) and to optimize speed, as mentioned above only very minimal forgiveness for typos and other deviations from the required command format are tolerated.
JeVois distinguishes between two types of serial communications:
1) serlog: For log messages (error messages, notices to users, etc). Log messages are categorized into severity tiers, and always start with DBG
(for debug level), INF
(info level), ERR
(error level), or FTL
(fatal error level).
2) serout: For text-based outputs intended to be consumed by a machine (e.g., coordinates of an object detected by JeVois, to send to an Arduino).
The assignment of actual ports, such as hardware 4-pin connector vs serial-over-USB port, to serlog
and serout
is controlled by parameters, detailed below. The assignment is very flexible, for example, you can decide to send serlog
messages to both the 4-pin hardware serial port and to the serial-over-USB port, or or to no port, or to just one port, etc while sending serout
messages to the hardware 4-pin serial port only, or all ports, no ports, etc.
Note how parameter serlimit
can be set to limit the number of serial messages that are sent on every video frame, to avoid overloading the serial link. For example, if a module sends one message for each detected item, but many items are present, serlimit
can be used to limit the number of items that will be reported over serial port.
When a command is received by the JeVois engine on a given serial port, it is executed and any output is sent back to that same serial port.
All successful commands end with a final line that says
OK
Failed commands issue some error message instead, which always starts with ERR
, such as:
ERR Unsupported command
Many commands do not produce any additional outputs, and hence only return either a line that says OK
or one that starts with ERR
.
The default end-of-line behavior for JeVois is sloppy which consists of:
This is configurable upon startup of the JeVois smart camera. Please see the jevois::serial::linestyle parameter of jevois::Serial for details. Note, however, that this paremeter becomes hidden after JeVois has started. Hence, you can only change serial end-of-line behavior through the initscript.cfg script that is executed upon boot up of the JeVois smart camera. See The jevois-daemon executable for details.
General commands always available irrespective of which vision module is loaded are described here.
Prints the help message. The help message is sent to the serial port that issued the help command only.
Shows some vital information about the JeVois smart camera:
INFO: JeVois 1.1 INFO: Linux version 3.4.39 INFO: CPU: 1344MHz, 32C, load: 1.02 1.01 0.86 1/50 83 INFO: MemTotal: 238452 kB, MemFree: 194292 kB INFO: OUT: YUYV 640x300 @ 60fps CAM: YUYV 320x240 @ 60fps MOD: JeVois:DemoSaliency OK
For example, the command
setpar cpumax 1200
returns
OK
and a subsequent command
info
would show the updated CPU frequency of 1200 MHz:
INFO: JeVois 1.1 INFO: Linux version 3.4.39 INFO: CPU: 1200MHz, 31C, load: 1.00 1.01 0.89 1/50 83 INFO: MemTotal: 238452 kB, MemFree: 194292 kB INFO: OUT: YUYV 640x300 @ 60fps CAM: YUYV 320x240 @ 60fps MOD: JeVois:DemoSaliency OK
The answer to this command consists of the parameter name followed by the current parameter value. For example, the command
getpar cpumax
returns (assuming the parameter has just been set to 1200 as above)
cpumax 1200 OK
Runs a script, which is just a file that contains commands in exactly the same format as they would be typed interactively over the command-line interface. If the filename is not absolute (does not start with a / symbol), then the filename is assumed to be relative to the location of the currently-loaded vision module.
Set a camera control. The help message gives a list of available camera controls and their permitted values. Beware that some controls are not effective in some modes, for example, you should turn autoexp
(auto exposure control) off before you try setting a value to absexp
(manual exposure value).
For example
setcam autogain 0 setcam gain 232
For example, following the above setcam
commands, issuing
getcam gain
would return
gain 232 OK
Note that sometimes the camera sensor hardware will modify values given through setcam
, for example round them off, clip them, etc and getcam
allows you to get back the value that was actually set into the sensor chip.
Lists all the video mappings, which define the associations between a camera image size, frame rate, and pixel format, a USB output image size, frame rate, and pixel format, and which machine vision module to run. The definitions of mappings are in the videomappings.cfg file. The listmappings
command allow you to obtain the numerical index of a given mapping in the list, shich you can later use with the setmapping
command. For example:
listmappings
may return a list like (depending on the contents of videomappings.cfg)
AVAILABLE VIDEO MAPPINGS: 0 - OUTPUT: NONE 0x0 @ 0fps CAMERA: YUYV 320x240 @ 60fps) MODULE: SaveVideo 1 - OUTPUT: NONE 0x0 @ 0fps CAMERA: YUYV 320x240 @ 30fps) MODULE: RoadNavigation 2 - OUTPUT: NONE 0x0 @ 0fps CAMERA: YUYV 320x240 @ 30fps) MODULE: SaveVideo 3 - OUTPUT: NONE 0x0 @ 0fps CAMERA: YUYV 176x144 @ 120fps) MODULE: SaveVideo 4 - OUTPUT: RGGB 640x480 @ 30fps CAMERA: RGGB 640x480 @ 30fps) MODULE: PassThrough 5 - OUTPUT: RGGB 352x288 @ 60fps CAMERA: RGGB 352x288 @ 60fps) MODULE: PassThrough 6 - OUTPUT: RGGB 176x144 @ 120fps CAMERA: RGGB 176x144 @ 120fps) MODULE: PassThrough 7 - OUTPUT: MJPG 352x288 @ 60fps CAMERA: RGGB 352x288 @ 60fps) MODULE: Convert 8 - OUTPUT: MJPG 320x240 @ 60fps CAMERA: RGBP 320x240 @ 60fps) MODULE: Convert 9 - OUTPUT: MJPG 176x144 @ 120fps CAMERA: RGGB 176x144 @ 120fps) MODULE: Convert 10 - OUTPUT: RGBP 320x240 @ 22fps CAMERA: YUYV 320x240 @ 22fps) MODULE: DemoGPU 11 - OUTPUT: YUYV 960x240 @ 30fps CAMERA: YUYV 320x240 @ 30fps) MODULE: DemoNeon 12 - OUTPUT: YUYV 640x312 @ 50fps CAMERA: YUYV 320x240 @ 50fps) MODULE: DemoSalGistFaceObj 13 - OUTPUT: YUYV 640x300 @ 60fps CAMERA: YUYV 320x240 @ 60fps) MODULE: DemoSaliency 14 - OUTPUT: YUYV 640x300 @ 10fps CAMERA: YUYV 320x240 @ 10fps) MODULE: BurnTest 15 - OUTPUT: YUYV 352x288 @ 60fps CAMERA: YUYV 352x288 @ 60fps) MODULE: SaveVideo 16 - OUTPUT: YUYV 320x288 @ 30fps CAMERA: YUYV 320x240 @ 30fps) MODULE: SaliencySURF 17 - OUTPUT: YUYV 320x286 @ 30fps CAMERA: YUYV 320x240 @ 30fps) MODULE: DemoQRcode 18 - OUTPUT: YUYV 320x260 @ 30fps CAMERA: YUYV 320x240 @ 30fps) MODULE: DemoArUco 19 - OUTPUT: YUYV 320x256 @ 30fps CAMERA: YUYV 320x240 @ 30fps) MODULE: RoadNavigation 20 - OUTPUT: YUYV 320x254 @ 60fps CAMERA: YUYV 320x240 @ 60fps) MODULE: ObjectTracker 21 - OUTPUT: YUYV 320x252 @ 30fps CAMERA: YUYV 320x240 @ 30fps) MODULE: ObjectDetect 22 - OUTPUT: YUYV 320x240 @ 60fps CAMERA: YUYV 320x240 @ 60fps) MODULE: SaveVideo 23 - OUTPUT: YUYV 320x240 @ 30fps CAMERA: YUYV 320x240 @ 30fps) MODULE: SaveVideo 24 - OUTPUT: YUYV 320x120 @ 30fps CAMERA: YUYV 160x120 @ 30fps) MODULE: DemoBackgroundSubtract 25 - OUTPUT: YUYV 176x160 @ 120fps CAMERA: YUYV 176x144 @ 120fps) MODULE: RoadNavigation 26 - OUTPUT: YUYV 176x144 @ 120fps CAMERA: YUYV 176x144 @ 120fps) MODULE: SaveVideo 27 - OUTPUT: YUYV 160x120 @ 60fps CAMERA: YUYV 160x120 @ 60fps) MODULE: SaveVideo 28 - OUTPUT: YUYV 88x72 @ 120fps CAMERA: YUYV 88x72 @ 120fps) MODULE: SaveVideo 29 - OUTPUT: YUYV 64x192 @ 25fps CAMERA: YUYV 320x240 @ 25fps) MODULE: SalientRegions 30 - OUTPUT: GREY 320x960 @ 45fps CAMERA: YUYV 320x240 @ 45fps) MODULE: EdgeDetectionX4 31 - OUTPUT: GREY 320x240 @ 59fps CAMERA: YUYV 320x240 @ 59fps) MODULE: EdgeDetection 32 - OUTPUT: GREY 320x240 @ 30fps CAMERA: YUYV 320x240 @ 30fps) MODULE: SuperPixelSeg 33 - OUTPUT: GREY 176x288 @ 100fps CAMERA: YUYV 176x144 @ 100fps) MODULE: OpticalFlow 34 - OUTPUT: GREY 176x144 @ 120fps CAMERA: YUYV 176x144 @ 120fps) MODULE: DemoEyeTracker 35 - OUTPUT: GREY 176x144 @ 119fps CAMERA: YUYV 176x144 @ 119fps) MODULE: EdgeDetection 36 - OUTPUT: GREY 160x495 @ 60fps CAMERA: YUYV 160x120 @ 60fps) MODULE: DemoCPUGPU 37 - OUTPUT: GREY 128x117 @ 5fps CAMERA: YUYV 160x120 @ 5fps) MODULE: DenseSift 38 - OUTPUT: GREY 120x25 @ 60fps CAMERA: YUYV 320x240 @ 60fps) MODULE: SaliencyGist OK
See User guide to video modes and mappings for more information about video mappings.
setmapping2
command detailed below (operation with no streaming video output, for embedded robots).Usually, video mappings are selected by the host computer, by selecting a given video resolution, frame rate, and pixel format. In some instances, however, setmapping
is useful:
NONE
, i.e., there currently is no video being streamed over USB.Example:
setmapping 0
will return
OK
if the host computer is not currently streaming video from JeVois over USB, and the mapping will then be changed to 0. But if video is streaming to the host computer, the answer will be:
ERR Command error [setmapping 0]: Cannot set mapping while streaming: Stop your webcam program on the host computer first.
Simply close your camera capture software on the host computer and try again.
streamon
and streamoff
commands below).When a mode with USB output of type NONE is selected, two additional commands become available: streamon and streamoff, detailed below.
This allows one to define and set on the fly a new video mapping that has no USB output.
This command is very useful to configure the JeVois smart camera from an embedded system like an Arduino, which may not have knowledge of the mapping number in videomappings.cfg for a particular mapping it wishes to use.
See User guide to video modes and mappings for details. Here, because there is no USB output, we only need to specify camera format, resolution, and framerate, and which machine vision module to use.
For example:
setmapping2 YUYV 640 480 20.0 JeVois DemoArUco
will load up the DemoArUco module and run it with the camera configured for 640x480 @ 20fps YUYV video caoture.
setmmapping2
), there is no camera capture software running on the host that would instruct JeVois to start streaming video. Hence one needs to instruct the JeVois camera to start or stop streaming (see streamon
and streamoff
commands below). This is done manually so that users can decide when to start and stop streaming.setmapping2
should be used only with machine vision modules that support processing with no USB output. Those will have a process(InputFrame && inframe) function in their source code. If your JeVois smart camera seems to not work after a given setmapping2
command, try a setpar serlog USB
and connect to JeVois using a terminal and the serial-over-USB connection. If you see no messages, probably you forgot the streamon
command. If you see error messages, probably your module does not supportprocessing with no USB output.This command will only exist if the current video mapping has a USB output of type NONE (including modes selected using setmapping2
).
It will instruct the JeVois smart camera to start streaming video frames from the camera sensor. It is necessary to issue a streamon
command after a video mode with no USB output has been selected. Otherwise, the smart camera will just wait for this command indefinitely.
This command will only exist if the current video mapping has a USB output of type NONE (including modes selected using setmapping2
). It will instruct the JeVois smart camera to stop streaming video frames from the camera sensor.
When using a mapping with USB output of type NONE, you must manually issue a streamoff
command before you can issue your next setmapping
or setmapping2
command.
The purpose of this command is to check whether the JeVois smart camera has crashed, for example while testing a new machine vision module currently vbeing developed and debugged.
This works in conjunction with the serlog
parameter, which determines which serial port is used for log messages. The serlog
command just forwards the given string to the serial port selected by the serlog
parameter.
This is useful, for example, to allow an Arduino connected to the hardware serial port of JeVois to send debug messages that can be read by a human connected to the serial-over-USB port of JeVois.
For example, an Arduino connected to the hardware 4-pin connector of JeVois may issue over its serial port:
setpar serlog USB serlog Arduino started serlog Arduino compass calibrated
and a human (or another machine) connected to the JeVois camera using the serial-over-USB port would then see:
Arduino started Arduino compass calibrated
Remember that log messages (e.g., error messages) issued by the JeVois camera itself are also sent to the port selected by the serlog
parameter.
This operates like the serlog
command but uses the serial port selected by the serout
parameter.
For example, to interactively debug some Arduino code, one may want to manually type the kinds of strings that a JeVois machine vision module would issue, to make sure that the Arduino always correctly interprets them. Assume that we are debugging the pan/tilt Arduino code provided with JeVois. One may want to try to issue a number of "T2 targetx targety" messages by hand to check that the pan/tilt camera moves in the correct way. With the Arduino connected to the 4-pin hardware serial port of JeVois, and a human interacting with JeVois through the serial-over-USB port, the human could type:
setpar serout Hard serout T2 0 0 serout T2 1000 1000 serout T2 -1000 -1000 serout T2 &^%$@ try to crash arduino by using buggy T2 command
The "T2 x y" strings would then be forwarded to the Arduino, which should move the pan/tilt motors accordingly. With the last (ill-formatted) T2 command, the Arduino should correctly reject it and not move the motors.
Remember that module data output messages (e.g., coordinates of a detected target object) issued by the JeVois camera itself are also sent to the port selected by the serout
parameter.
JeVois v1.1
This command allows one to access over USB the JEVOIS partition of the microSD card that is inside JeVois, as if it was a USB thumbdrive connected to the host computer. This command only works when not streaming video.
Writing to the microSD inside JeVois as it is also being used by JeVois poses data caching and synchronization problems, which are currently resolved as follows:
usbsd
command is issued on the command line interface, the JEVOIS partition of the microSD is first made read-only to the JeVois processor. This means that JeVois will not be able to save data anymore (e.g., video files saved by some modules), and it will not be able to do other things that need to write to the microSD, such as automatically compiling Python modules as they are loaded up. The JEVOIS partition is then exported to the host computer as a virtual USB flash drive, with read and write access.JeVois v1.1
Issue this command to ensure that data being writtent to microSD has been committed to the card, for example before you restart or disconnect JeVois.
JeVois v1.1
JeVois platform hardware does not have a battery for a real-time clock. Hence, its time gets reset to The Epoch (January 1, 1970 UTC) on each reboot. Use this command to set the date and time or to get it. Syntax is the same as the Unix date
command. This is useful, for example, to get accurate time stamps when recording videos. Since JeVois does not have a battery-powered clock, any date setting will be lost at the next power off.
See, for example, here for the more information about the Unix date command. The format to use to set the date is:
MMDDhhmm[[CC]YY][.ss]]
Where square brackets denote optional fields, and MM is the month, DD is the day, hh is the hour, mm is the minute, CC are the first two (century) digits of the year, YY are the last two digits of the year, and ss is the seconds.
For example, issuing the following date
command to JeVois in a serial terminal connected to JeVois:
date 0504153018
returns
date now Fri May 4 15:30:00 UTC 2018 OK
On a Linux host computer, to set the date and time on your JeVois camera to the same as your host, you can just forward the output of the Linux date command as input to the JeVois date command: in a terminal window of your Linux host, type:
Platform Only JeVois v1.1
This command simply restarts the JeVois smart camera.
Host Only
When running in host mode, one can quit jevois-daemon
by simply typing 'quit' in the terminal in which it was started.
Use this with caution as you could corrupt the operating system of JeVois. This is useful mainly for debugging. For example, try:
shell dmesg
to see the boot log of JeVois.
As this documentation may fall behind of the actual software running on JeVois, check help
in the JeVois console for any new commands not yet documented here.
As mentioned above, different machine vision modules will add parameters (and possibly new commands) available to users over the command line. Here we describe the parameters that are exported by the Engine. Those are always available, regardless of which machine vision module is currently loaded:
Log messages are issued by JeVois code using provided commands LDEBUG(), LINFO(), LERROR() and LFATAL(). The loglevel parameter allows a user to select at runtime the level of log verbosity. Messages at the selected level or more severe will be displayed. For example, when selecting a loglevel
of info
, LINFO(), LERROR() and LFATAL() messages will be displayed.
debug
will not appear as one of the possible loglevel
values if JEVOIS_LDEBUG_ENABLE was off during compilation of JeVois.Programmers may use the JEVOIS_TRACE() macro to issue debugging messages that will tell a user when a particular function is executed. JEVOIS_TRACE() will issue one message when the function starts, and another when it ends. This is useful to detect where a module under development might be locking up and should be fixed.
JEVOIS_TRACE takes one argument, which is an integer number called level
. The tracelevel
parameter can then be adjusted to only show trace messages that have a level below the current value of tracelevel
. The higher the tracelevel, the more messages you will see. Programmers decide on which trace level to use in various functions.
The value of this parameter indicates to which serial port(s) messages of type serout will be sent.
See discussion of the serout
command above.
The value of this parameter indicates to which serial port(s) messages of type serlog will be sent.
See discussion of the serlog
command above.
Allows a user (or Arduino) to set the maximum frequency at which the JeVois CPU will run. This may be useful in some situations to limit CPU speed, for example when powering JeVois from a battery that is running low.
Allows users to select different schemes for hoe the JeVois CPU frequency may be adjusted on the fly during operation. This is also known as a frequency governor in the Linux community.
By default, the assumption is that a JeVois smart camera will always be processing video at its maximum possible speed. Hence, by default cpumode
is set to Performance
. Other modes will slow the CPU down when it is not heavily used, for example while the CPU is waiting for the next image from the camera.
cpumode
at its default setting of Performance
, as this will provide the most reliable frame rates. Large fluctuations in frame rates may appear when using other modes.This command allows one to enable direct access to the low-level registers on the sensor chip of the JeVois smart camera. It is turned off by default. This is for low-level hackers only, who are trying to improve image quality by trying different settings of the low-level camera sensor registers.
When parameter camreg
is set to true, two new commands become available:
reg
val
- set raw camera register reg
to value val
reg
- get value of raw camera register reg
In both cases, reg
and val
are unsigned 8-bit values. For convenience, both decimal values and hexadecimal values (using a prefix 0x
to indicate hexadecimal) are supported.
On modified JeVois units with the AR0135 global shutter and ICM-20948 IMU, the following commands also become available:
reg
val
- set raw IMU register reg
to value val
reg
- get value of raw IMU register reg
reg
num
val1
... valn
- set array of raw IMU register valuesreg
num
- get array of raw IMU register valuesreg
val
- set raw DMP register reg
to value val
reg
- get value of raw DMP register reg
reg
num
val1
... valn
- set array of raw DMP register valuesreg
num
- get array of raw DMP register valuesSometimes, it is useful to set some parameters or execute some commands when a module is loaded.
JeVois allows you to store parameter settings and commands in a file named script.cfg stored in the directory of a module. The file script.cfg may contain any sequence of commands as you would type them interactively in the JeVois command-line interface.
Here is an example for the ObjectTracker module, which tracks objects based on their color. For this module, it is a good idea to set the JeVois camera sensor to full manual mode, as automatic gain, exposure, and white balance would otherwise affect the RGB pixel values of the same object under different viewpoints and locations with respect to the light sources. Since tracking in the ObjectTracker is based on the color values returned by the sensor, full manual camera mode gives more reliable tracking.
The script.cfg file for ObjectTracker is stored on your microSD at JEVOIS:/modules/JeVois/ObjectTracker/script.cfg source in ~/jevoisbase/src/Modules/ObjectTracker/script.cfg.