05/10/16 [meta-elphel393][framepars] by Oleg Dzhimiev: config for wifi
config for wifi
3D Print Your Camera Freedom
Two weeks ago we were making photos of our first production NC393 camera to post an announcement of the new product availability. We got all the mechanical parts and most of the electronic boards (14MPix version will be available shortly) and put them together. Nice looking camera, powered by a high performance SoC (dual ARM plus FPGA), packaged in a lightweight aluminum extrusion body, providing different options for various environments – indoors, outdoors, on board of the UAV or even in the open space with no air (cooling is important when you run most of the FPGA resources at full speed). Tons of potential possibilities, but the finished camera did not seem too exciting – there are so many similar looking devices available.
NC393 camera, front view
NC393 camera, back panel view. Includes DC power input (12-36V and 20-75V options), GigE, microSD card (bootable), microUSB(type B) connector for a system console with reset and boot source selection, USB/eSATA combo connector, microUSB(type A) and 2.5mm 4-contact barrel connector for external synchronization I/O
NC393 assembled boards: 10393(system board), 10385 (power supply board), 10389(interface board), 10338e (sensor board) and 103891 - synchronization adapter board, view from 10389. m.2 2242 SSD shown, bracket for the 2260 format provided. 10389 internal connectors include inter-camera synchronization and two of 3.3VDC+5.0VDC+I2C+USB ones.
NC393 assembled boards: 10393(system board), 10385 (power supply board), 10389(interface board), 10338e (sensor board) and 103891 - synchronization adapter board, view from 10385
10393 system board attached to the heat frame, view from the heat frame. There is a large aluminum heat spreader attached to the other side of the frame with thermal conductive epoxy that provides heat transfer from the CPU without the use of any spring load. Other heat dissipating components use heat pads.
10393 system board attached to the heat frame, view from the 10393 board
10393 system board, view from the processor side
(function ( $ ) { "use strict"; $(function () { var masterslider_eceb = new MasterSlider(); // slider controls masterslider_eceb.control('arrows' ,{ autohide:true, overVideo:true }); masterslider_eceb.control('thumblist' ,{ autohide:false, overVideo:true, dir:'h', speed:17, inset:false, arrows:false, hover:false, customClass:'', align:'bottom',type:'thumbs', margin:10, width:100, height:80, space:5, fillMode:'fill' }); masterslider_eceb.control('slideinfo' ,{ autohide:false, overVideo:true, dir:'h', align:'bottom',inset:false , margin:10 , size:60 }); // slider setup masterslider_eceb.setup("MS57323cfcaeceb", { width : 800, height : 480, minHeight : 0, space : 0, start : 1, grabCursor : true, swipe : true, mouse : true, layout : "boxed", wheel : false, autoplay : false, instantStartLayers:false, loop : true, shuffle : false, preload : 0, heightLimit : true, autoHeight : false, smoothHeight : true, endPause : false, overPause : true, fillMode : "fill", centerControls : true, startOnAppear : false, layersMode : "center", hideLayers : false, fullscreenMargin: 0, speed : 20, dir : "h", parallaxMode : 'swipe', view : "basic" }); window.masterslider_instances = window.masterslider_instances || []; window.masterslider_instances.push( masterslider_eceb ); }); })(jQuery);An obvious reason for our dissatisfaction is that the single-sensor camera uses just one of four available sensor ports. Of course it is possible to use more of the freed FPGA resources for a single image processing, but it is not what you can use out of the box. Many of our users buy camera components and arrange them in their custom setup themselves – that does not have a single-sensor limitation and it matches our goals – make it easy to develop a custom system, or sculpture the camera to meet your ideas as stated on our web site. We would like to open the cameras to those who do not have capabilities of advanced mechanical design and manufacturing or just want to try new camera ideas immediately after receiving the product. Why multisensor?
One simple answer can be “because we can” – the CPU+FPGA based camera system can simultaneously handle multiple small image sensors we love – sensors perfected by the cellphone industry. Of course it is also possible to connect one large (high resolution/high FPS) sensor or even to use multiple camera system for one really fast sensor – we did such trick with the NC323 camera for book scanning, but we believe that the future is with the multiple view systems that combine images from several synchronized cameras using computational photography rather than large lens/large sensor traditional cameras.
Multi-sensor systems can acquire high-resolution panoramic images in a single shot (or offer full sphere live video), they can be used for image-based 3-d reconstruction that in many cases provide much superior quality to the now traditional LIDAR-based scanners which can not output cinematographic quality 3-d scenes. They can be used to capture HDR video by combining data for the same voxels rather than pixels. Such systems can easily beat the shallow depth of field of the traditional large format cameras and offer possibility of the post-production focus distance adjustment. Applications are virtually endless, and while at Elphel we are developing such multi-sensor systems our main products are still the high-performance camera systems hackable at any imaginable level.
Prototype of the 21-sensor 3D HDR 6K cinematographic camera
Eyesis4π stereophotogrammetric camera
NC353-369-PHG3 3-sensor camera camera, view demo (mouse scroll changes disparity, shift-scroll - zoom)
Spherical view camera with two fish eye lenses
Two sensor stereo camera with two interchangeable C/CS-mount lenses
SCINI project underwater remotely operated vehicle (ROV)
A helmet-mounted panoramic camera by HomeSide 720°
Quadcopter using multisensor camera for navigation, by 'Autonomous Aerospace' team in Krasnoyarsk, Russia
Multisensor R5 camera by Google
(function ( $ ) { "use strict"; $(function () { var masterslider_17e3 = new MasterSlider(); // slider controls masterslider_17e3.control('arrows' ,{ autohide:true, overVideo:true }); masterslider_17e3.control('thumblist' ,{ autohide:false, overVideo:true, dir:'h', speed:17, inset:false, arrows:false, hover:false, customClass:'', align:'bottom',type:'thumbs', margin:10, width:100, height:80, space:5, fillMode:'fill' }); masterslider_17e3.control('slideinfo' ,{ autohide:false, overVideo:true, dir:'h', align:'bottom',inset:false , margin:10 , size:40 }); // slider setup masterslider_17e3.setup("MS57323cfcb17e3", { width : 800, height : 480, minHeight : 0, space : 0, start : 1, grabCursor : true, swipe : true, mouse : true, layout : "boxed", wheel : false, autoplay : false, instantStartLayers:false, loop : true, shuffle : false, preload : 0, heightLimit : true, autoHeight : false, smoothHeight : true, endPause : false, overPause : true, fillMode : "fill", centerControls : true, startOnAppear : false, layersMode : "center", hideLayers : false, fullscreenMargin: 0, speed : 20, dir : "h", parallaxMode : 'swipe', view : "basic" }); window.masterslider_instances = window.masterslider_instances || []; window.masterslider_instances.push( masterslider_17e3 ); }); })(jQuery); Hackable by DesignTo have all documentation open and released under free licenses such as GNU GPL and CERN OHL is a precondition, but it is not sufficient. The hackable products must be designed to be used that way and we strive to provide this functionality to our users. This is true for the products themselves and for the required tools, so we had to go as far as to develop software for FPGA tools integration with the popular Eclipse IDE and replace closed source manufacturer code that is not compatible with the free software Verilog simulators.
Same is true for the camera mechanical parts – users need to be able to reconfigure not just the firmware, FPGA code or rearrange the electronic components, but to change the physical layout of their systems. One popular solution to this challenge is to offer modular camera systems, but unfortunately this approach has its limits. It is similar to Lego® sets (where kids can assemble just one object already designed by the manufacturer) vs. Lego® bricks where the possibilities are limited by the imagination only. Often camera modularity is more about marketing (suggesting that you can start with a basic less expensive set and later buy more parts) than about the real user freedom.
We too provide modular components and try to maintain compatibility between the generations of modules – new Elphel cameras can directly interface more than a decade old sensor boards and this does not prevent them from simultaneously supporting modern sensor interfaces. Physical dimensions and shapes of the camera electronic boards also remain the same – they just pack more performance in the same volume as newer components become available. Being in the business of developing hackable cameras for 15 years, we realize that the modularity alone is not a magic bullet. Luckily now there are other possibilities.
3d printing camera parts3d printing process offers freedom in the material world but so far we were pessimistic about its use for the camera components where microns often matter. Some of the camera modules use invar (metal alloy that has almost zero thermal expansion coefficient at normal temperatures) elements to compensate for the thermal expansion, and the PLA plastic parts seem rather alien here. Nevertheless it is possible to meet the requirements of the camera mechanical design even with this material. In some cases it is sufficient to have precise and stable sensor/lens combination – sensor front end (SFE), small fluctuations in the mutual position/orientation of the individual SFE may be compensated using image data itself in the overlapping areas. It is possible to design composite structure that combines metal elements of simple shape (such as aluminum, thin wall stainless steel tubes or even small diameter invar rods) and printed elements of complex shape. Modern fiber-reinforced material for 3d-printing promise to improve mechanical stability and reduce thermal expansion of the finished parts.
This technology perfectly fits to the hackable multi-sensor systems and fills important missing part of “sculpturing” the user camera. 3-d printing is slow and we can not print every camera, but that is not really needed. While we certainly can print some parts, we are counting that this technology is now available in most parts of the world where we ship the products, and the parts can be manufactured by the end user. We anticipate that many of the customer designs being experimental by nature will need later modifications, building the parts by the user can save on the overseas shipments too.
We count that the users will design their own parts, but we will try to make their job easier and provide modifiable design examples and fragments that can be used in their parts. This idea of incorporating 3-d printing technology into Elphel products is just 2 weeks old and we prepared several quick design prototypes to try it – below are some examples of our first generation of such camera parts.
Panoramic camera with perfect stitching - it uses 2 center cameras to measure distances
Stereo camera with 4 sensors having 1:3:2 bases providing all integer 1 to 6 multiples of 43mm in the lens pairs
Rectangular arranged 4-sensor stereo camera, adjustable bases
Short-base (48mm form center) 4-sensor camera
Printed adapter for the SFE of the 4-sensor panoramic camera
Printed adapter for the short-base 4-sensor camera
Various 3-d printed camera parts
It takes about 3 hours to print one SFE adapter
(function ( $ ) { "use strict"; $(function () { var masterslider_46c2 = new MasterSlider(); // slider controls masterslider_46c2.control('arrows' ,{ autohide:true, overVideo:true }); masterslider_46c2.control('thumblist' ,{ autohide:false, overVideo:true, dir:'h', speed:17, inset:false, arrows:false, hover:false, customClass:'', align:'bottom',type:'thumbs', margin:10, width:100, height:80, space:5, fillMode:'fill' }); masterslider_46c2.control('slideinfo' ,{ autohide:false, overVideo:true, dir:'h', align:'bottom',inset:false , margin:10 , size:40 }); // slider setup masterslider_46c2.setup("MS57323cfcb46c2", { width : 800, height : 480, minHeight : 0, space : 0, start : 1, grabCursor : true, swipe : true, mouse : true, layout : "boxed", wheel : false, autoplay : false, instantStartLayers:false, loop : true, shuffle : false, preload : 0, heightLimit : true, autoHeight : false, smoothHeight : true, endPause : false, overPause : true, fillMode : "fill", centerControls : true, startOnAppear : false, layersMode : "center", hideLayers : false, fullscreenMargin: 0, speed : 20, dir : "h", parallaxMode : 'swipe', view : "basic" }); window.masterslider_instances = window.masterslider_instances || []; window.masterslider_instances.push( masterslider_46c2 ); }); })(jQuery); Deliverables“3d print your camera freedom” – we really mean that. It is not about printing of a camera or its body. You can always get a complete camera in one of the available configurations packaged in a traditional all-metal body if it matches your ideas, printing just adds freedom to the mechanical design.
We will continue to provide all the spectrum of the camera components such as assembled boards and sensor front ends as well as the complete cameras in multiple configurations. For the 3-d printed versions we will have the models and reusable design fragments posted online. We will be able to print some parts and ship the factory assembled cameras. In some cases we may be able to help with the mechanical design, but we try to avoid doing any custom design ourselves. We consider our job is done well if we are not needed to modify anything for the end user. Currently we use one of the proprietary mechanical CAD programs so we do not have fully editable models and can only provide exported STEP files of the complete parts and interface fragments that can be incorporated in the user designs.
We would like to learn how to do this in FreeCAD – then it will be possible to provide the usable source files and detailed instructions how to customize them. FreeCAD environment can be used to create custom generator scripts in Python – this powerful feature helped us to convert all our mechanical design files into x3d models that can be viewed and navigated in the browser (video tutorial). This web based system proved to be not just a good presentation tool but to be more convenient for parts navigation than the CAD program itself, we use it ourselves regularly for that purpose.
Maybe we’ll be able to find somebody who is both experienced in mechanical design in FreeCAD and interested in multi-sensor camera systems to cooperate on this project?
05/09/16 [linux-elphel][master] by Mikhail Karpenko: WIP: correct frame length and readjust interframe params
WIP: correct frame length and readjust interframe params
05/08/16 [x393][framepars] by Andrey Filippov: synchronizing i2c frame number with command sequence frame number
synchronizing i2c frame number with command sequence frame number
05/07/16 [x393][master] by Andrey Filippov: updated bitstream version
updated bitstream version
05/07/16 [x393][master] by Andrey Filippov: added interrupts simulation, fixing circbuf pointers rollover bug
added interrupts simulation, fixing circbuf pointers rollover bug
05/06/16 [mechanical-parts][master] by Andrey Filippov: tube adapter for 0393-27-03
tube adapter for 0393-27-03
05/06/16 [linux-elphel][master] by Mikhail Karpenko: Fix pointer convertion error in jpeghead
Fix pointer convertion error in jpeghead
05/06/16 [linux-elphel][framepars] by Oleg Dzhimiev: comments and todo
comments and todo
05/05/16 [meta-elphel393][master-next] by Mikhail Karpenko: Merge branch 'master' of https://github.com/Elphel/meta-elphel393
Merge branch 'master' of https://github.com/Elphel/meta-elphel393
05/05/16 [meta-elphel393][framepars] by Mikhail Karpenko: Add libogg with patches and camogm
Add libogg with patches and camogm
Tmp manual
Known problems:
New page
==Defaults==IP addr: 192.168.0.8
user / pwd: root / <empty>
* The address is set in the ''init_elphel393.sh'' script on the card's FAT32 partition.
==Boot==
* on power-on boots from NAND flash: u-boot, device tree and kernel.
devicetree has "chosen = ...root=/dev/mmcblk0p2..." - rootfs is on the micro SD card second partition.
==Command line access==
ssh root@192.168.0.8
==Serial console access==
* Use microUSB-USB cable to connect to PC - the cable's end should be thin enough otherwise interferes with the micro SD card.
* Terminal: '''minicom -c on'''
(setup the device and speed - default settings might just work: /dev/ttyUSB0, 115200 8N1, No for hardware/software flow control)
==Get images==
channel 1: http://192.168.0.8:2323/noexif/img
channel 2: http://192.168.0.8:2324/noexif/img
channel 3: http://192.168.0.8:2325/noexif/img
channel 4: http://192.168.0.8:2326/noexif/img
==Change parameters==
* http://192.168.0.8/controls.html - previews and basic parameters:
** Exposure - the values are in the sensor lines.
** WB - r,g,b gains
** Quality - compression quality - individual for compressor but common for the buffer driver - it's better to have the same value for all channels.
* The startup settings are defined int the ''local/verilog/startup'' on the micro SD card, FAT32 partition:
...
-c write_sensor_i2c all 1 0 0x9009001e (exposure)
-c write_sensor_i2c all 1 0 0x9035000a (set all gains to 0xa)
-c write_sensor_i2c all 1 0 0x902c000e (blue gain to 0xe)
-c write_sensor_i2c all 1 0 0x9009001d (red gain to 0xd)
...
==Known problems==
* Vertical artifacts in jpegs. Images are ok at 100% quality. Fixed, testing.
* http://192.168.0.8:232x/noexif/mimg - multipart jpeg displays corrupted frames from time to time. Reason: network bandwidth? slow PC?
* Sometimes on power-on (NAND flash boot) cannot mount the card's rootfs partition. Kernel Panics. Power off/on. Soft "reboot -f" works ok.
* Changing exposure/quality/gains - can corrupt images - needs testing. Oleg
05/05/16 [linux-elphel][ahciwrite] by Oleg Dzhimiev: mutex for gpio_10389_control
mutex for gpio_10389_control
05/05/16 [linux-elphel][ahciwrite] by Oleg Dzhimiev: comments
comments
05/05/16 [linux-elphel][master-next] by Oleg Dzhimiev: gpio_control exported
gpio_control exported
05/05/16 [x393][framepars] by Oleg Dzhimiev: daemon mode - -P XXXX -i
daemon mode - -P XXXX -i
05/05/16 [x393][framepars] by Oleg Dzhimiev: stop compressor before changes then restart
stop compressor before changes then restart
05/05/16 [mechanical-parts][master] by Andrey Filippov: MODIFYING SUPPORTS
MODIFYING SUPPORTS
05/05/16 [mechanical-parts][master] by Andrey Filippov: extra support for the overhanging corners
extra support for the overhanging corners
Tmp manual
New page
==Defaults==IP addr: 192.168.0.8
user / pwd: root / <empty>
* The address is set by the ''init_elphel393.sh'' script on the card's FAT32 partition.
==Boot==
* on power-on boots from NAND flash: u-boot, device tree and kernel.
devicetree has "chosen = ...root=/dev/mmcblk0p2..." - rootfs is on the micro SD card second partition.
==Command line access==
ssh root@192.168.0.8
==Serial console access==
* Use microUSB-USB cable to connect to PC - the cable's end should be thin enough otherwise interferes with the micro SD card.
* Terminal: '''minicom -c on'''
(setup the device and speed - default settings might just work)
==Get images==
channel 1: http://192.168.0.8:2323/noexif/img
channel 2: http://192.168.0.8:2324/noexif/img
channel 3: http://192.168.0.8:2325/noexif/img
channel 4: http://192.168.0.8:2326/noexif/img
==Change parameters==
* http://192.168.0.8/controls.html - previews and basic parameters:
** Exposure - the values are in the sensor lines.
** WB - r,g,b gains
** Quality - compression quality - individual for compressor but common for the buffer driver - it's better to have the same value for all channels.
* The defaults settings are define on the micro SD card, FAT32 partition - ''local/verilog/startup'':
...
-c write_sensor_i2c all 1 0 0x9009001e (exposure)
-c write_sensor_i2c all 1 0 0x9035000a (set all gains to 0xa)
-c write_sensor_i2c all 1 0 0x902c000e (blue gain to 0xe)
-c write_sensor_i2c all 1 0 0x9009001d (red gain to 0xd)
...
==Known problems==
* Vertical artifacts in jpegs. Images are ok at 100% quality. Fixed, testing.
* http://192.168.0.8:232x/noexif/mimg - multipart jpeg displays corrupted frames from time to time. Network bandwidth.
* Sometimes on power-on (NAND flash boot) cannot mount the card's rootfs partition. Kernel Panics. Power off/on. Soft "reboot -f" works ok.
* Changing exposure/quality/gains - can corrupt images - needs testing. Oleg
Pages
