this is just kind of a broad question to get some starting points.
I am looking to purchase a Microsoft Kinect for the purposes of doing some programming with it.
I prefer programming in C++, and have typically made interfaces using QtCreator as opposed to VS. I see that there are a couple of Kinect's to buy - the normal gaming device, and "Kinect for Windows" which includes the SDK, it seems? Do i really need that, or can I buy the cheaper Kinect gaming device? I see that there is an openkinect project out there - I assume that is the FOSS equivalent of the "for Windows" version? I think I read somewhere the MS SDK is only going to work in Visual Studio (which I have), but if its that much better, I guess I could switch to VS for these projects.
Secondly, I am interested in doing some motion capture / 3d model projection onto the 3d objects I capture. Do I definitely need a depth camera to do this type of thing? (As in - map a "monster" to a human who's moving around in the scene). This is where I thought OpenCV might come in handy - and I am especially interested in OpenCV because of its GPU-enabled features.
Thanks for the discussion (in advance)
I am working on the kinect device for reaserch projects so I think I can anwser to some of your questions...
Some Open SDK to use with kinect :
If you like QT, you will like the : QT Kinect Widget. I never test this widget.
OpenNI : OpenNI. That is the official driver of the sensors like Kinect or Asus XTion pro (also called the RGBD sensors). This API can provide you either the raw point cloud or the skeleton if you want to make a smart HMI quickly.
The Point Cloud Library : PCL. You can use this library to acquire the point cloud, and then use all algorithm presents in this library to develop you own point cloud application !
And of course, the OpenCV Wrapper : OpenCV. This will provide you a depth map (not a point cloud).
All this SDK are usable with QtCreator both on linux and windows.
The Hardware :
If you buy a kinect in a video game store, you will not be able to plug it on your computer because the socket isn't standard. You will need to buy an adapter : KinectAdapter. This adapter is required because Kinect have a DC motors, and USB can't provide enough power for this motor.
If you buy an Asus XTION Pro live, you will not need any adapter. There is no DC motors on this device and i am quite sure that is exactly the same device than kinect. I think that Microsoft didn't "invent" the kinect, but OpenNI does ! Asus bought a licence to OpenNI for their XTION, and Microsoft bought openni for their kinect :)
Your application
I never done Motion capture and 3D model projection, but I can tell you that it will be easier to do it with a depth sensor. I think the best way to do it is to use PCL to acquire point cloud and RGB image. Thanks to the plane detectors in PCL you can compute the projection of your 3D model, and use OpenCV to display the RGB data and the projected model.
Related
The upcoming Qt 5.6 introduces a blacklist to mark some graphic cards which are known to insufficiently support OpenGL or Angle.
Confirm e.g.
https://bugreports.qt.io/browse/QTBUG-47435
https://codereview.qt-project.org/#/c/140418/5//ALL
But what happens to QML apps on cards that have both disable_desktopgl and disable_angle set? Can those users not run QML apps at all?
They can't use OpenGL to accelerate Qt Quick, no. Which is a pretty severe drawback. Unfortunately the status of OpenGL on Windows is a nightmare. The "average" Windows computer will have an Intel-based GPU with ancient drivers, which are buggy enough to cause Qt not even try to use any 3D at all (OpenGL nor Direct3D). NVIDIA and AMD are usually better, as at least they tend to be more up-to-date.
Usually upgrading the Intel drivers solves most issues, but you are not always in the position of asking your users to upgrade their drivers (they might not even be able to do so, for instance lacking administrator privileges, and/or using laptops where the driver version has been pinned by the vendor).
Note that even other projects, such as Chromium or Firefox, have their own fine-grained driver bug blacklists (example).
In case your card is totally blacklisted you can:
use an OpenGL CPU implementation, such as Mesa. If you ship opengl32sw.dll with your application, it can be picked up by Qt. See the explaination here.
use the Qt Quick 2D renderer, which is a specialized CPU-based renderer for a subset of Qt Quick items. Compared to Mesa it's incredibly faster (because it doesn't need to go through the OpenGL pipeline in order to draw, say, a rectangle -- it can just draw the rectangle using a 2D rasterizer); on the other hand, certain things stop working, like shader effects. Currently it's available only under a commercial license, but in 5.8 it's going to be open source.
(Nitpick: QML is the language, Qt Quick is the framework/library to build UIs which you program using QML).
I need to integrate an extensible map widget with my application running on a sized-down Linux ARM platform with around 1GB RAM, potentially no storage, potentially low bandwidth and connectivity. These limits are quite important. My application is developed using C++ and Qt5 with qml interfaces.
I've been looking at KDE Marble, Cesium and QGIS.
I don't think that QGIS is exactly my match, because I don't need to extensively edit geospatial data - rather, I need to display it in a nice widget. Plus QGIS is a GPL tool, which is, in my case, very restricting.
The map widget would be used, aside from normal virtual globe uses, to display custom layer data provided by some geolocalized sensors. I need to be able to create, display and edit paths (with waypoints) on the map view, it also needs to be touchscreen enabled.
Could you share your experience with developing Marble or Cesium or QGIS? Can you make a comparision of their pros/cons in relation to my needs?
I know it's a difficult question but any input is welcome. Thank you!
I recommend to use QGIS. It has the following modules:
QGIS core library: basic GIS functionality
QGIS gui library: adds reusable GUI widgets
QGIS analysis library: high level tools for spatial analysis on vector and raster data
MapComposer
QGIS network analysis library: high level tool for build topology and analysis
You can compile the core and gui modules as you don't need advanced and complex features.
I recommend it because:
It is highly modular and you can compile the modules which are necessary for
your needs.
QGIS also has many useful plugins which provides you whatever you
like.
QGIS has also a Globe plugin which shows maps on a 3D globe. It is
not so mature but has good features.
QGIS supports Android and is well suited for mobile and touch
devices.
It has also a fast developing community.
New versions of QGIS support Qt 5.x
It has a good documentation
Adding new features and custom tools in so easy thanks to QgsMapTool
I want to connect multiple projector to single laptop, I found about VGA Splitter (http://www.kvmswitchtech.com/vga-splitter-350mhz-8-port-p46359.htm) which can use to connect multiple projectors to single PC.
But I don’t want to display whole screen in both Projectors, in short Projectors should display different stuff at same time.
For Example:-
Projector 1 can Display Power point Presentation and Projector 2 can Display the running movie in player.
I got below set of Questions
Is there any Software available to perform this operation?
If I want to write my own application, Is Directshow (Provided by Microsoft ) is good one to start?
Is there any other VGA Programming language available?
Is there any Software available to perform this operation?
The primary question you are going to get here is how the projectors are connected to PC. The device might need specific integration and you're moving the item #2 below immediately. Otherwise it can be a sort of secondary monitor and you can extend your desktop over it, and then any full screen application running on the secondary monitor is going to be projected.
Perhaps, you will find more software choices going to SuperUser.
If I want to write my own application, Is Directshow (Provided by Microsoft ) is good one to start?
As mentioned above, the hardware might need you to use specific SDK from the vendor and this is your starting point. DirectShow is the API that covers multiple related tasks and might be of use here:
it is capable to built media pipelines terminating at DirectShow-compatible video output device (the projector might be not might be not capable/compatible)
it allows you to play media files into your application and otherwise control video/audio and integrate it into higher level software
DirectShow as API does not fully cover requested task, but it definitely relevant might be used in the in-house built Windows based app.
Is there any other VGA Programming language available?
The "language" is not actually language and it is how particular device is integrated with PC. This is typically covered by hardware vendors who provide the hardware with accompanying development kits and samples.
I want to work in HMI domain and have started learning it.
In first stage I want to develop Qt GUI based touchscreen application for ARM9 board. Can anyone please suggest how to go for it and any budget ARM9 Dev board with integrated touchscreen LCD for this purpose? I want to use opensource platform as much as possible.
I know I can do it with more ease on an ARM board which support some OS like (say) embedded linux or may be Rasberry Pi with java or Qt based GUI. But I do not want to use OS rather want to develop just a simple touch screen GUI application to (say) turn a LED on the ARM board (without running any OS).
My next step of learning will be using touch screen GUI, Rasberry Pi with raspbian, where I have already found numerous resources Online.
Thanks
It may be better to just get a low end tablet or why not even a phone, much cheaper than a dev board with additional touchscreen. Plus Android is open. It may be a good idea to get an Ubuntu touch compatible device. The Pi, while cheap, is also very underpowered. A cheap tablet or phone will be more applicable, especially since official Android support in Qt is looming on the horizon. So why spend more money on a lower spec'd device with very narrow application range? Not to mention the wide range of sensors you get with a market device - cameras, compass, gyroscope, GPS, accelerometer - those could come in handy in a HMI scenario. Last but not least, graphics drivers are usually better in production devices than prototype boards.
I want to be able to build my own small electronic device that just has a few buttons, and stores each keypress inside a memory.
I am a pretty experienced programmer but I have no idea where to start regarding hardware, or what to search for on google.
Please give me any info that can help me out.
Arduino boards are inexpensive and the platform is wildly popular. I buy stuff like that from sparkfun.com in the developer area down the left side of the page. At sparkfun you will also find many other similar eval boards from various vendors. I like the lillypad over the arduino pro mini only because it has the programming pins already soldered. You will want the ftdi usb serial board thing for power and programming. I am a fan of the armmite pro, which is arm based. the mbed2 is real easy when you plug it in it shows up like a thumb drive, you copy your .bin file to it and press the button and it loads the program and runs it. The blue leds give me migraines but that was solved by replacing with green leds. I have a number of the header style olimex boards, good stuff, have never used the ones with displays and buttons though. Going to other sites the ez430 msp430 is a good starting platform but no buttons which you are interested in using, the stellaris cortex-m3 based family is good I would skip the 811 board and go for maybe the 1978 or something in that range, the 811 is too easy to brick.
Most of the ones mentioned above (not the olimex boards) have sandboxes for you to play in safely (turn key development environments), but at the same time you are not locked into those environments, you can do your own thing if you like, use different toolchains, flash programmers, etc. I personally would avoid the lpcxpresso for that reason, painfully tied to both windows and their sandbox.
the sam7-h256 for example, an olimex board, is powered by the usb, and a program called sam-ba is used to load your programs into the chip. That particular board does not have buttons but boards in that family are also programmed the same way. basically one usb cable for power and programming. And like the AVR (arduino and avr butterfly are based on the avr micro) the at91sam7s is an atmel part. Atmel seems to have that edge over competitors for better documentation and support. At least my belief is that contributes to the popularity of the avr (the avrfreaks website existed before the avr butterfly and the arduino), and it certainly makes me like their arm based products.
short answer, start with http://www.sparkfun.com along the left side click on Development Tools, and there are many solutions. You want to find something like the arduino, armmite pro, mbed, that either standalone or with a ftdi based usb thing you both power the board, and have an interface for programming. There should be links on the page to websites with development tools, compilers, etc, and tools for actually doing the loading of the program on the board. I recommend trying the arm, avr, and msp430 micros, as well as different vendors (many different arm based solutions with their own pros and cons for example).
The arduino platform is a cheap and easy option.
search for arduino and netduino
What language do you program in?
Arduino uses a C like language.
Netduino uses C#.
You can get a NXT kit (yes, LEGO) and use RobotC.
I can only advice how I started:
Get a bread board and some ATMel microcontrollers (ATMega16 is perfect for beginners).
You can either buy an STK500 or you use the In-System-Programming feature, and ask someone that can build you a programmer (I recommend USBasp). When you use Linux, use AVRdude and the gccavr toolchain. Under windows, you can use the WinAVR studio.
And buy some components, like resistors, capacitors, probably a quartz crystal to make simple circuits.
That's how I started anyway.
Arduino is based on Atmel AVR, so the same Arduino or STK500 board can be programmed with AVR Studio + WinAVR combination, which is nice if you already have experience in GCC. For all additional info and tutorials take a look at http://www.avrfreaks.net