There are plenty of YouTube videos (and their open source equivalents) to help budding engineers master the intricacies of development, but often the best way to learn is to get in the same room as the experts, and go step-by-step through the process.
At SCaLE 17x in Pasadena earlier this month, Konsulko Group CTO Matt Porter taught a guided hands-on lab on leveraging IIO and Input kernel subsystems. In real time, Matt went line-by-line through the code, and the students were able to write a new driver and take the results with them on an embedded target board.
In this intimate and interactive setting, apprentice-level engineers could get personal attention if they were stuck or had any question, no matter how basic.
Matt’s session was part of the E-ALE (Embedded Apprentice Linux Engineer) project. At major embedded Linux events, E-ALE provides several days of hands-on tutorials driven by volunteer professional speakers who present apprentice-level material in a way that beginners can understand and use.
We hope to see you during the next set of E-ALE tutorials at the Embedded Linux Conference in San Diego this August.
As always, Konsulko Group can also offer hands-on embedded Linux training at your location for your engineers. Please contact us to discuss your requirements for custom, on-site training.
Once again this year at SCaLE, the Southern California Linux Expo, the E-ALE (Embedded Apprentice Linux Engineer) project will give a tutorial series driven by volunteer professional speakers who present apprentice-level material in a way that beginners can understand and use the information. Most tutorials also provide hands-on training, usually with embedded hardware designed and built by E-ALE volunteers. This is the only associated cost, other than conference attendance fees.
On Saturday, March 9, Konsulko Group CTO Matt Porter will provide an Introduction to IIO and Input Drivers, a guided hands-on lab where the students write a new driver that leverages the IIO and Input kernel subsystems.
https://www.konsulko.com/wp-content/uploads/2019/02/scale17x.png19921992Konsulko Grouphttps://www.konsulko.com/wp-content/uploads/2021/03/KonsulkoGroup-fullcolorlogo-340x156-1.pngKonsulko Group2019-02-18 07:50:492023-05-01 11:56:44Konsulko Group to give embedded Linux training at SCaLE 17x
This week, Konsulko Group is coming to Dresden, Germany to the Automotive Grade Linux All Member Meeting. Matt Ranostay will present State of Connectivity in AGL, an overview and roadmap of bindings and binding APIs in the current and upcoming release of AGL. Scott Murray will speak on the developer panel.
Next week, Konsulko engineers will travel to Edinburgh, UK to give four technical sessions at co-located Linux Foundation events.
* At the OpenIoT Summit, Leon Anavi will speak about Open Source MQTT Brokers, a lightweight publish/subscribe machine-to-machine protocol with a reliable bi-directional communication in (near) real-time, and at Embedded Linux Conference Europe,Comparison of Voice Assistant SDKs for Embedded Linux Devices, including Google Assistant and Amazon Alexa as well as an open source alternative, Mycroft.
* At ELC Europe, Scott Murray will explore Building Container Images with OpenEmbedded and the Yocto Project, discussing container size, reproducibility, security vulnerability fixing, and license compliance.
* As part of special Embedded & IoT Apprentice Engineer Tracks (additional track registration required), Konsulko Group CTO Matt Porter will present Introduction to IIO and Input Drivers.
We hope to see you in Dresden or Edinburgh, or both.
https://www.konsulko.com/wp-content/uploads/2018/10/See-you-at-AGL-AMM-and-ELCE-300PXL-1.png296300Konsulko Grouphttps://www.konsulko.com/wp-content/uploads/2021/03/KonsulkoGroup-fullcolorlogo-340x156-1.pngKonsulko Group2018-10-15 08:00:002023-05-01 11:58:36See you at the AGL AMM (and at ELC Europe the week after)
Konsulko Group extends local support for Nordic customers Announces Konsulko AB, a new branch in Malmö, Sweden
MALMÖ, Sweden. – Oct. 1, 2018 – Konsulko Group, an experienced leader in community and commercial Linux development, today announced the formation of Konsulko AB, based in Malmö.
“As the demand for Konsulko’s services and solutions continues to grow, the new branch in Malmö will allow us to better serve local customers in Sweden and throughout Northern Europe,” said Vitaly Wool, managing director of Konsulko AB.
“We welcome the opening of Konsulko AB, and the valuable addition of Vitaly to the team,” said Matt Porter, Konsulko Group CTO. “We also look forward to working with the brilliant Linux engineers in the Nordic region on a wide range of commercial and open source community projects.”
About Konsulko Group
As an independent trusted advisor providing engineering and training services, Konsulko Group develops complete product solutions based on best-of-breed open source projects. The Konsulko team of embedded Linux and RTOS experts has delivered numerous embedded Linux-based products in telecom, automotive, networking, industrial automation, medical devices, audio/video, and consumer electronics since the 1990s. Today, Konsulko leverages community and product experience to deliver the best value for customers seeking to leverage open source software in their products.
For more information, please visit www.konsulko.com.
https://www.konsulko.com/wp-content/uploads/2018/09/Konsulko-Sweden-graphic.png282300Konsulko Grouphttps://www.konsulko.com/wp-content/uploads/2021/03/KonsulkoGroup-fullcolorlogo-340x156-1.pngKonsulko Group2018-10-01 06:14:522020-09-13 15:36:24Local support for Nordic customers, announcing Konsulko AB
Konsulko Group announces new comprehensive workshop, AGL Deep Dive Takes participants step-by-step through the technical details of Automotive Grade Linux
SAN JOSE, Calif. – Sept. 21, 2018 – Konsulko Group, an experienced leader in community and commercial Linux development, today announced AGL Deep Dive, a live instructor-led workshop providing comprehensive, technical details of Automotive Grade Linux, its processes and methodology, release cycles and architecture.
A collaborative open source project for the connected car, Automotive Grade Linux (AGL) is developing an open platform from the ground up for rapid development of new features and technologies. AGL Deep Dive takes participants step-by-step through building and deploying AGL, developing bindings and applications, adding new boards or platforms, packaging and distributing new or reworked code.
“Konsulko instructors are both patient teachers and hands-on pioneers in embedded Linux development,” said Matt Porter, Konsulko Group CTO. “Unlike trainer generalists, we are working engineers, using community and commercial Linux software in development every day. The result is a great classroom experience for students of any skill level.”
In addition to the AGL Deep Dive workshop, Konsulko Group teaches embedded Linux courses as a Linux Foundation Authorized Training Partner (ATP). Konsulko also has created custom technical training tailored especially for specific development project needs.
A PDF fact sheet with a syllabus overview and more information about AGL Deep Dive and Konsulko Group training is available here.
About Konsulko Group
Konsulko Group works with customers to develop and maintain open source-based solutions for products. As an independent trusted advisor providing engineering and training services, Konsulko develops complete product solutions based on best-of-breed open source projects. The Konsulko team of embedded Linux and RTOS experts has delivered numerous embedded Linux-based products in telecom, automotive, networking, industrial automation, medical devices, audio/video, and consumer electronics since the 1990s. Today, Konsulko leverages community and product experience to deliver the best value for our customers seeking to leverage open source software in their products.
https://www.konsulko.com/wp-content/uploads/2018/09/AGL-DEEP-DIVE-GRAPHIC.png300300Konsulko Grouphttps://www.konsulko.com/wp-content/uploads/2021/03/KonsulkoGroup-fullcolorlogo-340x156-1.pngKonsulko Group2018-09-21 06:05:402020-09-13 15:47:19New comprehensive workshop: AGL Deep Dive
Embedded Linux Conference (ELC) is the premier vendor-neutral technical conference for companies and developers using Linux in embedded products. For the past 13 years, ELC has had the largest collection of sessions dedicated exclusively to embedded Linux and embedded Linux developers.
Co-located with both the Open Source Summit Europe, the leading conference for developers, architects, the open source community and industry leaders to collaborate and share information, and OpenIoT Summit, the only Internet of Things (IoT) event focused on the development of open IoT solutions, ELC Europe will be held in Edinburgh, UK, October 22-24, 2018.
Registration for one of the three co-located conferences allows you to attend the other two as well.
Konsulko engineers will present four technical sessions:
Leon Anavi will give two presentations –
* at the OpenIoT Summit, Open Source MQTT Brokers, a lightweight publish/subscribe machine-to-machine protocol with a reliable bi-directional communication in (near) real-time, and
* at ELC Europe, Comparison of Voice Assistant SDKs for Embedded Linux Devices, including Google Assistant and Amazon Alexa as well as an open source alternative, Mycroft.
As part of special Embedded & IoT Apprentice Engineer Tracks (additional track registration required), Konsulko Group CTO Matt Porter will present Introduction to IIO and Input Drivers.
We hope you are able to attend. We’ll see you in Edinburgh in October.
https://www.konsulko.com/wp-content/uploads/2018/08/ELCE-OIoT-2018-sq.png300300Konsulko Grouphttps://www.konsulko.com/wp-content/uploads/2021/03/KonsulkoGroup-fullcolorlogo-340x156-1.pngKonsulko Group2018-08-22 15:09:562023-05-01 11:59:22Konsulko Group presents four technical sessions in Edinburgh
CEO Pete Popov and CTO Matt Porter talk about the Konsulko Group’s 20-years of experience with Embedded Linux, and introduce the Konsulko team.
Created by multimedia director Alex Vlacos, the video was filmed in October 2017 during the Embedded Linux Conference in Prague, where key Konsulko engineers gathered to give technical papers and demonstrate new technology.
https://www.konsulko.com/wp-content/uploads/2017/11/Konsulko-Story-1.png169300Konsulko Grouphttps://www.konsulko.com/wp-content/uploads/2021/03/KonsulkoGroup-fullcolorlogo-340x156-1.pngKonsulko Group2017-11-09 13:38:222023-05-01 12:04:34New video released of “The Konsulko Story”
Want to talk open source development with some of the top Embedded Linux engineers in Automotive? The Konsulko Group is proud to be a Silver Sponsor of the semi-annual Automotive Grade Linux All Member Meeting to be held in Dresden, Germany, October 18 & 19, 2017. Join us at our Demo Showcase on Wednesday evening, at Matt Porter and Scott Murray’s talk on Thursday, 13:55 to 14:45, and throughout the conference to learn about our work with API bindings and other FOSS technologies that are critical to AGL’s success. If you are an AGL member, you may sign up for the meeting at http://events.linuxfoundation.org/events/agl-member-meeting-fall/attend/register.
We look forward seeing you in Dresden!
https://www.konsulko.com/wp-content/uploads/2017/09/AGL-Dresden-Siler-Sponsor.png500587Konsulko Grouphttps://www.konsulko.com/wp-content/uploads/2021/03/KonsulkoGroup-fullcolorlogo-340x156-1.pngKonsulko Group2017-09-09 09:15:492020-10-02 14:16:14Konsulko Group sponsors AGL All Member Meeting in Dresden
As part of an ADAS project using embedded Nvidia GPUs, we are conducting an investigation into the current state of GPGPU support including development, debug, and performance analysis tools starting with Nvidia GPUs. Since large customer proprietary applications can be diffcult to work with, we needed a simpler test case we could modify and extend. We decided to make an open source test application that has some of the charactersitics of a typical production ADAS application. Since there is a lot of public research into lane detection and warning systems, as well as some bits of free software available to leverage in implementation, we chose to make a simple Lane Departure Warning System (LDWS) application.
Lane Departure Warning System Overview
Overview
LDWS is an OSS application which serves as our test bed for GPGPU tool evaluation. The phase 1 version can be found on the ldws-p1 branch in the LDWS repository. LDWS is a C++ application developed using OpenCV 3 and is under a mix of Apache and MIT licenses. Complete build and use documentation can be found in the project README.
Requirements
The phase 1 requirements are:
Run on Linux desktop system with Nvidia GPU
Be written in C/C++
Leverage both OpenCV and existing FOSS lane detection projects
Accept video input from Xle
Detect lanes in video and highlight the current lane
Detect position in lane and warn if crossing lane marker
Lane detection and warning need only be good enough quality to demonstrate concept
Support two different test videos
Support CPU only and OpenCL offload modes via runtime selection
Display realtime and average frames per second
Design
LDWS is implemented as a C++ application leveraging cmake for build, OpenCV 3 for image processing, tclap for command line arg processing, and libconfig++ for configuration file processing. It is composed of a main video handling loop, a configuration storage class, and a lane detection class.
On initialization a config store is instantiated which reads all configuration variables from combination of command line options and configuration file options. A file or capture device is opened to provide the video feed to the video handler. Each video frame is then processed using a sequence of algorithms to detect a set of lines present. Using the detected lines, the ProcessLanes() method of the LaneDetector class then determines lane boundaries and draws the detected boundaries on the video for output. The video handler computes frames per second values and draws the processed video frame before fetching another frame of input video.
During development it was decided it was better to pull a Phase 2 requirement of CUDA support into Phase 1 so LDWS supports runtime switching (via a command line switch) between CPU-only, OpenCL-offload, and CUDA-offload. LDWS displays the mode as CPU, OpenCL, or CUDA during execution as well as the per-frame FPS value measured. At completion of a video input file, LDWS prints the average FPS maintained during the entire run.
The basic image processing algorithms that LDWS employs are:
Select a region of interest that excludes portions of the video above the convergence point of the lane markers.
Hough transform line detector to find all lines in the image
LDWS leverages the lane detection algorithm implemented in the opencv-lane-vehicle-track project and the lane departure warning algorithm implemented in the Python-based Lane Departure Warning project. The lane detection algorithm performs a simple angular filtering of lines followed by a selection of the best line based on distance of points from midpoint. The lane departure sensing using a simple line crossing methodology. A horizontal meter line is drawn on the display with the current crossing points of the detect lane marker edges tracked by dots on each end of the meter. If the positioning dots move too far either direction on the meter then a threshold event indicates that the vechicle is moving out of the lane.
LDWS provides a command line option to enable display of intermediate video frame data during each step of the image processing sequence. These screenshots show the detected edges and lines, respectively, for one frame of video.
Limitations and Improvements
The simple algorithms employed result in only a good enough quality lane detection system. Use of Canny edge and Hough line detection from a vehicle mounted camera perspective is highly susceptible to shadows from trees and other overhead objects on the road as well as being poor in low-light or night conditions. Note the shadows in the following frame on a sunny day.
Notice how the Canny edge detector finds the horizontal edge of the shadows in the region of interest.
The lane detection algorithm itself assumes the vehicle is always at the midpoint on the image which is not the case when changing lanes so the algorithm with vote up lines during lane changes that are not actually lane markers. The result of all of these factors means that the application suffers from losing track of lane markers in all but ideal conditions. The following is an example of it losing sync periodically.
Functional improvements can be made by employing one or more of the following methodologies:
Some or all of these approaches are generally combined with the existing basic Canny edge and Hough transform algorithms for a production grade system.
Performance
Background
Describe three modes of operation and limits of tools.
Summary
Explain perf stat CPU utilization and in-app FPS figures.
Mode
CPU%
FPS
CPU
87.2
339.3
CUDA
87.2
359.8
OpenCL
195.4
235.0
Analysis
The basis of our performance analysis centers around statistical sampling using the Linux perf tool. We start by examining the CPU mode case in the following perf report fragment. The important aspect to note is the top offender in our application with is the call to cv::HoughLinesProbabilistic. That is by far the biggest consumer of CPU cycles in the application. This is completely expected as our lane detection algorithm heavily relies on detecting all lines in each frame of the video feed. You may notice other curious consumers of CPU time in libQt5Gui and libavcodec-ffmpeg.so. These are all products of the display of each resulting frame to the UI and capture/decode of video frames from our source video feed. Since we are only concerned about the portion of our ADAS algorithms that could be offloaded to a GPU, we discard these areas as out-of-scope for this particular project. In a production system, we would avoid using inefficient OpenCV blending/drawing paths and would utilize hardware assisted decode of video frames.
Another way to visualize our CPU usage is in the following Flamegraph. Note that the widest elements in the graph are the hot spots in CPU utilization. If we again discard the video input and UI areas, it can be seen that the cv:HoughLinesProbabilistic() is the top offender. Just to the left, it can be seen that LaneDetector::ProcessLanes() is a close second. We know from our development of the lane detection algorithm that the ProcessLanes() functionality is not going to be offloaded as it is basic post processing of the lines gathered from the Hough transform.
Another way to look at our application is with a traditional callgraph. By zooming in on our area of concern, we get the results seen in the following diagram. Once again, excluding those paths on the right that are out-of-scope, we can clearly see that cv::HoughLinesProbabilistic is a great place to focus on performance improvements.