{"id":728,"date":"2017-11-14T03:10:57","date_gmt":"2017-11-14T08:10:57","guid":{"rendered":"http:\/\/sunapi386.ca\/wordpress\/?p=728"},"modified":"2017-11-14T03:10:57","modified_gmt":"2017-11-14T08:10:57","slug":"slam","status":"publish","type":"post","link":"https:\/\/sunapi386.ca\/wordpress\/slam\/","title":{"rendered":"SLAM"},"content":{"rendered":"<p>SLAM is <strong>simultaneous localization and mapping<\/strong>; the goal is to build\/update a map while simultaneously keeping track of location within.<\/p>\n<p>In other words, SLAM takes sensory data as input (such as camera, lidar, ultrasound) and outputs a partial map and location within.<\/p>\n<p>A popular open source framework is called ORB SLAM. This is fast, robust, and efficient.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/sunapi386.ca\/wordpress\/wp-content\/uploads\/2017\/11\/maxresdefault.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-732\" src=\"https:\/\/sunapi386.ca\/wordpress\/wp-content\/uploads\/2017\/11\/maxresdefault-1024x576.jpg\" alt=\"\" width=\"625\" height=\"352\" srcset=\"https:\/\/sunapi386.ca\/wordpress\/wp-content\/uploads\/2017\/11\/maxresdefault-1024x576.jpg 1024w, https:\/\/sunapi386.ca\/wordpress\/wp-content\/uploads\/2017\/11\/maxresdefault-300x169.jpg 300w, https:\/\/sunapi386.ca\/wordpress\/wp-content\/uploads\/2017\/11\/maxresdefault-768x432.jpg 768w, https:\/\/sunapi386.ca\/wordpress\/wp-content\/uploads\/2017\/11\/maxresdefault-624x351.jpg 624w, https:\/\/sunapi386.ca\/wordpress\/wp-content\/uploads\/2017\/11\/maxresdefault.jpg 1280w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a>I&#8217;ll summarize my findings here.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/raulmur\/ORB_SLAM2\">https:\/\/github.com\/raulmur\/ORB_SLAM2<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dorian3d\/DBoW2\">https:\/\/github.com\/dorian3d\/DBoW2<\/a><\/li>\n<\/ul>\n<p>There are three papers you can read that describes how it works. You should read them in order, because the ideas build on each other (1-2) and (3) describe improvements made.<\/p>\n<p>1. <a href=\"https:\/\/sunapi386.ca\/wordpress\/wp-content\/uploads\/2017\/11\/GalvezTRO12.pdf\">Bag of Binary Words<\/a><br \/>\n2. <a href=\"https:\/\/sunapi386.ca\/wordpress\/wp-content\/uploads\/2017\/11\/MurMontielTardosTRO15.pdf\">ORB-SLAM paper<\/a><br \/>\n3. <a href=\"https:\/\/sunapi386.ca\/wordpress\/wp-content\/uploads\/2017\/11\/1610.06475.pdf\">ORB-SLAM2 paper<\/a><\/p>\n<p>I&#8217;m not much of an expert in this field, so I&#8217;ll try to explain in layman&#8217;s terms of how I understand it. Here are essence of what you need to know.<\/p>\n<ul>\n<li>Sensory data are a stream, but it can be discretized, such as a video stream.\n<ul>\n<li>Discrete means to represent a real space using a discrete quantities.<\/li>\n<\/ul>\n<\/li>\n<li>Videos are sequences of images.<\/li>\n<li>In an image, there are points that can be easily identified and tracked across images.<\/li>\n<li>These points can be identified by an algorithm called <strong>Bag of Words<\/strong> (read 1).\n<ul>\n<li>A picture is like a paragraph, it can be described by visual words.<\/li>\n<li>Visual words are small images that represent like noses, eyes, mouth.<\/li>\n<li>With enough words, you can guess what objects you&#8217;re looking at, and from what angle.<\/li>\n<li>For example, if you had two eyes and a nose, you would guess a face.<\/li>\n<li>And if the two eyes are much bigger than the nose, you&#8217;re likely looking downward angle to the face.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Bag of Binary Words<\/strong> improve performances of the Bag of Words (BoW) model.<\/li>\n<li>The ORB-SLAM system uses the BoW model to build a database.\n<ul>\n<li>Database stores BoW features that represent an image.\n<ul>\n<li>Meaning the image was converted into BoW features.<\/li>\n<\/ul>\n<\/li>\n<li>These features are used as an index into a location map.<\/li>\n<\/ul>\n<\/li>\n<li>From an image and a location, a <strong>Key Frame<\/strong> can be created.\n<ul>\n<li>Key Frames are an association container, which can represent a <strong>mapping of BoW features into a frame in location space<\/strong>, and vice versa.<\/li>\n<\/ul>\n<\/li>\n<li>Using these BoW features, and sensor calibration data, a <strong>location<\/strong> is triangulated from mathematical calculation.<\/li>\n<li>Many of these Key Frames are linked together.\n<ul>\n<li>You can think of Key Frames being a vertex in a graph, and an edge represent co-visibility.\n<ul>\n<li>That is, the BoW feature is visible from the other Key Frame as well.<\/li>\n<\/ul>\n<\/li>\n<li>This graph is called a <strong>covisibility graph<\/strong>.<\/li>\n<li>Which represents a <strong>map<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<li>Having this graph aids in knowing when to insert a new Key Frame into the database.\n<ul>\n<li>For example, when two Key Frames have less than 75% common BoW features.<\/li>\n<\/ul>\n<\/li>\n<li>When given an image, the database is asked to return a list of plausible locations.\n<ul>\n<li>The image is converted into BoW feature.<\/li>\n<li>This feature is used to search the covisibility graph to find similar Key Frames.<\/li>\n<li>Returns a list of Key Frames with statistical likelihood to represent which Key Frames contains the most matched BoW features.<\/li>\n<li>The covisibility graph reduces search complexity, therefore speeding up search, and also reduces storage needs.<\/li>\n<\/ul>\n<\/li>\n<li>So now a map is being built at the same time it is localized.\n<ul>\n<li><strong>SLAM<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<li>In the future, we can come back with more data to:\n<ul>\n<li>Improve the map.<\/li>\n<li>Ask the database for a localization result.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>That&#8217;s all folks. I&#8217;ll add some pictures later.<\/p>\n<p>Here&#8217;s a video.<\/p>\n<p><iframe loading=\"lazy\" title=\"Visual-Inertial ORB-SLAM in EuRoC MAV Dataset - MH_05_difficult\" width=\"660\" height=\"371\" src=\"https:\/\/www.youtube.com\/embed\/JXRCSovuxbA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SLAM is simultaneous localization and mapping; the goal is to build\/update a map while simultaneously keeping track of location within. In other words, SLAM takes sensory data as input (such as camera, lidar, ultrasound) and outputs a partial map and location within. A popular open source framework is called ORB SLAM. This is fast, robust, &hellip; <a href=\"https:\/\/sunapi386.ca\/wordpress\/slam\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">SLAM<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34],"tags":[],"class_list":["post-728","post","type-post","status-publish","format-standard","hentry","category-thoughts"],"_links":{"self":[{"href":"https:\/\/sunapi386.ca\/wordpress\/wp-json\/wp\/v2\/posts\/728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sunapi386.ca\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sunapi386.ca\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sunapi386.ca\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sunapi386.ca\/wordpress\/wp-json\/wp\/v2\/comments?post=728"}],"version-history":[{"count":1,"href":"https:\/\/sunapi386.ca\/wordpress\/wp-json\/wp\/v2\/posts\/728\/revisions"}],"predecessor-version":[{"id":733,"href":"https:\/\/sunapi386.ca\/wordpress\/wp-json\/wp\/v2\/posts\/728\/revisions\/733"}],"wp:attachment":[{"href":"https:\/\/sunapi386.ca\/wordpress\/wp-json\/wp\/v2\/media?parent=728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sunapi386.ca\/wordpress\/wp-json\/wp\/v2\/categories?post=728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sunapi386.ca\/wordpress\/wp-json\/wp\/v2\/tags?post=728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}