v1
This commit is contained in:
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
*.pro
|
||||||
|
*.pro.user
|
||||||
|
*.pro.user*
|
||||||
|
build*
|
||||||
|
build-*
|
||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
*.a
|
||||||
|
*.so.*
|
||||||
|
thirdparty/libzip-1.1.1
|
||||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "thirdparty/sse2neon"]
|
||||||
|
path = thirdparty/sse2neon
|
||||||
|
url = https://github.com/jratcliff63367/sse2neon.git
|
||||||
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
1
.idea/.name
generated
Normal file
1
.idea/.name
generated
Normal file
@@ -0,0 +1 @@
|
|||||||
|
DSO
|
||||||
2
.idea/dso.iml
generated
Normal file
2
.idea/dso.iml
generated
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
||||||
4
.idea/misc.xml
generated
Normal file
4
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
||||||
|
</project>
|
||||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/dso.iml" filepath="$PROJECT_DIR$/.idea/dso.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
7
.idea/vcs.xml
generated
Normal file
7
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$/thirdparty/sse2neon" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
9
CHANGELOG
Normal file
9
CHANGELOG
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
========= 16.11.2016 ==========
|
||||||
|
* Added Sample output wrapper IOWrapper/OutputWrapper/SampleOutputWrapper.h.
|
||||||
|
* Added extensive comments to IOWrapper/Output3DWrapper.h.
|
||||||
|
* Added support for multiple 3DOutputWrapper simulataneously.
|
||||||
|
* Added options "quiet=1" and "sampleoutput=1".
|
||||||
|
* Did some minor code cleaning.
|
||||||
135
CMakeLists.txt
Normal file
135
CMakeLists.txt
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
SET(PROJECT_NAME DSO)
|
||||||
|
|
||||||
|
PROJECT(${PROJECT_NAME})
|
||||||
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
||||||
|
#set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||||
|
|
||||||
|
|
||||||
|
set(BUILD_TYPE Release)
|
||||||
|
#set(BUILD_TYPE RelWithDebInfo)
|
||||||
|
|
||||||
|
set(EXECUTABLE_OUTPUT_PATH bin)
|
||||||
|
set(LIBRARY_OUTPUT_PATH lib)
|
||||||
|
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
|
||||||
|
|
||||||
|
# required libraries
|
||||||
|
find_package(SuiteParse REQUIRED)
|
||||||
|
find_package(Eigen3 REQUIRED)
|
||||||
|
find_package(Boost COMPONENTS system thread)
|
||||||
|
|
||||||
|
# optional libraries
|
||||||
|
find_package(LibZip QUIET)
|
||||||
|
set(Pangolin_DIR "/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src")
|
||||||
|
#find_package(Pangolin 0.2 QUIET)
|
||||||
|
find_package(Pangolin)
|
||||||
|
set(OpenCV_DIR "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build")
|
||||||
|
find_package(OpenCV)
|
||||||
|
|
||||||
|
# flags
|
||||||
|
add_definitions("-DENABLE_SSE")
|
||||||
|
set(CMAKE_CXX_FLAGS
|
||||||
|
"${SSE_FLAGS} -O3 -g -std=c++0x -march=native"
|
||||||
|
# "${SSE_FLAGS} -O3 -g -std=c++0x -fno-omit-frame-pointer"
|
||||||
|
)
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
||||||
|
endif (MSVC)
|
||||||
|
|
||||||
|
# Sources files
|
||||||
|
set(dso_SOURCE_FILES
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/FullSystem.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/FullSystemOptimize.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/FullSystemOptPoint.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/FullSystemDebugStuff.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/FullSystemMarginalize.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/Residuals.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/CoarseTracker.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/CoarseInitializer.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/ImmaturePoint.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/HessianBlocks.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/FullSystem/PixelSelector2.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/OptimizationBackend/EnergyFunctional.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/OptimizationBackend/AccumulatedTopHessian.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/OptimizationBackend/AccumulatedSCHessian.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/OptimizationBackend/EnergyFunctionalStructs.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/util/settings.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/util/Undistort.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/util/globalCalib.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${PROJECT_SOURCE_DIR}/src
|
||||||
|
${PROJECT_SOURCE_DIR}/thirdparty/Sophus
|
||||||
|
${PROJECT_SOURCE_DIR}/thirdparty/sse2neon
|
||||||
|
${EIGEN3_INCLUDE_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# decide if we have pangolin
|
||||||
|
if (Pangolin_FOUND)
|
||||||
|
message("--- found PANGOLIN, compiling dso_pangolin library.")
|
||||||
|
include_directories( ${Pangolin_INCLUDE_DIRS} )
|
||||||
|
set(dso_pangolin_SOURCE_FILES
|
||||||
|
${PROJECT_SOURCE_DIR}/src/IOWrapper/Pangolin/KeyFrameDisplay.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/IOWrapper/Pangolin/PangolinDSOViewer.cpp)
|
||||||
|
set(HAS_PANGOLIN 1)
|
||||||
|
else ()
|
||||||
|
message("--- could not find PANGOLIN, not compiling dso_pangolin library.")
|
||||||
|
message(" this means there will be no 3D display / GUI available for dso_dataset.")
|
||||||
|
set(dso_pangolin_SOURCE_FILES )
|
||||||
|
set(HAS_PANGOLIN 0)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# decide if we have openCV
|
||||||
|
if (OpenCV_FOUND)
|
||||||
|
message("--- found OpenCV, compiling dso_opencv library.")
|
||||||
|
include_directories( ${OpenCV_INCLUDE_DIRS} )
|
||||||
|
set(dso_opencv_SOURCE_FILES
|
||||||
|
${PROJECT_SOURCE_DIR}/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp)
|
||||||
|
set(HAS_OPENCV 1)
|
||||||
|
else ()
|
||||||
|
message("--- could not find OpenCV, not compiling dso_opencv library.")
|
||||||
|
message(" this means there will be no image display, and image read / load functionality.")
|
||||||
|
set(dso_opencv_SOURCE_FILES
|
||||||
|
${PROJECT_SOURCE_DIR}/src/IOWrapper/ImageDisplay_dummy.cpp
|
||||||
|
${PROJECT_SOURCE_DIR}/src/IOWrapper/ImageRW_dummy.cpp)
|
||||||
|
set(HAS_OPENCV 0)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# decide if we have ziplib.
|
||||||
|
if (LIBZIP_LIBRARY)
|
||||||
|
message("--- found ziplib (${LIBZIP_VERSION}), compiling with zip capability.")
|
||||||
|
add_definitions(-DHAS_ZIPLIB=1)
|
||||||
|
include_directories( ${LIBZIP_INCLUDE_DIR_ZIP} ${LIBZIP_INCLUDE_DIR_ZIPCONF} )
|
||||||
|
else()
|
||||||
|
message("--- not found ziplib (${LIBZIP_LIBRARY}), compiling without zip capability.")
|
||||||
|
set(LIBZIP_LIBRARY "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
# compile main library.
|
||||||
|
include_directories( ${CSPARSE_INCLUDE_DIR} ${CHOLMOD_INCLUDE_DIR})
|
||||||
|
add_library(dso ${dso_SOURCE_FILES} ${dso_opencv_SOURCE_FILES} ${dso_pangolin_SOURCE_FILES})
|
||||||
|
|
||||||
|
#set_property( TARGET dso APPEND_STRING PROPERTY COMPILE_FLAGS -Wall )
|
||||||
|
|
||||||
|
|
||||||
|
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # OSX
|
||||||
|
set(BOOST_THREAD_LIBRARY boost_thread-mt)
|
||||||
|
else()
|
||||||
|
set(BOOST_THREAD_LIBRARY boost_thread)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# build main executable (only if we have both OpenCV and Pangolin)
|
||||||
|
if (OpenCV_FOUND AND Pangolin_FOUND)
|
||||||
|
message("--- compiling dso_dataset.")
|
||||||
|
add_executable(dso_dataset ${PROJECT_SOURCE_DIR}/src/main_dso_pangolin.cpp )
|
||||||
|
target_link_libraries(dso_dataset dso boost_system cxsparse ${BOOST_THREAD_LIBRARY} ${LIBZIP_LIBRARY} ${Pangolin_LIBRARIES} ${OpenCV_LIBS})
|
||||||
|
else()
|
||||||
|
message("--- not building dso_dataset, since either don't have openCV or Pangolin.")
|
||||||
|
endif()
|
||||||
|
|
||||||
674
LICENSE
Normal file
674
LICENSE
Normal file
@@ -0,0 +1,674 @@
|
|||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The GNU General Public License is a free, copyleft license for
|
||||||
|
software and other kinds of works.
|
||||||
|
|
||||||
|
The licenses for most software and other practical works are designed
|
||||||
|
to take away your freedom to share and change the works. By contrast,
|
||||||
|
the GNU General Public License is intended to guarantee your freedom to
|
||||||
|
share and change all versions of a program--to make sure it remains free
|
||||||
|
software for all its users. We, the Free Software Foundation, use the
|
||||||
|
GNU General Public License for most of our software; it applies also to
|
||||||
|
any other work released this way by its authors. You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
them if you wish), that you receive source code or can get it if you
|
||||||
|
want it, that you can change the software or use pieces of it in new
|
||||||
|
free programs, and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to prevent others from denying you
|
||||||
|
these rights or asking you to surrender the rights. Therefore, you have
|
||||||
|
certain responsibilities if you distribute copies of the software, or if
|
||||||
|
you modify it: responsibilities to respect the freedom of others.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must pass on to the recipients the same
|
||||||
|
freedoms that you received. You must make sure that they, too, receive
|
||||||
|
or can get the source code. And you must show them these terms so they
|
||||||
|
know their rights.
|
||||||
|
|
||||||
|
Developers that use the GNU GPL protect your rights with two steps:
|
||||||
|
(1) assert copyright on the software, and (2) offer you this License
|
||||||
|
giving you legal permission to copy, distribute and/or modify it.
|
||||||
|
|
||||||
|
For the developers' and authors' protection, the GPL clearly explains
|
||||||
|
that there is no warranty for this free software. For both users' and
|
||||||
|
authors' sake, the GPL requires that modified versions be marked as
|
||||||
|
changed, so that their problems will not be attributed erroneously to
|
||||||
|
authors of previous versions.
|
||||||
|
|
||||||
|
Some devices are designed to deny users access to install or run
|
||||||
|
modified versions of the software inside them, although the manufacturer
|
||||||
|
can do so. This is fundamentally incompatible with the aim of
|
||||||
|
protecting users' freedom to change the software. The systematic
|
||||||
|
pattern of such abuse occurs in the area of products for individuals to
|
||||||
|
use, which is precisely where it is most unacceptable. Therefore, we
|
||||||
|
have designed this version of the GPL to prohibit the practice for those
|
||||||
|
products. If such problems arise substantially in other domains, we
|
||||||
|
stand ready to extend this provision to those domains in future versions
|
||||||
|
of the GPL, as needed to protect the freedom of users.
|
||||||
|
|
||||||
|
Finally, every program is threatened constantly by software patents.
|
||||||
|
States should not allow patents to restrict development and use of
|
||||||
|
software on general-purpose computers, but in those that do, we wish to
|
||||||
|
avoid the special danger that patents applied to a free program could
|
||||||
|
make it effectively proprietary. To prevent this, the GPL assures that
|
||||||
|
patents cannot be used to render the program non-free.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
0. Definitions.
|
||||||
|
|
||||||
|
"This License" refers to version 3 of the GNU General Public License.
|
||||||
|
|
||||||
|
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||||
|
works, such as semiconductor masks.
|
||||||
|
|
||||||
|
"The Program" refers to any copyrightable work licensed under this
|
||||||
|
License. Each licensee is addressed as "you". "Licensees" and
|
||||||
|
"recipients" may be individuals or organizations.
|
||||||
|
|
||||||
|
To "modify" a work means to copy from or adapt all or part of the work
|
||||||
|
in a fashion requiring copyright permission, other than the making of an
|
||||||
|
exact copy. The resulting work is called a "modified version" of the
|
||||||
|
earlier work or a work "based on" the earlier work.
|
||||||
|
|
||||||
|
A "covered work" means either the unmodified Program or a work based
|
||||||
|
on the Program.
|
||||||
|
|
||||||
|
To "propagate" a work means to do anything with it that, without
|
||||||
|
permission, would make you directly or secondarily liable for
|
||||||
|
infringement under applicable copyright law, except executing it on a
|
||||||
|
computer or modifying a private copy. Propagation includes copying,
|
||||||
|
distribution (with or without modification), making available to the
|
||||||
|
public, and in some countries other activities as well.
|
||||||
|
|
||||||
|
To "convey" a work means any kind of propagation that enables other
|
||||||
|
parties to make or receive copies. Mere interaction with a user through
|
||||||
|
a computer network, with no transfer of a copy, is not conveying.
|
||||||
|
|
||||||
|
An interactive user interface displays "Appropriate Legal Notices"
|
||||||
|
to the extent that it includes a convenient and prominently visible
|
||||||
|
feature that (1) displays an appropriate copyright notice, and (2)
|
||||||
|
tells the user that there is no warranty for the work (except to the
|
||||||
|
extent that warranties are provided), that licensees may convey the
|
||||||
|
work under this License, and how to view a copy of this License. If
|
||||||
|
the interface presents a list of user commands or options, such as a
|
||||||
|
menu, a prominent item in the list meets this criterion.
|
||||||
|
|
||||||
|
1. Source Code.
|
||||||
|
|
||||||
|
The "source code" for a work means the preferred form of the work
|
||||||
|
for making modifications to it. "Object code" means any non-source
|
||||||
|
form of a work.
|
||||||
|
|
||||||
|
A "Standard Interface" means an interface that either is an official
|
||||||
|
standard defined by a recognized standards body, or, in the case of
|
||||||
|
interfaces specified for a particular programming language, one that
|
||||||
|
is widely used among developers working in that language.
|
||||||
|
|
||||||
|
The "System Libraries" of an executable work include anything, other
|
||||||
|
than the work as a whole, that (a) is included in the normal form of
|
||||||
|
packaging a Major Component, but which is not part of that Major
|
||||||
|
Component, and (b) serves only to enable use of the work with that
|
||||||
|
Major Component, or to implement a Standard Interface for which an
|
||||||
|
implementation is available to the public in source code form. A
|
||||||
|
"Major Component", in this context, means a major essential component
|
||||||
|
(kernel, window system, and so on) of the specific operating system
|
||||||
|
(if any) on which the executable work runs, or a compiler used to
|
||||||
|
produce the work, or an object code interpreter used to run it.
|
||||||
|
|
||||||
|
The "Corresponding Source" for a work in object code form means all
|
||||||
|
the source code needed to generate, install, and (for an executable
|
||||||
|
work) run the object code and to modify the work, including scripts to
|
||||||
|
control those activities. However, it does not include the work's
|
||||||
|
System Libraries, or general-purpose tools or generally available free
|
||||||
|
programs which are used unmodified in performing those activities but
|
||||||
|
which are not part of the work. For example, Corresponding Source
|
||||||
|
includes interface definition files associated with source files for
|
||||||
|
the work, and the source code for shared libraries and dynamically
|
||||||
|
linked subprograms that the work is specifically designed to require,
|
||||||
|
such as by intimate data communication or control flow between those
|
||||||
|
subprograms and other parts of the work.
|
||||||
|
|
||||||
|
The Corresponding Source need not include anything that users
|
||||||
|
can regenerate automatically from other parts of the Corresponding
|
||||||
|
Source.
|
||||||
|
|
||||||
|
The Corresponding Source for a work in source code form is that
|
||||||
|
same work.
|
||||||
|
|
||||||
|
2. Basic Permissions.
|
||||||
|
|
||||||
|
All rights granted under this License are granted for the term of
|
||||||
|
copyright on the Program, and are irrevocable provided the stated
|
||||||
|
conditions are met. This License explicitly affirms your unlimited
|
||||||
|
permission to run the unmodified Program. The output from running a
|
||||||
|
covered work is covered by this License only if the output, given its
|
||||||
|
content, constitutes a covered work. This License acknowledges your
|
||||||
|
rights of fair use or other equivalent, as provided by copyright law.
|
||||||
|
|
||||||
|
You may make, run and propagate covered works that you do not
|
||||||
|
convey, without conditions so long as your license otherwise remains
|
||||||
|
in force. You may convey covered works to others for the sole purpose
|
||||||
|
of having them make modifications exclusively for you, or provide you
|
||||||
|
with facilities for running those works, provided that you comply with
|
||||||
|
the terms of this License in conveying all material for which you do
|
||||||
|
not control copyright. Those thus making or running the covered works
|
||||||
|
for you must do so exclusively on your behalf, under your direction
|
||||||
|
and control, on terms that prohibit them from making any copies of
|
||||||
|
your copyrighted material outside their relationship with you.
|
||||||
|
|
||||||
|
Conveying under any other circumstances is permitted solely under
|
||||||
|
the conditions stated below. Sublicensing is not allowed; section 10
|
||||||
|
makes it unnecessary.
|
||||||
|
|
||||||
|
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||||
|
|
||||||
|
No covered work shall be deemed part of an effective technological
|
||||||
|
measure under any applicable law fulfilling obligations under article
|
||||||
|
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||||
|
similar laws prohibiting or restricting circumvention of such
|
||||||
|
measures.
|
||||||
|
|
||||||
|
When you convey a covered work, you waive any legal power to forbid
|
||||||
|
circumvention of technological measures to the extent such circumvention
|
||||||
|
is effected by exercising rights under this License with respect to
|
||||||
|
the covered work, and you disclaim any intention to limit operation or
|
||||||
|
modification of the work as a means of enforcing, against the work's
|
||||||
|
users, your or third parties' legal rights to forbid circumvention of
|
||||||
|
technological measures.
|
||||||
|
|
||||||
|
4. Conveying Verbatim Copies.
|
||||||
|
|
||||||
|
You may convey verbatim copies of the Program's source code as you
|
||||||
|
receive it, in any medium, provided that you conspicuously and
|
||||||
|
appropriately publish on each copy an appropriate copyright notice;
|
||||||
|
keep intact all notices stating that this License and any
|
||||||
|
non-permissive terms added in accord with section 7 apply to the code;
|
||||||
|
keep intact all notices of the absence of any warranty; and give all
|
||||||
|
recipients a copy of this License along with the Program.
|
||||||
|
|
||||||
|
You may charge any price or no price for each copy that you convey,
|
||||||
|
and you may offer support or warranty protection for a fee.
|
||||||
|
|
||||||
|
5. Conveying Modified Source Versions.
|
||||||
|
|
||||||
|
You may convey a work based on the Program, or the modifications to
|
||||||
|
produce it from the Program, in the form of source code under the
|
||||||
|
terms of section 4, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The work must carry prominent notices stating that you modified
|
||||||
|
it, and giving a relevant date.
|
||||||
|
|
||||||
|
b) The work must carry prominent notices stating that it is
|
||||||
|
released under this License and any conditions added under section
|
||||||
|
7. This requirement modifies the requirement in section 4 to
|
||||||
|
"keep intact all notices".
|
||||||
|
|
||||||
|
c) You must license the entire work, as a whole, under this
|
||||||
|
License to anyone who comes into possession of a copy. This
|
||||||
|
License will therefore apply, along with any applicable section 7
|
||||||
|
additional terms, to the whole of the work, and all its parts,
|
||||||
|
regardless of how they are packaged. This License gives no
|
||||||
|
permission to license the work in any other way, but it does not
|
||||||
|
invalidate such permission if you have separately received it.
|
||||||
|
|
||||||
|
d) If the work has interactive user interfaces, each must display
|
||||||
|
Appropriate Legal Notices; however, if the Program has interactive
|
||||||
|
interfaces that do not display Appropriate Legal Notices, your
|
||||||
|
work need not make them do so.
|
||||||
|
|
||||||
|
A compilation of a covered work with other separate and independent
|
||||||
|
works, which are not by their nature extensions of the covered work,
|
||||||
|
and which are not combined with it such as to form a larger program,
|
||||||
|
in or on a volume of a storage or distribution medium, is called an
|
||||||
|
"aggregate" if the compilation and its resulting copyright are not
|
||||||
|
used to limit the access or legal rights of the compilation's users
|
||||||
|
beyond what the individual works permit. Inclusion of a covered work
|
||||||
|
in an aggregate does not cause this License to apply to the other
|
||||||
|
parts of the aggregate.
|
||||||
|
|
||||||
|
6. Conveying Non-Source Forms.
|
||||||
|
|
||||||
|
You may convey a covered work in object code form under the terms
|
||||||
|
of sections 4 and 5, provided that you also convey the
|
||||||
|
machine-readable Corresponding Source under the terms of this License,
|
||||||
|
in one of these ways:
|
||||||
|
|
||||||
|
a) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by the
|
||||||
|
Corresponding Source fixed on a durable physical medium
|
||||||
|
customarily used for software interchange.
|
||||||
|
|
||||||
|
b) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by a
|
||||||
|
written offer, valid for at least three years and valid for as
|
||||||
|
long as you offer spare parts or customer support for that product
|
||||||
|
model, to give anyone who possesses the object code either (1) a
|
||||||
|
copy of the Corresponding Source for all the software in the
|
||||||
|
product that is covered by this License, on a durable physical
|
||||||
|
medium customarily used for software interchange, for a price no
|
||||||
|
more than your reasonable cost of physically performing this
|
||||||
|
conveying of source, or (2) access to copy the
|
||||||
|
Corresponding Source from a network server at no charge.
|
||||||
|
|
||||||
|
c) Convey individual copies of the object code with a copy of the
|
||||||
|
written offer to provide the Corresponding Source. This
|
||||||
|
alternative is allowed only occasionally and noncommercially, and
|
||||||
|
only if you received the object code with such an offer, in accord
|
||||||
|
with subsection 6b.
|
||||||
|
|
||||||
|
d) Convey the object code by offering access from a designated
|
||||||
|
place (gratis or for a charge), and offer equivalent access to the
|
||||||
|
Corresponding Source in the same way through the same place at no
|
||||||
|
further charge. You need not require recipients to copy the
|
||||||
|
Corresponding Source along with the object code. If the place to
|
||||||
|
copy the object code is a network server, the Corresponding Source
|
||||||
|
may be on a different server (operated by you or a third party)
|
||||||
|
that supports equivalent copying facilities, provided you maintain
|
||||||
|
clear directions next to the object code saying where to find the
|
||||||
|
Corresponding Source. Regardless of what server hosts the
|
||||||
|
Corresponding Source, you remain obligated to ensure that it is
|
||||||
|
available for as long as needed to satisfy these requirements.
|
||||||
|
|
||||||
|
e) Convey the object code using peer-to-peer transmission, provided
|
||||||
|
you inform other peers where the object code and Corresponding
|
||||||
|
Source of the work are being offered to the general public at no
|
||||||
|
charge under subsection 6d.
|
||||||
|
|
||||||
|
A separable portion of the object code, whose source code is excluded
|
||||||
|
from the Corresponding Source as a System Library, need not be
|
||||||
|
included in conveying the object code work.
|
||||||
|
|
||||||
|
A "User Product" is either (1) a "consumer product", which means any
|
||||||
|
tangible personal property which is normally used for personal, family,
|
||||||
|
or household purposes, or (2) anything designed or sold for incorporation
|
||||||
|
into a dwelling. In determining whether a product is a consumer product,
|
||||||
|
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||||
|
product received by a particular user, "normally used" refers to a
|
||||||
|
typical or common use of that class of product, regardless of the status
|
||||||
|
of the particular user or of the way in which the particular user
|
||||||
|
actually uses, or expects or is expected to use, the product. A product
|
||||||
|
is a consumer product regardless of whether the product has substantial
|
||||||
|
commercial, industrial or non-consumer uses, unless such uses represent
|
||||||
|
the only significant mode of use of the product.
|
||||||
|
|
||||||
|
"Installation Information" for a User Product means any methods,
|
||||||
|
procedures, authorization keys, or other information required to install
|
||||||
|
and execute modified versions of a covered work in that User Product from
|
||||||
|
a modified version of its Corresponding Source. The information must
|
||||||
|
suffice to ensure that the continued functioning of the modified object
|
||||||
|
code is in no case prevented or interfered with solely because
|
||||||
|
modification has been made.
|
||||||
|
|
||||||
|
If you convey an object code work under this section in, or with, or
|
||||||
|
specifically for use in, a User Product, and the conveying occurs as
|
||||||
|
part of a transaction in which the right of possession and use of the
|
||||||
|
User Product is transferred to the recipient in perpetuity or for a
|
||||||
|
fixed term (regardless of how the transaction is characterized), the
|
||||||
|
Corresponding Source conveyed under this section must be accompanied
|
||||||
|
by the Installation Information. But this requirement does not apply
|
||||||
|
if neither you nor any third party retains the ability to install
|
||||||
|
modified object code on the User Product (for example, the work has
|
||||||
|
been installed in ROM).
|
||||||
|
|
||||||
|
The requirement to provide Installation Information does not include a
|
||||||
|
requirement to continue to provide support service, warranty, or updates
|
||||||
|
for a work that has been modified or installed by the recipient, or for
|
||||||
|
the User Product in which it has been modified or installed. Access to a
|
||||||
|
network may be denied when the modification itself materially and
|
||||||
|
adversely affects the operation of the network or violates the rules and
|
||||||
|
protocols for communication across the network.
|
||||||
|
|
||||||
|
Corresponding Source conveyed, and Installation Information provided,
|
||||||
|
in accord with this section must be in a format that is publicly
|
||||||
|
documented (and with an implementation available to the public in
|
||||||
|
source code form), and must require no special password or key for
|
||||||
|
unpacking, reading or copying.
|
||||||
|
|
||||||
|
7. Additional Terms.
|
||||||
|
|
||||||
|
"Additional permissions" are terms that supplement the terms of this
|
||||||
|
License by making exceptions from one or more of its conditions.
|
||||||
|
Additional permissions that are applicable to the entire Program shall
|
||||||
|
be treated as though they were included in this License, to the extent
|
||||||
|
that they are valid under applicable law. If additional permissions
|
||||||
|
apply only to part of the Program, that part may be used separately
|
||||||
|
under those permissions, but the entire Program remains governed by
|
||||||
|
this License without regard to the additional permissions.
|
||||||
|
|
||||||
|
When you convey a copy of a covered work, you may at your option
|
||||||
|
remove any additional permissions from that copy, or from any part of
|
||||||
|
it. (Additional permissions may be written to require their own
|
||||||
|
removal in certain cases when you modify the work.) You may place
|
||||||
|
additional permissions on material, added by you to a covered work,
|
||||||
|
for which you have or can give appropriate copyright permission.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, for material you
|
||||||
|
add to a covered work, you may (if authorized by the copyright holders of
|
||||||
|
that material) supplement the terms of this License with terms:
|
||||||
|
|
||||||
|
a) Disclaiming warranty or limiting liability differently from the
|
||||||
|
terms of sections 15 and 16 of this License; or
|
||||||
|
|
||||||
|
b) Requiring preservation of specified reasonable legal notices or
|
||||||
|
author attributions in that material or in the Appropriate Legal
|
||||||
|
Notices displayed by works containing it; or
|
||||||
|
|
||||||
|
c) Prohibiting misrepresentation of the origin of that material, or
|
||||||
|
requiring that modified versions of such material be marked in
|
||||||
|
reasonable ways as different from the original version; or
|
||||||
|
|
||||||
|
d) Limiting the use for publicity purposes of names of licensors or
|
||||||
|
authors of the material; or
|
||||||
|
|
||||||
|
e) Declining to grant rights under trademark law for use of some
|
||||||
|
trade names, trademarks, or service marks; or
|
||||||
|
|
||||||
|
f) Requiring indemnification of licensors and authors of that
|
||||||
|
material by anyone who conveys the material (or modified versions of
|
||||||
|
it) with contractual assumptions of liability to the recipient, for
|
||||||
|
any liability that these contractual assumptions directly impose on
|
||||||
|
those licensors and authors.
|
||||||
|
|
||||||
|
All other non-permissive additional terms are considered "further
|
||||||
|
restrictions" within the meaning of section 10. If the Program as you
|
||||||
|
received it, or any part of it, contains a notice stating that it is
|
||||||
|
governed by this License along with a term that is a further
|
||||||
|
restriction, you may remove that term. If a license document contains
|
||||||
|
a further restriction but permits relicensing or conveying under this
|
||||||
|
License, you may add to a covered work material governed by the terms
|
||||||
|
of that license document, provided that the further restriction does
|
||||||
|
not survive such relicensing or conveying.
|
||||||
|
|
||||||
|
If you add terms to a covered work in accord with this section, you
|
||||||
|
must place, in the relevant source files, a statement of the
|
||||||
|
additional terms that apply to those files, or a notice indicating
|
||||||
|
where to find the applicable terms.
|
||||||
|
|
||||||
|
Additional terms, permissive or non-permissive, may be stated in the
|
||||||
|
form of a separately written license, or stated as exceptions;
|
||||||
|
the above requirements apply either way.
|
||||||
|
|
||||||
|
8. Termination.
|
||||||
|
|
||||||
|
You may not propagate or modify a covered work except as expressly
|
||||||
|
provided under this License. Any attempt otherwise to propagate or
|
||||||
|
modify it is void, and will automatically terminate your rights under
|
||||||
|
this License (including any patent licenses granted under the third
|
||||||
|
paragraph of section 11).
|
||||||
|
|
||||||
|
However, if you cease all violation of this License, then your
|
||||||
|
license from a particular copyright holder is reinstated (a)
|
||||||
|
provisionally, unless and until the copyright holder explicitly and
|
||||||
|
finally terminates your license, and (b) permanently, if the copyright
|
||||||
|
holder fails to notify you of the violation by some reasonable means
|
||||||
|
prior to 60 days after the cessation.
|
||||||
|
|
||||||
|
Moreover, your license from a particular copyright holder is
|
||||||
|
reinstated permanently if the copyright holder notifies you of the
|
||||||
|
violation by some reasonable means, this is the first time you have
|
||||||
|
received notice of violation of this License (for any work) from that
|
||||||
|
copyright holder, and you cure the violation prior to 30 days after
|
||||||
|
your receipt of the notice.
|
||||||
|
|
||||||
|
Termination of your rights under this section does not terminate the
|
||||||
|
licenses of parties who have received copies or rights from you under
|
||||||
|
this License. If your rights have been terminated and not permanently
|
||||||
|
reinstated, you do not qualify to receive new licenses for the same
|
||||||
|
material under section 10.
|
||||||
|
|
||||||
|
9. Acceptance Not Required for Having Copies.
|
||||||
|
|
||||||
|
You are not required to accept this License in order to receive or
|
||||||
|
run a copy of the Program. Ancillary propagation of a covered work
|
||||||
|
occurring solely as a consequence of using peer-to-peer transmission
|
||||||
|
to receive a copy likewise does not require acceptance. However,
|
||||||
|
nothing other than this License grants you permission to propagate or
|
||||||
|
modify any covered work. These actions infringe copyright if you do
|
||||||
|
not accept this License. Therefore, by modifying or propagating a
|
||||||
|
covered work, you indicate your acceptance of this License to do so.
|
||||||
|
|
||||||
|
10. Automatic Licensing of Downstream Recipients.
|
||||||
|
|
||||||
|
Each time you convey a covered work, the recipient automatically
|
||||||
|
receives a license from the original licensors, to run, modify and
|
||||||
|
propagate that work, subject to this License. You are not responsible
|
||||||
|
for enforcing compliance by third parties with this License.
|
||||||
|
|
||||||
|
An "entity transaction" is a transaction transferring control of an
|
||||||
|
organization, or substantially all assets of one, or subdividing an
|
||||||
|
organization, or merging organizations. If propagation of a covered
|
||||||
|
work results from an entity transaction, each party to that
|
||||||
|
transaction who receives a copy of the work also receives whatever
|
||||||
|
licenses to the work the party's predecessor in interest had or could
|
||||||
|
give under the previous paragraph, plus a right to possession of the
|
||||||
|
Corresponding Source of the work from the predecessor in interest, if
|
||||||
|
the predecessor has it or can get it with reasonable efforts.
|
||||||
|
|
||||||
|
You may not impose any further restrictions on the exercise of the
|
||||||
|
rights granted or affirmed under this License. For example, you may
|
||||||
|
not impose a license fee, royalty, or other charge for exercise of
|
||||||
|
rights granted under this License, and you may not initiate litigation
|
||||||
|
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||||
|
any patent claim is infringed by making, using, selling, offering for
|
||||||
|
sale, or importing the Program or any portion of it.
|
||||||
|
|
||||||
|
11. Patents.
|
||||||
|
|
||||||
|
A "contributor" is a copyright holder who authorizes use under this
|
||||||
|
License of the Program or a work on which the Program is based. The
|
||||||
|
work thus licensed is called the contributor's "contributor version".
|
||||||
|
|
||||||
|
A contributor's "essential patent claims" are all patent claims
|
||||||
|
owned or controlled by the contributor, whether already acquired or
|
||||||
|
hereafter acquired, that would be infringed by some manner, permitted
|
||||||
|
by this License, of making, using, or selling its contributor version,
|
||||||
|
but do not include claims that would be infringed only as a
|
||||||
|
consequence of further modification of the contributor version. For
|
||||||
|
purposes of this definition, "control" includes the right to grant
|
||||||
|
patent sublicenses in a manner consistent with the requirements of
|
||||||
|
this License.
|
||||||
|
|
||||||
|
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||||
|
patent license under the contributor's essential patent claims, to
|
||||||
|
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||||
|
propagate the contents of its contributor version.
|
||||||
|
|
||||||
|
In the following three paragraphs, a "patent license" is any express
|
||||||
|
agreement or commitment, however denominated, not to enforce a patent
|
||||||
|
(such as an express permission to practice a patent or covenant not to
|
||||||
|
sue for patent infringement). To "grant" such a patent license to a
|
||||||
|
party means to make such an agreement or commitment not to enforce a
|
||||||
|
patent against the party.
|
||||||
|
|
||||||
|
If you convey a covered work, knowingly relying on a patent license,
|
||||||
|
and the Corresponding Source of the work is not available for anyone
|
||||||
|
to copy, free of charge and under the terms of this License, through a
|
||||||
|
publicly available network server or other readily accessible means,
|
||||||
|
then you must either (1) cause the Corresponding Source to be so
|
||||||
|
available, or (2) arrange to deprive yourself of the benefit of the
|
||||||
|
patent license for this particular work, or (3) arrange, in a manner
|
||||||
|
consistent with the requirements of this License, to extend the patent
|
||||||
|
license to downstream recipients. "Knowingly relying" means you have
|
||||||
|
actual knowledge that, but for the patent license, your conveying the
|
||||||
|
covered work in a country, or your recipient's use of the covered work
|
||||||
|
in a country, would infringe one or more identifiable patents in that
|
||||||
|
country that you have reason to believe are valid.
|
||||||
|
|
||||||
|
If, pursuant to or in connection with a single transaction or
|
||||||
|
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||||
|
covered work, and grant a patent license to some of the parties
|
||||||
|
receiving the covered work authorizing them to use, propagate, modify
|
||||||
|
or convey a specific copy of the covered work, then the patent license
|
||||||
|
you grant is automatically extended to all recipients of the covered
|
||||||
|
work and works based on it.
|
||||||
|
|
||||||
|
A patent license is "discriminatory" if it does not include within
|
||||||
|
the scope of its coverage, prohibits the exercise of, or is
|
||||||
|
conditioned on the non-exercise of one or more of the rights that are
|
||||||
|
specifically granted under this License. You may not convey a covered
|
||||||
|
work if you are a party to an arrangement with a third party that is
|
||||||
|
in the business of distributing software, under which you make payment
|
||||||
|
to the third party based on the extent of your activity of conveying
|
||||||
|
the work, and under which the third party grants, to any of the
|
||||||
|
parties who would receive the covered work from you, a discriminatory
|
||||||
|
patent license (a) in connection with copies of the covered work
|
||||||
|
conveyed by you (or copies made from those copies), or (b) primarily
|
||||||
|
for and in connection with specific products or compilations that
|
||||||
|
contain the covered work, unless you entered into that arrangement,
|
||||||
|
or that patent license was granted, prior to 28 March 2007.
|
||||||
|
|
||||||
|
Nothing in this License shall be construed as excluding or limiting
|
||||||
|
any implied license or other defenses to infringement that may
|
||||||
|
otherwise be available to you under applicable patent law.
|
||||||
|
|
||||||
|
12. No Surrender of Others' Freedom.
|
||||||
|
|
||||||
|
If conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot convey a
|
||||||
|
covered work so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you may
|
||||||
|
not convey it at all. For example, if you agree to terms that obligate you
|
||||||
|
to collect a royalty for further conveying from those to whom you convey
|
||||||
|
the Program, the only way you could satisfy both those terms and this
|
||||||
|
License would be to refrain entirely from conveying the Program.
|
||||||
|
|
||||||
|
13. Use with the GNU Affero General Public License.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, you have
|
||||||
|
permission to link or combine any covered work with a work licensed
|
||||||
|
under version 3 of the GNU Affero General Public License into a single
|
||||||
|
combined work, and to convey the resulting work. The terms of this
|
||||||
|
License will continue to apply to the part which is the covered work,
|
||||||
|
but the special requirements of the GNU Affero General Public License,
|
||||||
|
section 13, concerning interaction through a network will apply to the
|
||||||
|
combination as such.
|
||||||
|
|
||||||
|
14. Revised Versions of this License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions of
|
||||||
|
the GNU General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Program specifies that a certain numbered version of the GNU General
|
||||||
|
Public License "or any later version" applies to it, you have the
|
||||||
|
option of following the terms and conditions either of that numbered
|
||||||
|
version or of any later version published by the Free Software
|
||||||
|
Foundation. If the Program does not specify a version number of the
|
||||||
|
GNU General Public License, you may choose any version ever published
|
||||||
|
by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Program specifies that a proxy can decide which future
|
||||||
|
versions of the GNU General Public License can be used, that proxy's
|
||||||
|
public statement of acceptance of a version permanently authorizes you
|
||||||
|
to choose that version for the Program.
|
||||||
|
|
||||||
|
Later license versions may give you additional or different
|
||||||
|
permissions. However, no additional obligations are imposed on any
|
||||||
|
author or copyright holder as a result of your choosing to follow a
|
||||||
|
later version.
|
||||||
|
|
||||||
|
15. Disclaimer of Warranty.
|
||||||
|
|
||||||
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||||
|
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||||
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||||
|
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||||
|
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||||
|
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. Limitation of Liability.
|
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||||
|
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||||
|
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||||
|
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||||
|
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||||
|
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGES.
|
||||||
|
|
||||||
|
17. Interpretation of Sections 15 and 16.
|
||||||
|
|
||||||
|
If the disclaimer of warranty and limitation of liability provided
|
||||||
|
above cannot be given local legal effect according to their terms,
|
||||||
|
reviewing courts shall apply local law that most closely approximates
|
||||||
|
an absolute waiver of all civil liability in connection with the
|
||||||
|
Program, unless a warranty or assumption of liability accompanies a
|
||||||
|
copy of the Program in return for a fee.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
state the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
{one line to give the program's name and a brief idea of what it does.}
|
||||||
|
Copyright (C) {year} {name of author}
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program does terminal interaction, make it output a short
|
||||||
|
notice like this when it starts in an interactive mode:
|
||||||
|
|
||||||
|
{project} Copyright (C) {year} {fullname}
|
||||||
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, your program's commands
|
||||||
|
might be different; for a GUI interface, you would use an "about box".
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
|
For more information on this, and how to apply and follow the GNU GPL, see
|
||||||
|
<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
The GNU General Public License does not permit incorporating your program
|
||||||
|
into proprietary programs. If your program is a subroutine library, you
|
||||||
|
may consider it more useful to permit linking proprietary applications with
|
||||||
|
the library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License. But first, please read
|
||||||
|
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||||
281
README.md
Normal file
281
README.md
Normal file
@@ -0,0 +1,281 @@
|
|||||||
|
# DSO: Direct Sparse Odometry
|
||||||
|
|
||||||
|
For more information see
|
||||||
|
[https://vision.in.tum.de/dso](https://vision.in.tum.de/dso)
|
||||||
|
|
||||||
|
### 1. Related Papers
|
||||||
|
* **Direct Sparse Odometry**, *J. Engel, V. Koltun, D. Cremers*, In arXiv:1607.02565, 2016
|
||||||
|
* **A Photometrically Calibrated Benchmark For Monocular Visual Odometry**, *J. Engel, V. Usenko, D. Cremers*, In arXiv:1607.02555, 2016
|
||||||
|
|
||||||
|
Get some datasets from [https://vision.in.tum.de/mono-dataset](https://vision.in.tum.de/mono-dataset) .
|
||||||
|
|
||||||
|
### 2. Installation
|
||||||
|
|
||||||
|
git clone https://github.com/JakobEngel/dso.git
|
||||||
|
|
||||||
|
#### 2.1 Required Dependencies
|
||||||
|
|
||||||
|
##### suitesparse and eigen3 (required).
|
||||||
|
Required. Install with
|
||||||
|
|
||||||
|
sudo apt-get install libsuitesparse-dev libeigen3-dev libboost-all-dev
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 2.2 Optional Dependencies
|
||||||
|
|
||||||
|
##### OpenCV (highly recommended).
|
||||||
|
Used to read / write / display images.
|
||||||
|
OpenCV is **only** used in `IOWrapper/OpenCV/*`. Without OpenCV, respective
|
||||||
|
dummy functions from `IOWrapper/*_dummy.cpp` will be compiled into the library, which do nothing.
|
||||||
|
The main binary will not be created, since it is useless if it can't read the datasets from disk.
|
||||||
|
Feel free to implement your own version of these functions with your prefered library,
|
||||||
|
if you want to stay away from OpenCV.
|
||||||
|
|
||||||
|
Install with
|
||||||
|
|
||||||
|
sudo apt-get install libopencv-dev
|
||||||
|
|
||||||
|
|
||||||
|
##### Pangolin (highly recommended).
|
||||||
|
Used for 3D visualization & the GUI.
|
||||||
|
Pangolin is **only** used in `IOWrapper/Pangolin/*`. You can compile without Pangolin,
|
||||||
|
however then there is not going to be any visualization / GUI capability.
|
||||||
|
Feel free to implement your own version of `Output3DWrapper` with your preferred library,
|
||||||
|
and use it instead of `PangolinDSOViewer`
|
||||||
|
|
||||||
|
Install from [https://github.com/stevenlovegrove/Pangolin](https://github.com/stevenlovegrove/Pangolin)
|
||||||
|
|
||||||
|
|
||||||
|
##### ziplib (recommended).
|
||||||
|
Used to read datasets with images as .zip, as e.g. in the TUM monoVO dataset.
|
||||||
|
You can compile without this, however then you can only read images directly (i.e., have
|
||||||
|
to unzip the dataset image archives before loading them).
|
||||||
|
|
||||||
|
sudo apt-get install zlib1g-dev
|
||||||
|
cd dso/thirdparty
|
||||||
|
tar -zxvf libzip-1.1.1.tar.gz
|
||||||
|
cd libzip-1.1.1/
|
||||||
|
./configure
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
sudo cp lib/zipconf.h /usr/local/include/zipconf.h # (no idea why that is needed).
|
||||||
|
|
||||||
|
##### sse2neon (required for ARM builds).
|
||||||
|
After cloning, just run `git submodule update --init` to include this. It translates Intel-native SSE functions to ARM-native NEON functions during the compilation process.
|
||||||
|
|
||||||
|
#### 2.3 Build
|
||||||
|
|
||||||
|
cd dso
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake ..
|
||||||
|
make -j4
|
||||||
|
|
||||||
|
this will compile a library `libdso.a`, which can be linked from external projects.
|
||||||
|
It will also build a binary `dso_dataset`, to run DSO on datasets. However, for this
|
||||||
|
OpenCV and Pangolin need to be installed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 3 Usage
|
||||||
|
Run on a dataset from [https://vision.in.tum.de/mono-dataset](https://vision.in.tum.de/mono-dataset) using
|
||||||
|
|
||||||
|
bin/dso_dataset \
|
||||||
|
files=XXXXX/sequence_XX/images.zip \
|
||||||
|
calib=XXXXX/sequence_XX/camera.txt \
|
||||||
|
gamma=XXXXX/sequence_XX/pcalib.txt \
|
||||||
|
vignette=XXXXX/sequence_XX/vignette.png \
|
||||||
|
preset=0 \
|
||||||
|
mode=0
|
||||||
|
|
||||||
|
See [https://github.com/JakobEngel/dso_ros](https://github.com/JakobEngel/dso_ros) for a minimal example on
|
||||||
|
how the library can be used from another project. It should be straight forward to implement extentions for
|
||||||
|
other camera drivers, to use DSO interactively without ROS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 3.1 Dataset Format.
|
||||||
|
The format assumed is that of [https://vision.in.tum.de/mono-dataset](https://vision.in.tum.de/mono-dataset).
|
||||||
|
However, it should be easy to adapt it to your needs, if required. The binary is run with:
|
||||||
|
|
||||||
|
- `files=XXX` where XXX is either a folder or .zip archive containing images. They are sorted *alphabetically*. for .zip to work, need to comiple with ziplib support.
|
||||||
|
|
||||||
|
- `gamma=XXX` where XXX is a gamma calibration file, containing a single row with 256 values, mapping [0..255] to the respective irradiance value, i.e. containing the *discretized inverse response function*. See TUM monoVO dataset for an example.
|
||||||
|
|
||||||
|
- `vignette=XXX` where XXX is a monochrome 16bit or 8bit image containing the vignette as pixelwise attenuation factors. See TUM monoVO dataset for an example.
|
||||||
|
|
||||||
|
- `calib=XXX` where XXX is a geometric camera calibration file. See below.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##### Geometric Calibration File.
|
||||||
|
|
||||||
|
|
||||||
|
###### Calibration File for Pre-Rectified Images
|
||||||
|
|
||||||
|
Pinhole fx fy cx cy 0
|
||||||
|
in_width in_height
|
||||||
|
"crop" / "full" / "none" / "fx fy cx cy 0"
|
||||||
|
out_width out_height
|
||||||
|
|
||||||
|
###### Calibration File for FOV camera model:
|
||||||
|
|
||||||
|
FOV fx fy cx cy omega
|
||||||
|
in_width in_height
|
||||||
|
"crop" / "full" / "fx fy cx cy 0"
|
||||||
|
out_width out_height
|
||||||
|
|
||||||
|
|
||||||
|
###### Calibration File for Radio-Tangential camera model
|
||||||
|
|
||||||
|
RadTan fx fy cx cy k1 k2 r1 r2
|
||||||
|
in_width in_height
|
||||||
|
"crop" / "full" / "fx fy cx cy 0"
|
||||||
|
out_width out_height
|
||||||
|
|
||||||
|
|
||||||
|
###### Calibration File for Equidistant camera model
|
||||||
|
|
||||||
|
EquiDistant fx fy cx cy k1 k2 k3 k4
|
||||||
|
in_width in_height
|
||||||
|
"crop" / "full" / "fx fy cx cy 0"
|
||||||
|
out_width out_height
|
||||||
|
|
||||||
|
|
||||||
|
(note: for backwards-compatibility, "Pinhole", "FOV" and "RadTan" can be omitted). See the respective
|
||||||
|
`::distortCoordinates` implementation in `Undistorter.cpp` for the exact corresponding projection function.
|
||||||
|
Furthermore, it should be straight-forward to implement other camera models.
|
||||||
|
|
||||||
|
|
||||||
|
**Explanation:**
|
||||||
|
Across all models `fx fy cx cy` denotes the focal length / principal point **relative to the image width / height**,
|
||||||
|
i.e., DSO computes the camera matrix `K` as
|
||||||
|
|
||||||
|
K(0,0) = width * fx
|
||||||
|
K(1,1) = height * fy
|
||||||
|
K(0,2) = width * cx - 0.5
|
||||||
|
K(1,2) = height * cy - 0.5
|
||||||
|
For backwards-compatibility, if the given `cx` and `cy` are larger than 1, DSO assumes all four parameters to directly be the entries of K,
|
||||||
|
and ommits the above computation.
|
||||||
|
|
||||||
|
|
||||||
|
**That strange "0.5" offset:**
|
||||||
|
Internally, DSO uses the convention that the pixel at integer position (1,1) in the image, i.e. the pixel in the second row and second column,
|
||||||
|
contains the integral over the continuous image function from (0.5,0.5) to (1.5,1.5), i.e., approximates a "point-sample" of the
|
||||||
|
continuous image functions at (1.0, 1.0).
|
||||||
|
In turn, there seems to be no unifying convention across calibration toolboxes whether the pixel at integer position (1,1)
|
||||||
|
contains the integral over (0.5,0.5) to (1.5,1.5), or the integral over (1,1) to (2,2). The above conversion assumes that
|
||||||
|
the given calibration in the calibration file uses the latter convention, and thus applies the -0.5 correction.
|
||||||
|
Note that this also is taken into account when creating the scale-pyramid (see `globalCalib.cpp`).
|
||||||
|
|
||||||
|
|
||||||
|
**Rectification modes:**
|
||||||
|
For image rectification, DSO either supports rectification to a user-defined pinhole model (`fx fy cx cy 0`),
|
||||||
|
or has an option to automatically crop the image to the maximal rectangular, well-defined region (`crop`).
|
||||||
|
`full` will preserve the full original field of view and is mainly meant for debugging - it will create black
|
||||||
|
borders in undefined image regions, which DSO does NOT ignore (i.e., this option will generate additional
|
||||||
|
outliers along those borders, and corrupt the scale-pyramid).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 3.2 Commandline Options
|
||||||
|
there are many command line options available, see `main_dso_pangolin.cpp`. some examples include
|
||||||
|
- `mode=X`:
|
||||||
|
- `mode=0` use iff a photometric calibration exists (e.g. TUM monoVO dataset).
|
||||||
|
- `mode=1` use iff NO photometric calibration exists (e.g. ETH EuRoC MAV dataset).
|
||||||
|
- `mode=2` use iff images are not photometrically distorted (e.g. synthetic datasets).
|
||||||
|
|
||||||
|
- `preset=X`
|
||||||
|
- `preset=0`: default settings (2k pts etc.), not enforcing real-time execution
|
||||||
|
- `preset=1`: default settings (2k pts etc.), enforcing 1x real-time execution
|
||||||
|
- `preset=2`: fast settings (800 pts etc.), not enforcing real-time execution. WARNING: overwrites image resolution with 424 x 320.
|
||||||
|
- `preset=3`: fast settings (800 pts etc.), enforcing 5x real-time execution. WARNING: overwrites image resolution with 424 x 320.
|
||||||
|
|
||||||
|
- `nolog=1`: disable logging of eigenvalues etc. (good for performance)
|
||||||
|
- `reverse=1`: play sequence in reverse
|
||||||
|
- `nogui=1`: disable gui (good for performance)
|
||||||
|
- `nomt=1`: single-threaded execution
|
||||||
|
- `prefetch=1`: load into memory & rectify all images before running DSO.
|
||||||
|
- `start=X`: start at frame X
|
||||||
|
- `end=X`: end at frame X
|
||||||
|
- `speed=X`: force execution at X times real-time speed (0 = not enforcing real-time)
|
||||||
|
- `save=1`: save lots of images for video creation
|
||||||
|
- `quiet=1`: disable most console output (good for performance)
|
||||||
|
- `sampleoutput=1`: register a "SampleOutputWrapper", printing some sample output data to the commandline. meant as example.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 3.3 Runtime Options
|
||||||
|
Some parameters can be reconfigured from the Pangolin GUI at runtime. Feel free to add more.
|
||||||
|
|
||||||
|
|
||||||
|
#### 3.4 Accessing Data.
|
||||||
|
The easiest way to access the Data (poses, pointclouds, etc.) computed by DSO (in real-time)
|
||||||
|
is to create your own `Output3DWrapper`, and add it to the system, i.e., to `FullSystem.outputWrapper`.
|
||||||
|
The respective member functions will be called on various occations (e.g., when a new KF is created,
|
||||||
|
when a new frame is tracked, etc.), exposing the relevant data.
|
||||||
|
|
||||||
|
See `IOWrapper/Output3DWrapper.h` for a description of the different callbacks available,
|
||||||
|
and some basic notes on where to find which data in the used classes.
|
||||||
|
See `IOWrapper/OutputWrapper/SampleOutputWrapper.h` for an example implementation, which just prints
|
||||||
|
some example data to the commandline (use the options `sampleoutput=1 quiet=1` to see the result).
|
||||||
|
|
||||||
|
Note that these callbacks block the respective DSO thread, thus expensive computations should not
|
||||||
|
be performed in the callbacks, a better practice is to just copy over / publish / output the data you need.
|
||||||
|
|
||||||
|
Per default, `dso_dataset` writes all keyframe poses to a file `result.txt` at the end of a sequence,
|
||||||
|
using the TUM RGB-D / TUM monoVO format ([timestamp x y z qx qy qz qw] of the cameraToWorld transformation).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 3.5 Notes
|
||||||
|
- the initializer is very slow, and does not work very reliably. Maybe replace by your own way to get an initialization.
|
||||||
|
- see [https://github.com/JakobEngel/dso_ros](https://github.com/JakobEngel/dso_ros) for a minimal example project on how to use the library with your own input / output procedures.
|
||||||
|
- see `settings.cpp` for a LOT of settings parameters. Most of which you shouldn't touch.
|
||||||
|
- `setGlobalCalib(...)` needs to be called once before anything is initialized, and globally sets the camera intrinsics and video resolution for convenience. probably not the most portable way of doing this though.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 4 General Notes for Good Results
|
||||||
|
|
||||||
|
#### Accurate Geometric Calibration
|
||||||
|
- Please have a look at Chapter 4.3 from the DSO paper, in particular Figure 20 (Geometric Noise). Direct approaches suffer a LOT from bad geometric calibrations: Geometric distortions of 1.5 pixel already reduce the accuracy by factor 10.
|
||||||
|
|
||||||
|
- **Do not use a rolling shutter camera**, the geometric distortions from a rolling shutter camera are huge. Even for high frame-rates (over 60fps).
|
||||||
|
|
||||||
|
- Note that the reprojection RMSE reported by most calibration tools is the reprojection RMSE on the "training data", i.e., overfitted to the the images you used for calibration. If it is low, that does not imply that your calibration is good, you may just have used insufficient images.
|
||||||
|
|
||||||
|
- try different camera / distortion models, not all lenses can be modelled by all models.
|
||||||
|
|
||||||
|
|
||||||
|
#### Photometric Calibration
|
||||||
|
Use a photometric calibration (e.g. using [https://github.com/tum-vision/mono_dataset_code](https://github.com/tum-vision/mono_dataset_code) ).
|
||||||
|
|
||||||
|
#### Translation vs. Rotation
|
||||||
|
DSO cannot do magic: if you rotate the camera too much without translation, it will fail. Since it is a pure visual odometry, it cannot recover by re-localizing, or track through strong rotations by using previously triangulated geometry.... everything that leaves the field of view is marginalized immediately.
|
||||||
|
|
||||||
|
|
||||||
|
#### Computation Speed
|
||||||
|
If your computer is slow, try to use "fast" settings. Or run DSO on a dataset, without enforcing real-time.
|
||||||
|
|
||||||
|
|
||||||
|
#### Initialization
|
||||||
|
The current initializer is not very good... it is very slow and occasionally fails.
|
||||||
|
Make sure, the initial camera motion is slow and "nice" (i.e., a lot of translation and
|
||||||
|
little rotation) during initialization.
|
||||||
|
Possibly replace by your own initializer.
|
||||||
|
|
||||||
|
|
||||||
|
### 5 License
|
||||||
|
DSO was developed at the Technical University of Munich and Intel.
|
||||||
|
The open-source version is licensed under the GNU General Public License
|
||||||
|
Version 3 (GPLv3).
|
||||||
|
For commercial purposes, we also offer a professional version, see
|
||||||
|
[http://vision.in.tum.de/dso](http://vision.in.tum.de/dso) for
|
||||||
|
details.
|
||||||
545
cmake-build-debug/CMakeCache.txt
Normal file
545
cmake-build-debug/CMakeCache.txt
Normal file
File diff suppressed because one or more lines are too long
78
cmake-build-debug/CMakeFiles/3.20.2/CMakeCCompiler.cmake
Normal file
78
cmake-build-debug/CMakeFiles/3.20.2/CMakeCCompiler.cmake
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
set(CMAKE_C_COMPILER "/usr/bin/cc")
|
||||||
|
set(CMAKE_C_COMPILER_ARG1 "")
|
||||||
|
set(CMAKE_C_COMPILER_ID "GNU")
|
||||||
|
set(CMAKE_C_COMPILER_VERSION "9.3.0")
|
||||||
|
set(CMAKE_C_COMPILER_VERSION_INTERNAL "")
|
||||||
|
set(CMAKE_C_COMPILER_WRAPPER "")
|
||||||
|
set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11")
|
||||||
|
set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert")
|
||||||
|
set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes")
|
||||||
|
set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros")
|
||||||
|
set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert")
|
||||||
|
|
||||||
|
set(CMAKE_C_PLATFORM_ID "Linux")
|
||||||
|
set(CMAKE_C_SIMULATE_ID "")
|
||||||
|
set(CMAKE_C_COMPILER_FRONTEND_VARIANT "")
|
||||||
|
set(CMAKE_C_SIMULATE_VERSION "")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set(CMAKE_AR "/usr/bin/ar")
|
||||||
|
set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-9")
|
||||||
|
set(CMAKE_RANLIB "/usr/bin/ranlib")
|
||||||
|
set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-9")
|
||||||
|
set(CMAKE_LINKER "/usr/bin/ld")
|
||||||
|
set(CMAKE_MT "")
|
||||||
|
set(CMAKE_COMPILER_IS_GNUCC 1)
|
||||||
|
set(CMAKE_C_COMPILER_LOADED 1)
|
||||||
|
set(CMAKE_C_COMPILER_WORKS TRUE)
|
||||||
|
set(CMAKE_C_ABI_COMPILED TRUE)
|
||||||
|
set(CMAKE_COMPILER_IS_MINGW )
|
||||||
|
set(CMAKE_COMPILER_IS_CYGWIN )
|
||||||
|
if(CMAKE_COMPILER_IS_CYGWIN)
|
||||||
|
set(CYGWIN 1)
|
||||||
|
set(UNIX 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER_ENV_VAR "CC")
|
||||||
|
|
||||||
|
if(CMAKE_COMPILER_IS_MINGW)
|
||||||
|
set(MINGW 1)
|
||||||
|
endif()
|
||||||
|
set(CMAKE_C_COMPILER_ID_RUN 1)
|
||||||
|
set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)
|
||||||
|
set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
|
||||||
|
set(CMAKE_C_LINKER_PREFERENCE 10)
|
||||||
|
|
||||||
|
# Save compiler ABI information.
|
||||||
|
set(CMAKE_C_SIZEOF_DATA_PTR "8")
|
||||||
|
set(CMAKE_C_COMPILER_ABI "ELF")
|
||||||
|
set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN")
|
||||||
|
set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
|
||||||
|
|
||||||
|
if(CMAKE_C_SIZEOF_DATA_PTR)
|
||||||
|
set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_C_COMPILER_ABI)
|
||||||
|
set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_C_LIBRARY_ARCHITECTURE)
|
||||||
|
set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "")
|
||||||
|
if(CMAKE_C_CL_SHOWINCLUDES_PREFIX)
|
||||||
|
set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include")
|
||||||
|
set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s")
|
||||||
|
set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib")
|
||||||
|
set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
|
||||||
91
cmake-build-debug/CMakeFiles/3.20.2/CMakeCXXCompiler.cmake
Normal file
91
cmake-build-debug/CMakeFiles/3.20.2/CMakeCXXCompiler.cmake
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
set(CMAKE_CXX_COMPILER "/usr/bin/c++")
|
||||||
|
set(CMAKE_CXX_COMPILER_ARG1 "")
|
||||||
|
set(CMAKE_CXX_COMPILER_ID "GNU")
|
||||||
|
set(CMAKE_CXX_COMPILER_VERSION "9.3.0")
|
||||||
|
set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
|
||||||
|
set(CMAKE_CXX_COMPILER_WRAPPER "")
|
||||||
|
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "14")
|
||||||
|
set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20")
|
||||||
|
set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
|
||||||
|
set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
|
||||||
|
set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
|
||||||
|
set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
|
||||||
|
set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20")
|
||||||
|
set(CMAKE_CXX23_COMPILE_FEATURES "")
|
||||||
|
|
||||||
|
set(CMAKE_CXX_PLATFORM_ID "Linux")
|
||||||
|
set(CMAKE_CXX_SIMULATE_ID "")
|
||||||
|
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "")
|
||||||
|
set(CMAKE_CXX_SIMULATE_VERSION "")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set(CMAKE_AR "/usr/bin/ar")
|
||||||
|
set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-9")
|
||||||
|
set(CMAKE_RANLIB "/usr/bin/ranlib")
|
||||||
|
set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-9")
|
||||||
|
set(CMAKE_LINKER "/usr/bin/ld")
|
||||||
|
set(CMAKE_MT "")
|
||||||
|
set(CMAKE_COMPILER_IS_GNUCXX 1)
|
||||||
|
set(CMAKE_CXX_COMPILER_LOADED 1)
|
||||||
|
set(CMAKE_CXX_COMPILER_WORKS TRUE)
|
||||||
|
set(CMAKE_CXX_ABI_COMPILED TRUE)
|
||||||
|
set(CMAKE_COMPILER_IS_MINGW )
|
||||||
|
set(CMAKE_COMPILER_IS_CYGWIN )
|
||||||
|
if(CMAKE_COMPILER_IS_CYGWIN)
|
||||||
|
set(CYGWIN 1)
|
||||||
|
set(UNIX 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
|
||||||
|
|
||||||
|
if(CMAKE_COMPILER_IS_MINGW)
|
||||||
|
set(MINGW 1)
|
||||||
|
endif()
|
||||||
|
set(CMAKE_CXX_COMPILER_ID_RUN 1)
|
||||||
|
set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP)
|
||||||
|
set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
|
||||||
|
|
||||||
|
foreach (lang C OBJC OBJCXX)
|
||||||
|
if (CMAKE_${lang}_COMPILER_ID_RUN)
|
||||||
|
foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
|
||||||
|
list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(CMAKE_CXX_LINKER_PREFERENCE 30)
|
||||||
|
set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
|
||||||
|
|
||||||
|
# Save compiler ABI information.
|
||||||
|
set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
|
||||||
|
set(CMAKE_CXX_COMPILER_ABI "ELF")
|
||||||
|
set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN")
|
||||||
|
set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
|
||||||
|
|
||||||
|
if(CMAKE_CXX_SIZEOF_DATA_PTR)
|
||||||
|
set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ABI)
|
||||||
|
set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
|
||||||
|
set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
|
||||||
|
if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
|
||||||
|
set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/9;/usr/include/x86_64-linux-gnu/c++/9;/usr/include/c++/9/backward;/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include")
|
||||||
|
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc")
|
||||||
|
set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib")
|
||||||
|
set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
|
||||||
BIN
cmake-build-debug/CMakeFiles/3.20.2/CMakeDetermineCompilerABI_C.bin
Executable file
BIN
cmake-build-debug/CMakeFiles/3.20.2/CMakeDetermineCompilerABI_C.bin
Executable file
Binary file not shown.
BIN
cmake-build-debug/CMakeFiles/3.20.2/CMakeDetermineCompilerABI_CXX.bin
Executable file
BIN
cmake-build-debug/CMakeFiles/3.20.2/CMakeDetermineCompilerABI_CXX.bin
Executable file
Binary file not shown.
15
cmake-build-debug/CMakeFiles/3.20.2/CMakeSystem.cmake
Normal file
15
cmake-build-debug/CMakeFiles/3.20.2/CMakeSystem.cmake
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
set(CMAKE_HOST_SYSTEM "Linux-5.11.0-43-generic")
|
||||||
|
set(CMAKE_HOST_SYSTEM_NAME "Linux")
|
||||||
|
set(CMAKE_HOST_SYSTEM_VERSION "5.11.0-43-generic")
|
||||||
|
set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM "Linux-5.11.0-43-generic")
|
||||||
|
set(CMAKE_SYSTEM_NAME "Linux")
|
||||||
|
set(CMAKE_SYSTEM_VERSION "5.11.0-43-generic")
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
|
||||||
|
|
||||||
|
set(CMAKE_CROSSCOMPILING "FALSE")
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_LOADED 1)
|
||||||
@@ -0,0 +1,752 @@
|
|||||||
|
#ifdef __cplusplus
|
||||||
|
# error "A C++ compiler has been selected for C."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__18CXX)
|
||||||
|
# define ID_VOID_MAIN
|
||||||
|
#endif
|
||||||
|
#if defined(__CLASSIC_C__)
|
||||||
|
/* cv-qualifiers did not exist in K&R C */
|
||||||
|
# define const
|
||||||
|
# define volatile
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Version number components: V=Version, R=Revision, P=Patch
|
||||||
|
Version date components: YYYY=Year, MM=Month, DD=Day */
|
||||||
|
|
||||||
|
#if defined(__INTEL_COMPILER) || defined(__ICC)
|
||||||
|
# define COMPILER_ID "Intel"
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
# define SIMULATE_ID "MSVC"
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC__)
|
||||||
|
# define SIMULATE_ID "GNU"
|
||||||
|
# endif
|
||||||
|
/* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
|
||||||
|
except that a few beta releases use the old format with V=2021. */
|
||||||
|
# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
|
||||||
|
# if defined(__INTEL_COMPILER_UPDATE)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
|
||||||
|
# else
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
|
||||||
|
/* The third version component from --version is an update index,
|
||||||
|
but no macro is provided for it. */
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(0)
|
||||||
|
# endif
|
||||||
|
# if defined(__INTEL_COMPILER_BUILD_DATE)
|
||||||
|
/* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
|
||||||
|
# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
|
||||||
|
# endif
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
/* _MSC_VER = VVRR */
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC__)
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
|
||||||
|
# elif defined(__GNUG__)
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC_MINOR__)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC_PATCHLEVEL__)
|
||||||
|
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
|
||||||
|
# define COMPILER_ID "IntelLLVM"
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# define SIMULATE_ID "MSVC"
|
||||||
|
#endif
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
# define SIMULATE_ID "GNU"
|
||||||
|
#endif
|
||||||
|
/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
|
||||||
|
* later. Look for 6 digit vs. 8 digit version number to decide encoding.
|
||||||
|
* VVVV is no smaller than the current year when a versio is released.
|
||||||
|
*/
|
||||||
|
#if __INTEL_LLVM_COMPILER < 1000000L
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
|
||||||
|
#else
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
|
||||||
|
#endif
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
/* _MSC_VER = VVRR */
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||||
|
#endif
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
|
||||||
|
#elif defined(__GNUG__)
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
|
||||||
|
#endif
|
||||||
|
#if defined(__GNUC_MINOR__)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||||
|
#endif
|
||||||
|
#if defined(__GNUC_PATCHLEVEL__)
|
||||||
|
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(__PATHCC__)
|
||||||
|
# define COMPILER_ID "PathScale"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
|
||||||
|
# if defined(__PATHCC_PATCHLEVEL__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
|
||||||
|
# define COMPILER_ID "Embarcadero"
|
||||||
|
# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
|
||||||
|
# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
|
||||||
|
|
||||||
|
#elif defined(__BORLANDC__)
|
||||||
|
# define COMPILER_ID "Borland"
|
||||||
|
/* __BORLANDC__ = 0xVRR */
|
||||||
|
# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
|
||||||
|
# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
|
||||||
|
# define COMPILER_ID "Watcom"
|
||||||
|
/* __WATCOMC__ = VVRR */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
|
||||||
|
# if (__WATCOMC__ % 10) > 0
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
# define COMPILER_ID "OpenWatcom"
|
||||||
|
/* __WATCOMC__ = VVRP + 1100 */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
|
||||||
|
# if (__WATCOMC__ % 10) > 0
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__SUNPRO_C)
|
||||||
|
# define COMPILER_ID "SunPro"
|
||||||
|
# if __SUNPRO_C >= 0x5100
|
||||||
|
/* __SUNPRO_C = 0xVRRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
|
||||||
|
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
|
||||||
|
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
|
||||||
|
# else
|
||||||
|
/* __SUNPRO_CC = 0xVRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
|
||||||
|
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
|
||||||
|
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__HP_cc)
|
||||||
|
# define COMPILER_ID "HP"
|
||||||
|
/* __HP_cc = VVRRPP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100)
|
||||||
|
|
||||||
|
#elif defined(__DECC)
|
||||||
|
# define COMPILER_ID "Compaq"
|
||||||
|
/* __DECC_VER = VVRRTPPPP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000)
|
||||||
|
|
||||||
|
#elif defined(__IBMC__) && defined(__COMPILER_VER__)
|
||||||
|
# define COMPILER_ID "zOS"
|
||||||
|
/* __IBMC__ = VRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
|
||||||
|
|
||||||
|
#elif defined(__ibmxl__) && defined(__clang__)
|
||||||
|
# define COMPILER_ID "XLClang"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
|
||||||
|
# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
|
||||||
|
# define COMPILER_ID "XL"
|
||||||
|
/* __IBMC__ = VRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
|
||||||
|
|
||||||
|
#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
|
||||||
|
# define COMPILER_ID "VisualAge"
|
||||||
|
/* __IBMC__ = VRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
|
||||||
|
|
||||||
|
#elif defined(__NVCOMPILER)
|
||||||
|
# define COMPILER_ID "NVHPC"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
|
||||||
|
# if defined(__NVCOMPILER_PATCHLEVEL__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__PGI)
|
||||||
|
# define COMPILER_ID "PGI"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
|
||||||
|
# if defined(__PGIC_PATCHLEVEL__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(_CRAYC)
|
||||||
|
# define COMPILER_ID "Cray"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
|
||||||
|
|
||||||
|
#elif defined(__TI_COMPILER_VERSION__)
|
||||||
|
# define COMPILER_ID "TI"
|
||||||
|
/* __TI_COMPILER_VERSION__ = VVVRRRPPP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
|
||||||
|
|
||||||
|
#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
|
||||||
|
# define COMPILER_ID "Fujitsu"
|
||||||
|
|
||||||
|
#elif defined(__ghs__)
|
||||||
|
# define COMPILER_ID "GHS"
|
||||||
|
/* __GHS_VERSION_NUMBER = VVVVRP */
|
||||||
|
# ifdef __GHS_VERSION_NUMBER
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__TINYC__)
|
||||||
|
# define COMPILER_ID "TinyCC"
|
||||||
|
|
||||||
|
#elif defined(__BCC__)
|
||||||
|
# define COMPILER_ID "Bruce"
|
||||||
|
|
||||||
|
#elif defined(__SCO_VERSION__)
|
||||||
|
# define COMPILER_ID "SCO"
|
||||||
|
|
||||||
|
#elif defined(__ARMCC_VERSION) && !defined(__clang__)
|
||||||
|
# define COMPILER_ID "ARMCC"
|
||||||
|
#if __ARMCC_VERSION >= 1000000
|
||||||
|
/* __ARMCC_VERSION = VRRPPPP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
|
||||||
|
#else
|
||||||
|
/* __ARMCC_VERSION = VRPPPP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(__clang__) && defined(__apple_build_version__)
|
||||||
|
# define COMPILER_ID "AppleClang"
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
# define SIMULATE_ID "MSVC"
|
||||||
|
# endif
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
/* _MSC_VER = VVRR */
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||||
|
# endif
|
||||||
|
# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
|
||||||
|
|
||||||
|
#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
|
||||||
|
# define COMPILER_ID "ARMClang"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
|
||||||
|
# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
|
||||||
|
|
||||||
|
#elif defined(__clang__)
|
||||||
|
# define COMPILER_ID "Clang"
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
# define SIMULATE_ID "MSVC"
|
||||||
|
# endif
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
/* _MSC_VER = VVRR */
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
# define COMPILER_ID "GNU"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
|
||||||
|
# if defined(__GNUC_MINOR__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC_PATCHLEVEL__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# define COMPILER_ID "MSVC"
|
||||||
|
/* _MSC_VER = VVRR */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||||
|
# if defined(_MSC_FULL_VER)
|
||||||
|
# if _MSC_VER >= 1400
|
||||||
|
/* _MSC_FULL_VER = VVRRPPPPP */
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
|
||||||
|
# else
|
||||||
|
/* _MSC_FULL_VER = VVRRPPPP */
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# if defined(_MSC_BUILD)
|
||||||
|
# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
|
||||||
|
# define COMPILER_ID "ADSP"
|
||||||
|
#if defined(__VISUALDSPVERSION__)
|
||||||
|
/* __VISUALDSPVERSION__ = 0xVVRRPP00 */
|
||||||
|
# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
|
||||||
|
# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
|
||||||
|
# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
|
||||||
|
# define COMPILER_ID "IAR"
|
||||||
|
# if defined(__VER__) && defined(__ICCARM__)
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
|
||||||
|
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
|
||||||
|
# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
|
||||||
|
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)
|
||||||
|
# define COMPILER_ID "SDCC"
|
||||||
|
# if defined(__SDCC_VERSION_MAJOR)
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)
|
||||||
|
# else
|
||||||
|
/* SDCC = VRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(SDCC/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(SDCC % 10)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
|
||||||
|
/* These compilers are either not known or too old to define an
|
||||||
|
identification macro. Try to identify the platform and guess that
|
||||||
|
it is the native compiler. */
|
||||||
|
#elif defined(__hpux) || defined(__hpua)
|
||||||
|
# define COMPILER_ID "HP"
|
||||||
|
|
||||||
|
#else /* unknown compiler */
|
||||||
|
# define COMPILER_ID ""
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Construct the string literal in pieces to prevent the source from
|
||||||
|
getting matched. Store it in a pointer rather than an array
|
||||||
|
because some compilers will just produce instructions to fill the
|
||||||
|
array rather than assigning a pointer to a static array. */
|
||||||
|
char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
|
||||||
|
#ifdef SIMULATE_ID
|
||||||
|
char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __QNXNTO__
|
||||||
|
char const* qnxnto = "INFO" ":" "qnxnto[]";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
|
||||||
|
char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define STRINGIFY_HELPER(X) #X
|
||||||
|
#define STRINGIFY(X) STRINGIFY_HELPER(X)
|
||||||
|
|
||||||
|
/* Identify known platforms by name. */
|
||||||
|
#if defined(__linux) || defined(__linux__) || defined(linux)
|
||||||
|
# define PLATFORM_ID "Linux"
|
||||||
|
|
||||||
|
#elif defined(__CYGWIN__)
|
||||||
|
# define PLATFORM_ID "Cygwin"
|
||||||
|
|
||||||
|
#elif defined(__MINGW32__)
|
||||||
|
# define PLATFORM_ID "MinGW"
|
||||||
|
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
# define PLATFORM_ID "Darwin"
|
||||||
|
|
||||||
|
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
|
||||||
|
# define PLATFORM_ID "Windows"
|
||||||
|
|
||||||
|
#elif defined(__FreeBSD__) || defined(__FreeBSD)
|
||||||
|
# define PLATFORM_ID "FreeBSD"
|
||||||
|
|
||||||
|
#elif defined(__NetBSD__) || defined(__NetBSD)
|
||||||
|
# define PLATFORM_ID "NetBSD"
|
||||||
|
|
||||||
|
#elif defined(__OpenBSD__) || defined(__OPENBSD)
|
||||||
|
# define PLATFORM_ID "OpenBSD"
|
||||||
|
|
||||||
|
#elif defined(__sun) || defined(sun)
|
||||||
|
# define PLATFORM_ID "SunOS"
|
||||||
|
|
||||||
|
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
|
||||||
|
# define PLATFORM_ID "AIX"
|
||||||
|
|
||||||
|
#elif defined(__hpux) || defined(__hpux__)
|
||||||
|
# define PLATFORM_ID "HP-UX"
|
||||||
|
|
||||||
|
#elif defined(__HAIKU__)
|
||||||
|
# define PLATFORM_ID "Haiku"
|
||||||
|
|
||||||
|
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
|
||||||
|
# define PLATFORM_ID "BeOS"
|
||||||
|
|
||||||
|
#elif defined(__QNX__) || defined(__QNXNTO__)
|
||||||
|
# define PLATFORM_ID "QNX"
|
||||||
|
|
||||||
|
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
|
||||||
|
# define PLATFORM_ID "Tru64"
|
||||||
|
|
||||||
|
#elif defined(__riscos) || defined(__riscos__)
|
||||||
|
# define PLATFORM_ID "RISCos"
|
||||||
|
|
||||||
|
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
|
||||||
|
# define PLATFORM_ID "SINIX"
|
||||||
|
|
||||||
|
#elif defined(__UNIX_SV__)
|
||||||
|
# define PLATFORM_ID "UNIX_SV"
|
||||||
|
|
||||||
|
#elif defined(__bsdos__)
|
||||||
|
# define PLATFORM_ID "BSDOS"
|
||||||
|
|
||||||
|
#elif defined(_MPRAS) || defined(MPRAS)
|
||||||
|
# define PLATFORM_ID "MP-RAS"
|
||||||
|
|
||||||
|
#elif defined(__osf) || defined(__osf__)
|
||||||
|
# define PLATFORM_ID "OSF1"
|
||||||
|
|
||||||
|
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
|
||||||
|
# define PLATFORM_ID "SCO_SV"
|
||||||
|
|
||||||
|
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
|
||||||
|
# define PLATFORM_ID "ULTRIX"
|
||||||
|
|
||||||
|
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
|
||||||
|
# define PLATFORM_ID "Xenix"
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
# if defined(__LINUX__)
|
||||||
|
# define PLATFORM_ID "Linux"
|
||||||
|
|
||||||
|
# elif defined(__DOS__)
|
||||||
|
# define PLATFORM_ID "DOS"
|
||||||
|
|
||||||
|
# elif defined(__OS2__)
|
||||||
|
# define PLATFORM_ID "OS2"
|
||||||
|
|
||||||
|
# elif defined(__WINDOWS__)
|
||||||
|
# define PLATFORM_ID "Windows3x"
|
||||||
|
|
||||||
|
# elif defined(__VXWORKS__)
|
||||||
|
# define PLATFORM_ID "VxWorks"
|
||||||
|
|
||||||
|
# else /* unknown platform */
|
||||||
|
# define PLATFORM_ID
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__INTEGRITY)
|
||||||
|
# if defined(INT_178B)
|
||||||
|
# define PLATFORM_ID "Integrity178"
|
||||||
|
|
||||||
|
# else /* regular Integrity */
|
||||||
|
# define PLATFORM_ID "Integrity"
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else /* unknown platform */
|
||||||
|
# define PLATFORM_ID
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* For windows compilers MSVC and Intel we can determine
|
||||||
|
the architecture of the compiler being used. This is because
|
||||||
|
the compilers do not have flags that can change the architecture,
|
||||||
|
but rather depend on which compiler is being used
|
||||||
|
*/
|
||||||
|
#if defined(_WIN32) && defined(_MSC_VER)
|
||||||
|
# if defined(_M_IA64)
|
||||||
|
# define ARCHITECTURE_ID "IA64"
|
||||||
|
|
||||||
|
# elif defined(_M_ARM64EC)
|
||||||
|
# define ARCHITECTURE_ID "ARM64EC"
|
||||||
|
|
||||||
|
# elif defined(_M_X64) || defined(_M_AMD64)
|
||||||
|
# define ARCHITECTURE_ID "x64"
|
||||||
|
|
||||||
|
# elif defined(_M_IX86)
|
||||||
|
# define ARCHITECTURE_ID "X86"
|
||||||
|
|
||||||
|
# elif defined(_M_ARM64)
|
||||||
|
# define ARCHITECTURE_ID "ARM64"
|
||||||
|
|
||||||
|
# elif defined(_M_ARM)
|
||||||
|
# if _M_ARM == 4
|
||||||
|
# define ARCHITECTURE_ID "ARMV4I"
|
||||||
|
# elif _M_ARM == 5
|
||||||
|
# define ARCHITECTURE_ID "ARMV5I"
|
||||||
|
# else
|
||||||
|
# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# elif defined(_M_MIPS)
|
||||||
|
# define ARCHITECTURE_ID "MIPS"
|
||||||
|
|
||||||
|
# elif defined(_M_SH)
|
||||||
|
# define ARCHITECTURE_ID "SHx"
|
||||||
|
|
||||||
|
# else /* unknown architecture */
|
||||||
|
# define ARCHITECTURE_ID ""
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
# if defined(_M_I86)
|
||||||
|
# define ARCHITECTURE_ID "I86"
|
||||||
|
|
||||||
|
# elif defined(_M_IX86)
|
||||||
|
# define ARCHITECTURE_ID "X86"
|
||||||
|
|
||||||
|
# else /* unknown architecture */
|
||||||
|
# define ARCHITECTURE_ID ""
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
|
||||||
|
# if defined(__ICCARM__)
|
||||||
|
# define ARCHITECTURE_ID "ARM"
|
||||||
|
|
||||||
|
# elif defined(__ICCRX__)
|
||||||
|
# define ARCHITECTURE_ID "RX"
|
||||||
|
|
||||||
|
# elif defined(__ICCRH850__)
|
||||||
|
# define ARCHITECTURE_ID "RH850"
|
||||||
|
|
||||||
|
# elif defined(__ICCRL78__)
|
||||||
|
# define ARCHITECTURE_ID "RL78"
|
||||||
|
|
||||||
|
# elif defined(__ICCRISCV__)
|
||||||
|
# define ARCHITECTURE_ID "RISCV"
|
||||||
|
|
||||||
|
# elif defined(__ICCAVR__)
|
||||||
|
# define ARCHITECTURE_ID "AVR"
|
||||||
|
|
||||||
|
# elif defined(__ICC430__)
|
||||||
|
# define ARCHITECTURE_ID "MSP430"
|
||||||
|
|
||||||
|
# elif defined(__ICCV850__)
|
||||||
|
# define ARCHITECTURE_ID "V850"
|
||||||
|
|
||||||
|
# elif defined(__ICC8051__)
|
||||||
|
# define ARCHITECTURE_ID "8051"
|
||||||
|
|
||||||
|
# elif defined(__ICCSTM8__)
|
||||||
|
# define ARCHITECTURE_ID "STM8"
|
||||||
|
|
||||||
|
# else /* unknown architecture */
|
||||||
|
# define ARCHITECTURE_ID ""
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__ghs__)
|
||||||
|
# if defined(__PPC64__)
|
||||||
|
# define ARCHITECTURE_ID "PPC64"
|
||||||
|
|
||||||
|
# elif defined(__ppc__)
|
||||||
|
# define ARCHITECTURE_ID "PPC"
|
||||||
|
|
||||||
|
# elif defined(__ARM__)
|
||||||
|
# define ARCHITECTURE_ID "ARM"
|
||||||
|
|
||||||
|
# elif defined(__x86_64__)
|
||||||
|
# define ARCHITECTURE_ID "x64"
|
||||||
|
|
||||||
|
# elif defined(__i386__)
|
||||||
|
# define ARCHITECTURE_ID "X86"
|
||||||
|
|
||||||
|
# else /* unknown architecture */
|
||||||
|
# define ARCHITECTURE_ID ""
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__TI_COMPILER_VERSION__)
|
||||||
|
# if defined(__TI_ARM__)
|
||||||
|
# define ARCHITECTURE_ID "ARM"
|
||||||
|
|
||||||
|
# elif defined(__MSP430__)
|
||||||
|
# define ARCHITECTURE_ID "MSP430"
|
||||||
|
|
||||||
|
# elif defined(__TMS320C28XX__)
|
||||||
|
# define ARCHITECTURE_ID "TMS320C28x"
|
||||||
|
|
||||||
|
# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
|
||||||
|
# define ARCHITECTURE_ID "TMS320C6x"
|
||||||
|
|
||||||
|
# else /* unknown architecture */
|
||||||
|
# define ARCHITECTURE_ID ""
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
# define ARCHITECTURE_ID
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Convert integer to decimal digit literals. */
|
||||||
|
#define DEC(n) \
|
||||||
|
('0' + (((n) / 10000000)%10)), \
|
||||||
|
('0' + (((n) / 1000000)%10)), \
|
||||||
|
('0' + (((n) / 100000)%10)), \
|
||||||
|
('0' + (((n) / 10000)%10)), \
|
||||||
|
('0' + (((n) / 1000)%10)), \
|
||||||
|
('0' + (((n) / 100)%10)), \
|
||||||
|
('0' + (((n) / 10)%10)), \
|
||||||
|
('0' + ((n) % 10))
|
||||||
|
|
||||||
|
/* Convert integer to hex digit literals. */
|
||||||
|
#define HEX(n) \
|
||||||
|
('0' + ((n)>>28 & 0xF)), \
|
||||||
|
('0' + ((n)>>24 & 0xF)), \
|
||||||
|
('0' + ((n)>>20 & 0xF)), \
|
||||||
|
('0' + ((n)>>16 & 0xF)), \
|
||||||
|
('0' + ((n)>>12 & 0xF)), \
|
||||||
|
('0' + ((n)>>8 & 0xF)), \
|
||||||
|
('0' + ((n)>>4 & 0xF)), \
|
||||||
|
('0' + ((n) & 0xF))
|
||||||
|
|
||||||
|
/* Construct a string literal encoding the version number components. */
|
||||||
|
#ifdef COMPILER_VERSION_MAJOR
|
||||||
|
char const info_version[] = {
|
||||||
|
'I', 'N', 'F', 'O', ':',
|
||||||
|
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
|
||||||
|
COMPILER_VERSION_MAJOR,
|
||||||
|
# ifdef COMPILER_VERSION_MINOR
|
||||||
|
'.', COMPILER_VERSION_MINOR,
|
||||||
|
# ifdef COMPILER_VERSION_PATCH
|
||||||
|
'.', COMPILER_VERSION_PATCH,
|
||||||
|
# ifdef COMPILER_VERSION_TWEAK
|
||||||
|
'.', COMPILER_VERSION_TWEAK,
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
']','\0'};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Construct a string literal encoding the internal version number. */
|
||||||
|
#ifdef COMPILER_VERSION_INTERNAL
|
||||||
|
char const info_version_internal[] = {
|
||||||
|
'I', 'N', 'F', 'O', ':',
|
||||||
|
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
|
||||||
|
'i','n','t','e','r','n','a','l','[',
|
||||||
|
COMPILER_VERSION_INTERNAL,']','\0'};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Construct a string literal encoding the version number components. */
|
||||||
|
#ifdef SIMULATE_VERSION_MAJOR
|
||||||
|
char const info_simulate_version[] = {
|
||||||
|
'I', 'N', 'F', 'O', ':',
|
||||||
|
's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
|
||||||
|
SIMULATE_VERSION_MAJOR,
|
||||||
|
# ifdef SIMULATE_VERSION_MINOR
|
||||||
|
'.', SIMULATE_VERSION_MINOR,
|
||||||
|
# ifdef SIMULATE_VERSION_PATCH
|
||||||
|
'.', SIMULATE_VERSION_PATCH,
|
||||||
|
# ifdef SIMULATE_VERSION_TWEAK
|
||||||
|
'.', SIMULATE_VERSION_TWEAK,
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
']','\0'};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Construct the string literal in pieces to prevent the source from
|
||||||
|
getting matched. Store it in a pointer rather than an array
|
||||||
|
because some compilers will just produce instructions to fill the
|
||||||
|
array rather than assigning a pointer to a static array. */
|
||||||
|
char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
|
||||||
|
char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__STDC__)
|
||||||
|
# if (defined(_MSC_VER) && !defined(__clang__)) \
|
||||||
|
|| (defined(__ibmxl__) || defined(__IBMC__))
|
||||||
|
# define C_DIALECT "90"
|
||||||
|
# else
|
||||||
|
# define C_DIALECT
|
||||||
|
# endif
|
||||||
|
#elif __STDC_VERSION__ >= 201000L
|
||||||
|
# define C_DIALECT "11"
|
||||||
|
#elif __STDC_VERSION__ >= 199901L
|
||||||
|
# define C_DIALECT "99"
|
||||||
|
#else
|
||||||
|
# define C_DIALECT "90"
|
||||||
|
#endif
|
||||||
|
const char* info_language_dialect_default =
|
||||||
|
"INFO" ":" "dialect_default[" C_DIALECT "]";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifdef ID_VOID_MAIN
|
||||||
|
void main() {}
|
||||||
|
#else
|
||||||
|
# if defined(__CLASSIC_C__)
|
||||||
|
int main(argc, argv) int argc; char *argv[];
|
||||||
|
# else
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
# endif
|
||||||
|
{
|
||||||
|
int require = 0;
|
||||||
|
require += info_compiler[argc];
|
||||||
|
require += info_platform[argc];
|
||||||
|
require += info_arch[argc];
|
||||||
|
#ifdef COMPILER_VERSION_MAJOR
|
||||||
|
require += info_version[argc];
|
||||||
|
#endif
|
||||||
|
#ifdef COMPILER_VERSION_INTERNAL
|
||||||
|
require += info_version_internal[argc];
|
||||||
|
#endif
|
||||||
|
#ifdef SIMULATE_ID
|
||||||
|
require += info_simulate[argc];
|
||||||
|
#endif
|
||||||
|
#ifdef SIMULATE_VERSION_MAJOR
|
||||||
|
require += info_simulate_version[argc];
|
||||||
|
#endif
|
||||||
|
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
|
||||||
|
require += info_cray[argc];
|
||||||
|
#endif
|
||||||
|
require += info_language_dialect_default[argc];
|
||||||
|
(void)argv;
|
||||||
|
return require;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
BIN
cmake-build-debug/CMakeFiles/3.20.2/CompilerIdC/a.out
Executable file
BIN
cmake-build-debug/CMakeFiles/3.20.2/CompilerIdC/a.out
Executable file
Binary file not shown.
@@ -0,0 +1,743 @@
|
|||||||
|
/* This source file must have a .cpp extension so that all C++ compilers
|
||||||
|
recognize the extension without flags. Borland does not know .cxx for
|
||||||
|
example. */
|
||||||
|
#ifndef __cplusplus
|
||||||
|
# error "A C compiler has been selected for C++."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Version number components: V=Version, R=Revision, P=Patch
|
||||||
|
Version date components: YYYY=Year, MM=Month, DD=Day */
|
||||||
|
|
||||||
|
#if defined(__COMO__)
|
||||||
|
# define COMPILER_ID "Comeau"
|
||||||
|
/* __COMO_VERSION__ = VRR */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
|
||||||
|
|
||||||
|
#elif defined(__INTEL_COMPILER) || defined(__ICC)
|
||||||
|
# define COMPILER_ID "Intel"
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
# define SIMULATE_ID "MSVC"
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC__)
|
||||||
|
# define SIMULATE_ID "GNU"
|
||||||
|
# endif
|
||||||
|
/* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
|
||||||
|
except that a few beta releases use the old format with V=2021. */
|
||||||
|
# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
|
||||||
|
# if defined(__INTEL_COMPILER_UPDATE)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
|
||||||
|
# else
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
|
||||||
|
/* The third version component from --version is an update index,
|
||||||
|
but no macro is provided for it. */
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(0)
|
||||||
|
# endif
|
||||||
|
# if defined(__INTEL_COMPILER_BUILD_DATE)
|
||||||
|
/* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
|
||||||
|
# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
|
||||||
|
# endif
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
/* _MSC_VER = VVRR */
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC__)
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
|
||||||
|
# elif defined(__GNUG__)
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC_MINOR__)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC_PATCHLEVEL__)
|
||||||
|
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
|
||||||
|
# define COMPILER_ID "IntelLLVM"
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# define SIMULATE_ID "MSVC"
|
||||||
|
#endif
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
# define SIMULATE_ID "GNU"
|
||||||
|
#endif
|
||||||
|
/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
|
||||||
|
* later. Look for 6 digit vs. 8 digit version number to decide encoding.
|
||||||
|
* VVVV is no smaller than the current year when a versio is released.
|
||||||
|
*/
|
||||||
|
#if __INTEL_LLVM_COMPILER < 1000000L
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
|
||||||
|
#else
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
|
||||||
|
#endif
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
/* _MSC_VER = VVRR */
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||||
|
#endif
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
|
||||||
|
#elif defined(__GNUG__)
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
|
||||||
|
#endif
|
||||||
|
#if defined(__GNUC_MINOR__)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||||
|
#endif
|
||||||
|
#if defined(__GNUC_PATCHLEVEL__)
|
||||||
|
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(__PATHCC__)
|
||||||
|
# define COMPILER_ID "PathScale"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
|
||||||
|
# if defined(__PATHCC_PATCHLEVEL__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
|
||||||
|
# define COMPILER_ID "Embarcadero"
|
||||||
|
# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
|
||||||
|
# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
|
||||||
|
|
||||||
|
#elif defined(__BORLANDC__)
|
||||||
|
# define COMPILER_ID "Borland"
|
||||||
|
/* __BORLANDC__ = 0xVRR */
|
||||||
|
# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
|
||||||
|
# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
|
||||||
|
# define COMPILER_ID "Watcom"
|
||||||
|
/* __WATCOMC__ = VVRR */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
|
||||||
|
# if (__WATCOMC__ % 10) > 0
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
# define COMPILER_ID "OpenWatcom"
|
||||||
|
/* __WATCOMC__ = VVRP + 1100 */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
|
||||||
|
# if (__WATCOMC__ % 10) > 0
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__SUNPRO_CC)
|
||||||
|
# define COMPILER_ID "SunPro"
|
||||||
|
# if __SUNPRO_CC >= 0x5100
|
||||||
|
/* __SUNPRO_CC = 0xVRRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
|
||||||
|
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
|
||||||
|
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
|
||||||
|
# else
|
||||||
|
/* __SUNPRO_CC = 0xVRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
|
||||||
|
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
|
||||||
|
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__HP_aCC)
|
||||||
|
# define COMPILER_ID "HP"
|
||||||
|
/* __HP_aCC = VVRRPP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
|
||||||
|
|
||||||
|
#elif defined(__DECCXX)
|
||||||
|
# define COMPILER_ID "Compaq"
|
||||||
|
/* __DECCXX_VER = VVRRTPPPP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
|
||||||
|
|
||||||
|
#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
|
||||||
|
# define COMPILER_ID "zOS"
|
||||||
|
/* __IBMCPP__ = VRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
|
||||||
|
|
||||||
|
#elif defined(__ibmxl__) && defined(__clang__)
|
||||||
|
# define COMPILER_ID "XLClang"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
|
||||||
|
# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
|
||||||
|
# define COMPILER_ID "XL"
|
||||||
|
/* __IBMCPP__ = VRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
|
||||||
|
|
||||||
|
#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
|
||||||
|
# define COMPILER_ID "VisualAge"
|
||||||
|
/* __IBMCPP__ = VRP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
|
||||||
|
|
||||||
|
#elif defined(__NVCOMPILER)
|
||||||
|
# define COMPILER_ID "NVHPC"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
|
||||||
|
# if defined(__NVCOMPILER_PATCHLEVEL__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__PGI)
|
||||||
|
# define COMPILER_ID "PGI"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
|
||||||
|
# if defined(__PGIC_PATCHLEVEL__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(_CRAYC)
|
||||||
|
# define COMPILER_ID "Cray"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
|
||||||
|
|
||||||
|
#elif defined(__TI_COMPILER_VERSION__)
|
||||||
|
# define COMPILER_ID "TI"
|
||||||
|
/* __TI_COMPILER_VERSION__ = VVVRRRPPP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
|
||||||
|
|
||||||
|
#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
|
||||||
|
# define COMPILER_ID "Fujitsu"
|
||||||
|
|
||||||
|
#elif defined(__ghs__)
|
||||||
|
# define COMPILER_ID "GHS"
|
||||||
|
/* __GHS_VERSION_NUMBER = VVVVRP */
|
||||||
|
# ifdef __GHS_VERSION_NUMBER
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__SCO_VERSION__)
|
||||||
|
# define COMPILER_ID "SCO"
|
||||||
|
|
||||||
|
#elif defined(__ARMCC_VERSION) && !defined(__clang__)
|
||||||
|
# define COMPILER_ID "ARMCC"
|
||||||
|
#if __ARMCC_VERSION >= 1000000
|
||||||
|
/* __ARMCC_VERSION = VRRPPPP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
|
||||||
|
#else
|
||||||
|
/* __ARMCC_VERSION = VRPPPP */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(__clang__) && defined(__apple_build_version__)
|
||||||
|
# define COMPILER_ID "AppleClang"
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
# define SIMULATE_ID "MSVC"
|
||||||
|
# endif
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
/* _MSC_VER = VVRR */
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||||
|
# endif
|
||||||
|
# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
|
||||||
|
|
||||||
|
#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
|
||||||
|
# define COMPILER_ID "ARMClang"
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
|
||||||
|
# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
|
||||||
|
|
||||||
|
#elif defined(__clang__)
|
||||||
|
# define COMPILER_ID "Clang"
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
# define SIMULATE_ID "MSVC"
|
||||||
|
# endif
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
/* _MSC_VER = VVRR */
|
||||||
|
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||||
|
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__GNUC__) || defined(__GNUG__)
|
||||||
|
# define COMPILER_ID "GNU"
|
||||||
|
# if defined(__GNUC__)
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
|
||||||
|
# else
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(__GNUG__)
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC_MINOR__)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||||
|
# endif
|
||||||
|
# if defined(__GNUC_PATCHLEVEL__)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# define COMPILER_ID "MSVC"
|
||||||
|
/* _MSC_VER = VVRR */
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||||
|
# if defined(_MSC_FULL_VER)
|
||||||
|
# if _MSC_VER >= 1400
|
||||||
|
/* _MSC_FULL_VER = VVRRPPPPP */
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
|
||||||
|
# else
|
||||||
|
/* _MSC_FULL_VER = VVRRPPPP */
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# if defined(_MSC_BUILD)
|
||||||
|
# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
|
||||||
|
# define COMPILER_ID "ADSP"
|
||||||
|
#if defined(__VISUALDSPVERSION__)
|
||||||
|
/* __VISUALDSPVERSION__ = 0xVVRRPP00 */
|
||||||
|
# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
|
||||||
|
# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
|
||||||
|
# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
|
||||||
|
# define COMPILER_ID "IAR"
|
||||||
|
# if defined(__VER__) && defined(__ICCARM__)
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
|
||||||
|
# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
|
||||||
|
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
|
||||||
|
# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
|
||||||
|
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
|
||||||
|
# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
|
||||||
|
# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
|
||||||
|
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
|
||||||
|
/* These compilers are either not known or too old to define an
|
||||||
|
identification macro. Try to identify the platform and guess that
|
||||||
|
it is the native compiler. */
|
||||||
|
#elif defined(__hpux) || defined(__hpua)
|
||||||
|
# define COMPILER_ID "HP"
|
||||||
|
|
||||||
|
#else /* unknown compiler */
|
||||||
|
# define COMPILER_ID ""
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Construct the string literal in pieces to prevent the source from
|
||||||
|
getting matched. Store it in a pointer rather than an array
|
||||||
|
because some compilers will just produce instructions to fill the
|
||||||
|
array rather than assigning a pointer to a static array. */
|
||||||
|
char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
|
||||||
|
#ifdef SIMULATE_ID
|
||||||
|
char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __QNXNTO__
|
||||||
|
char const* qnxnto = "INFO" ":" "qnxnto[]";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
|
||||||
|
char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define STRINGIFY_HELPER(X) #X
|
||||||
|
#define STRINGIFY(X) STRINGIFY_HELPER(X)
|
||||||
|
|
||||||
|
/* Identify known platforms by name. */
|
||||||
|
#if defined(__linux) || defined(__linux__) || defined(linux)
|
||||||
|
# define PLATFORM_ID "Linux"
|
||||||
|
|
||||||
|
#elif defined(__CYGWIN__)
|
||||||
|
# define PLATFORM_ID "Cygwin"
|
||||||
|
|
||||||
|
#elif defined(__MINGW32__)
|
||||||
|
# define PLATFORM_ID "MinGW"
|
||||||
|
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
# define PLATFORM_ID "Darwin"
|
||||||
|
|
||||||
|
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
|
||||||
|
# define PLATFORM_ID "Windows"
|
||||||
|
|
||||||
|
#elif defined(__FreeBSD__) || defined(__FreeBSD)
|
||||||
|
# define PLATFORM_ID "FreeBSD"
|
||||||
|
|
||||||
|
#elif defined(__NetBSD__) || defined(__NetBSD)
|
||||||
|
# define PLATFORM_ID "NetBSD"
|
||||||
|
|
||||||
|
#elif defined(__OpenBSD__) || defined(__OPENBSD)
|
||||||
|
# define PLATFORM_ID "OpenBSD"
|
||||||
|
|
||||||
|
#elif defined(__sun) || defined(sun)
|
||||||
|
# define PLATFORM_ID "SunOS"
|
||||||
|
|
||||||
|
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
|
||||||
|
# define PLATFORM_ID "AIX"
|
||||||
|
|
||||||
|
#elif defined(__hpux) || defined(__hpux__)
|
||||||
|
# define PLATFORM_ID "HP-UX"
|
||||||
|
|
||||||
|
#elif defined(__HAIKU__)
|
||||||
|
# define PLATFORM_ID "Haiku"
|
||||||
|
|
||||||
|
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
|
||||||
|
# define PLATFORM_ID "BeOS"
|
||||||
|
|
||||||
|
#elif defined(__QNX__) || defined(__QNXNTO__)
|
||||||
|
# define PLATFORM_ID "QNX"
|
||||||
|
|
||||||
|
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
|
||||||
|
# define PLATFORM_ID "Tru64"
|
||||||
|
|
||||||
|
#elif defined(__riscos) || defined(__riscos__)
|
||||||
|
# define PLATFORM_ID "RISCos"
|
||||||
|
|
||||||
|
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
|
||||||
|
# define PLATFORM_ID "SINIX"
|
||||||
|
|
||||||
|
#elif defined(__UNIX_SV__)
|
||||||
|
# define PLATFORM_ID "UNIX_SV"
|
||||||
|
|
||||||
|
#elif defined(__bsdos__)
|
||||||
|
# define PLATFORM_ID "BSDOS"
|
||||||
|
|
||||||
|
#elif defined(_MPRAS) || defined(MPRAS)
|
||||||
|
# define PLATFORM_ID "MP-RAS"
|
||||||
|
|
||||||
|
#elif defined(__osf) || defined(__osf__)
|
||||||
|
# define PLATFORM_ID "OSF1"
|
||||||
|
|
||||||
|
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
|
||||||
|
# define PLATFORM_ID "SCO_SV"
|
||||||
|
|
||||||
|
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
|
||||||
|
# define PLATFORM_ID "ULTRIX"
|
||||||
|
|
||||||
|
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
|
||||||
|
# define PLATFORM_ID "Xenix"
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
# if defined(__LINUX__)
|
||||||
|
# define PLATFORM_ID "Linux"
|
||||||
|
|
||||||
|
# elif defined(__DOS__)
|
||||||
|
# define PLATFORM_ID "DOS"
|
||||||
|
|
||||||
|
# elif defined(__OS2__)
|
||||||
|
# define PLATFORM_ID "OS2"
|
||||||
|
|
||||||
|
# elif defined(__WINDOWS__)
|
||||||
|
# define PLATFORM_ID "Windows3x"
|
||||||
|
|
||||||
|
# elif defined(__VXWORKS__)
|
||||||
|
# define PLATFORM_ID "VxWorks"
|
||||||
|
|
||||||
|
# else /* unknown platform */
|
||||||
|
# define PLATFORM_ID
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__INTEGRITY)
|
||||||
|
# if defined(INT_178B)
|
||||||
|
# define PLATFORM_ID "Integrity178"
|
||||||
|
|
||||||
|
# else /* regular Integrity */
|
||||||
|
# define PLATFORM_ID "Integrity"
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else /* unknown platform */
|
||||||
|
# define PLATFORM_ID
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* For windows compilers MSVC and Intel we can determine
|
||||||
|
the architecture of the compiler being used. This is because
|
||||||
|
the compilers do not have flags that can change the architecture,
|
||||||
|
but rather depend on which compiler is being used
|
||||||
|
*/
|
||||||
|
#if defined(_WIN32) && defined(_MSC_VER)
|
||||||
|
# if defined(_M_IA64)
|
||||||
|
# define ARCHITECTURE_ID "IA64"
|
||||||
|
|
||||||
|
# elif defined(_M_ARM64EC)
|
||||||
|
# define ARCHITECTURE_ID "ARM64EC"
|
||||||
|
|
||||||
|
# elif defined(_M_X64) || defined(_M_AMD64)
|
||||||
|
# define ARCHITECTURE_ID "x64"
|
||||||
|
|
||||||
|
# elif defined(_M_IX86)
|
||||||
|
# define ARCHITECTURE_ID "X86"
|
||||||
|
|
||||||
|
# elif defined(_M_ARM64)
|
||||||
|
# define ARCHITECTURE_ID "ARM64"
|
||||||
|
|
||||||
|
# elif defined(_M_ARM)
|
||||||
|
# if _M_ARM == 4
|
||||||
|
# define ARCHITECTURE_ID "ARMV4I"
|
||||||
|
# elif _M_ARM == 5
|
||||||
|
# define ARCHITECTURE_ID "ARMV5I"
|
||||||
|
# else
|
||||||
|
# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# elif defined(_M_MIPS)
|
||||||
|
# define ARCHITECTURE_ID "MIPS"
|
||||||
|
|
||||||
|
# elif defined(_M_SH)
|
||||||
|
# define ARCHITECTURE_ID "SHx"
|
||||||
|
|
||||||
|
# else /* unknown architecture */
|
||||||
|
# define ARCHITECTURE_ID ""
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
# if defined(_M_I86)
|
||||||
|
# define ARCHITECTURE_ID "I86"
|
||||||
|
|
||||||
|
# elif defined(_M_IX86)
|
||||||
|
# define ARCHITECTURE_ID "X86"
|
||||||
|
|
||||||
|
# else /* unknown architecture */
|
||||||
|
# define ARCHITECTURE_ID ""
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
|
||||||
|
# if defined(__ICCARM__)
|
||||||
|
# define ARCHITECTURE_ID "ARM"
|
||||||
|
|
||||||
|
# elif defined(__ICCRX__)
|
||||||
|
# define ARCHITECTURE_ID "RX"
|
||||||
|
|
||||||
|
# elif defined(__ICCRH850__)
|
||||||
|
# define ARCHITECTURE_ID "RH850"
|
||||||
|
|
||||||
|
# elif defined(__ICCRL78__)
|
||||||
|
# define ARCHITECTURE_ID "RL78"
|
||||||
|
|
||||||
|
# elif defined(__ICCRISCV__)
|
||||||
|
# define ARCHITECTURE_ID "RISCV"
|
||||||
|
|
||||||
|
# elif defined(__ICCAVR__)
|
||||||
|
# define ARCHITECTURE_ID "AVR"
|
||||||
|
|
||||||
|
# elif defined(__ICC430__)
|
||||||
|
# define ARCHITECTURE_ID "MSP430"
|
||||||
|
|
||||||
|
# elif defined(__ICCV850__)
|
||||||
|
# define ARCHITECTURE_ID "V850"
|
||||||
|
|
||||||
|
# elif defined(__ICC8051__)
|
||||||
|
# define ARCHITECTURE_ID "8051"
|
||||||
|
|
||||||
|
# elif defined(__ICCSTM8__)
|
||||||
|
# define ARCHITECTURE_ID "STM8"
|
||||||
|
|
||||||
|
# else /* unknown architecture */
|
||||||
|
# define ARCHITECTURE_ID ""
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__ghs__)
|
||||||
|
# if defined(__PPC64__)
|
||||||
|
# define ARCHITECTURE_ID "PPC64"
|
||||||
|
|
||||||
|
# elif defined(__ppc__)
|
||||||
|
# define ARCHITECTURE_ID "PPC"
|
||||||
|
|
||||||
|
# elif defined(__ARM__)
|
||||||
|
# define ARCHITECTURE_ID "ARM"
|
||||||
|
|
||||||
|
# elif defined(__x86_64__)
|
||||||
|
# define ARCHITECTURE_ID "x64"
|
||||||
|
|
||||||
|
# elif defined(__i386__)
|
||||||
|
# define ARCHITECTURE_ID "X86"
|
||||||
|
|
||||||
|
# else /* unknown architecture */
|
||||||
|
# define ARCHITECTURE_ID ""
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__TI_COMPILER_VERSION__)
|
||||||
|
# if defined(__TI_ARM__)
|
||||||
|
# define ARCHITECTURE_ID "ARM"
|
||||||
|
|
||||||
|
# elif defined(__MSP430__)
|
||||||
|
# define ARCHITECTURE_ID "MSP430"
|
||||||
|
|
||||||
|
# elif defined(__TMS320C28XX__)
|
||||||
|
# define ARCHITECTURE_ID "TMS320C28x"
|
||||||
|
|
||||||
|
# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
|
||||||
|
# define ARCHITECTURE_ID "TMS320C6x"
|
||||||
|
|
||||||
|
# else /* unknown architecture */
|
||||||
|
# define ARCHITECTURE_ID ""
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
# define ARCHITECTURE_ID
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Convert integer to decimal digit literals. */
|
||||||
|
#define DEC(n) \
|
||||||
|
('0' + (((n) / 10000000)%10)), \
|
||||||
|
('0' + (((n) / 1000000)%10)), \
|
||||||
|
('0' + (((n) / 100000)%10)), \
|
||||||
|
('0' + (((n) / 10000)%10)), \
|
||||||
|
('0' + (((n) / 1000)%10)), \
|
||||||
|
('0' + (((n) / 100)%10)), \
|
||||||
|
('0' + (((n) / 10)%10)), \
|
||||||
|
('0' + ((n) % 10))
|
||||||
|
|
||||||
|
/* Convert integer to hex digit literals. */
|
||||||
|
#define HEX(n) \
|
||||||
|
('0' + ((n)>>28 & 0xF)), \
|
||||||
|
('0' + ((n)>>24 & 0xF)), \
|
||||||
|
('0' + ((n)>>20 & 0xF)), \
|
||||||
|
('0' + ((n)>>16 & 0xF)), \
|
||||||
|
('0' + ((n)>>12 & 0xF)), \
|
||||||
|
('0' + ((n)>>8 & 0xF)), \
|
||||||
|
('0' + ((n)>>4 & 0xF)), \
|
||||||
|
('0' + ((n) & 0xF))
|
||||||
|
|
||||||
|
/* Construct a string literal encoding the version number components. */
|
||||||
|
#ifdef COMPILER_VERSION_MAJOR
|
||||||
|
char const info_version[] = {
|
||||||
|
'I', 'N', 'F', 'O', ':',
|
||||||
|
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
|
||||||
|
COMPILER_VERSION_MAJOR,
|
||||||
|
# ifdef COMPILER_VERSION_MINOR
|
||||||
|
'.', COMPILER_VERSION_MINOR,
|
||||||
|
# ifdef COMPILER_VERSION_PATCH
|
||||||
|
'.', COMPILER_VERSION_PATCH,
|
||||||
|
# ifdef COMPILER_VERSION_TWEAK
|
||||||
|
'.', COMPILER_VERSION_TWEAK,
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
']','\0'};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Construct a string literal encoding the internal version number. */
|
||||||
|
#ifdef COMPILER_VERSION_INTERNAL
|
||||||
|
char const info_version_internal[] = {
|
||||||
|
'I', 'N', 'F', 'O', ':',
|
||||||
|
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
|
||||||
|
'i','n','t','e','r','n','a','l','[',
|
||||||
|
COMPILER_VERSION_INTERNAL,']','\0'};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Construct a string literal encoding the version number components. */
|
||||||
|
#ifdef SIMULATE_VERSION_MAJOR
|
||||||
|
char const info_simulate_version[] = {
|
||||||
|
'I', 'N', 'F', 'O', ':',
|
||||||
|
's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
|
||||||
|
SIMULATE_VERSION_MAJOR,
|
||||||
|
# ifdef SIMULATE_VERSION_MINOR
|
||||||
|
'.', SIMULATE_VERSION_MINOR,
|
||||||
|
# ifdef SIMULATE_VERSION_PATCH
|
||||||
|
'.', SIMULATE_VERSION_PATCH,
|
||||||
|
# ifdef SIMULATE_VERSION_TWEAK
|
||||||
|
'.', SIMULATE_VERSION_TWEAK,
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
']','\0'};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Construct the string literal in pieces to prevent the source from
|
||||||
|
getting matched. Store it in a pointer rather than an array
|
||||||
|
because some compilers will just produce instructions to fill the
|
||||||
|
array rather than assigning a pointer to a static array. */
|
||||||
|
char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
|
||||||
|
char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
|
||||||
|
# if defined(__INTEL_CXX11_MODE__)
|
||||||
|
# if defined(__cpp_aggregate_nsdmi)
|
||||||
|
# define CXX_STD 201402L
|
||||||
|
# else
|
||||||
|
# define CXX_STD 201103L
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define CXX_STD 199711L
|
||||||
|
# endif
|
||||||
|
#elif defined(_MSC_VER) && defined(_MSVC_LANG)
|
||||||
|
# define CXX_STD _MSVC_LANG
|
||||||
|
#else
|
||||||
|
# define CXX_STD __cplusplus
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const char* info_language_dialect_default = "INFO" ":" "dialect_default["
|
||||||
|
#if CXX_STD > 202002L
|
||||||
|
"23"
|
||||||
|
#elif CXX_STD > 201703L
|
||||||
|
"20"
|
||||||
|
#elif CXX_STD >= 201703L
|
||||||
|
"17"
|
||||||
|
#elif CXX_STD >= 201402L
|
||||||
|
"14"
|
||||||
|
#elif CXX_STD >= 201103L
|
||||||
|
"11"
|
||||||
|
#else
|
||||||
|
"98"
|
||||||
|
#endif
|
||||||
|
"]";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
int require = 0;
|
||||||
|
require += info_compiler[argc];
|
||||||
|
require += info_platform[argc];
|
||||||
|
#ifdef COMPILER_VERSION_MAJOR
|
||||||
|
require += info_version[argc];
|
||||||
|
#endif
|
||||||
|
#ifdef COMPILER_VERSION_INTERNAL
|
||||||
|
require += info_version_internal[argc];
|
||||||
|
#endif
|
||||||
|
#ifdef SIMULATE_ID
|
||||||
|
require += info_simulate[argc];
|
||||||
|
#endif
|
||||||
|
#ifdef SIMULATE_VERSION_MAJOR
|
||||||
|
require += info_simulate_version[argc];
|
||||||
|
#endif
|
||||||
|
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
|
||||||
|
require += info_cray[argc];
|
||||||
|
#endif
|
||||||
|
require += info_language_dialect_default[argc];
|
||||||
|
(void)argv;
|
||||||
|
return require;
|
||||||
|
}
|
||||||
BIN
cmake-build-debug/CMakeFiles/3.20.2/CompilerIdCXX/a.out
Executable file
BIN
cmake-build-debug/CMakeFiles/3.20.2/CompilerIdCXX/a.out
Executable file
Binary file not shown.
16
cmake-build-debug/CMakeFiles/CMakeDirectoryInformation.cmake
Normal file
16
cmake-build-debug/CMakeFiles/CMakeDirectoryInformation.cmake
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.20
|
||||||
|
|
||||||
|
# Relative path conversion top directories.
|
||||||
|
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/ivan/ivan/git/work_drivecast2/SLAM/dso")
|
||||||
|
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug")
|
||||||
|
|
||||||
|
# Force unix paths in dependencies.
|
||||||
|
set(CMAKE_FORCE_UNIX_PATHS 1)
|
||||||
|
|
||||||
|
|
||||||
|
# The C and CXX include file regular expressions for this directory.
|
||||||
|
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
|
||||||
|
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
|
||||||
|
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
|
||||||
|
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
|
||||||
60
cmake-build-debug/CMakeFiles/CMakeError.log
Normal file
60
cmake-build-debug/CMakeFiles/CMakeError.log
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD failed with the following output:
|
||||||
|
Change Dir: /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp
|
||||||
|
|
||||||
|
Run Build Command(s):/usr/bin/make -f Makefile cmTC_2610f/fast && /usr/bin/make -f CMakeFiles/cmTC_2610f.dir/build.make CMakeFiles/cmTC_2610f.dir/build
|
||||||
|
make[1]: Entering directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
Building C object CMakeFiles/cmTC_2610f.dir/src.c.o
|
||||||
|
/usr/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -o CMakeFiles/cmTC_2610f.dir/src.c.o -c /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp/src.c
|
||||||
|
Linking C executable cmTC_2610f
|
||||||
|
/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2610f.dir/link.txt --verbose=1
|
||||||
|
/usr/bin/cc -rdynamic CMakeFiles/cmTC_2610f.dir/src.c.o -o cmTC_2610f
|
||||||
|
/usr/bin/ld: CMakeFiles/cmTC_2610f.dir/src.c.o: in function `main':
|
||||||
|
src.c:(.text+0x46): undefined reference to `pthread_create'
|
||||||
|
/usr/bin/ld: src.c:(.text+0x52): undefined reference to `pthread_detach'
|
||||||
|
/usr/bin/ld: src.c:(.text+0x5e): undefined reference to `pthread_cancel'
|
||||||
|
/usr/bin/ld: src.c:(.text+0x6f): undefined reference to `pthread_join'
|
||||||
|
collect2: error: ld returned 1 exit status
|
||||||
|
make[1]: *** [CMakeFiles/cmTC_2610f.dir/build.make:99: cmTC_2610f] Error 1
|
||||||
|
make[1]: Leaving directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
make: *** [Makefile:127: cmTC_2610f/fast] Error 2
|
||||||
|
|
||||||
|
|
||||||
|
Source file was:
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
|
static void* test_func(void* data)
|
||||||
|
{
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
pthread_t thread;
|
||||||
|
pthread_create(&thread, NULL, test_func, NULL);
|
||||||
|
pthread_detach(thread);
|
||||||
|
pthread_cancel(thread);
|
||||||
|
pthread_join(thread, NULL);
|
||||||
|
pthread_atfork(NULL, NULL, NULL);
|
||||||
|
pthread_exit(NULL);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Determining if the function pthread_create exists in the pthreads failed with the following output:
|
||||||
|
Change Dir: /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp
|
||||||
|
|
||||||
|
Run Build Command(s):/usr/bin/make -f Makefile cmTC_ef6ea/fast && /usr/bin/make -f CMakeFiles/cmTC_ef6ea.dir/build.make CMakeFiles/cmTC_ef6ea.dir/build
|
||||||
|
make[1]: Entering directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
Building C object CMakeFiles/cmTC_ef6ea.dir/CheckFunctionExists.c.o
|
||||||
|
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -o CMakeFiles/cmTC_ef6ea.dir/CheckFunctionExists.c.o -c /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CheckFunctionExists.c
|
||||||
|
Linking C executable cmTC_ef6ea
|
||||||
|
/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ef6ea.dir/link.txt --verbose=1
|
||||||
|
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -rdynamic CMakeFiles/cmTC_ef6ea.dir/CheckFunctionExists.c.o -o cmTC_ef6ea -lpthreads
|
||||||
|
/usr/bin/ld: cannot find -lpthreads
|
||||||
|
collect2: error: ld returned 1 exit status
|
||||||
|
make[1]: *** [CMakeFiles/cmTC_ef6ea.dir/build.make:99: cmTC_ef6ea] Error 1
|
||||||
|
make[1]: Leaving directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
make: *** [Makefile:127: cmTC_ef6ea/fast] Error 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
471
cmake-build-debug/CMakeFiles/CMakeOutput.log
Normal file
471
cmake-build-debug/CMakeFiles/CMakeOutput.log
Normal file
@@ -0,0 +1,471 @@
|
|||||||
|
The system is: Linux - 5.11.0-43-generic - x86_64
|
||||||
|
Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
|
||||||
|
Compiler: /usr/bin/cc
|
||||||
|
Build flags:
|
||||||
|
Id flags:
|
||||||
|
|
||||||
|
The output was:
|
||||||
|
0
|
||||||
|
|
||||||
|
|
||||||
|
Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out"
|
||||||
|
|
||||||
|
The C compiler identification is GNU, found in "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/3.20.2/CompilerIdC/a.out"
|
||||||
|
|
||||||
|
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
|
||||||
|
Compiler: /usr/bin/c++
|
||||||
|
Build flags:
|
||||||
|
Id flags:
|
||||||
|
|
||||||
|
The output was:
|
||||||
|
0
|
||||||
|
|
||||||
|
|
||||||
|
Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"
|
||||||
|
|
||||||
|
The CXX compiler identification is GNU, found in "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/3.20.2/CompilerIdCXX/a.out"
|
||||||
|
|
||||||
|
Detecting C compiler ABI info compiled with the following output:
|
||||||
|
Change Dir: /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp
|
||||||
|
|
||||||
|
Run Build Command(s):/usr/bin/make -f Makefile cmTC_c62d8/fast && /usr/bin/make -f CMakeFiles/cmTC_c62d8.dir/build.make CMakeFiles/cmTC_c62d8.dir/build
|
||||||
|
make[1]: Entering directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
Building C object CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o
|
||||||
|
/usr/bin/cc -v -o CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o -c /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCCompilerABI.c
|
||||||
|
Using built-in specs.
|
||||||
|
COLLECT_GCC=/usr/bin/cc
|
||||||
|
OFFLOAD_TARGET_NAMES=nvptx-none:hsa
|
||||||
|
OFFLOAD_TARGET_DEFAULT=1
|
||||||
|
Target: x86_64-linux-gnu
|
||||||
|
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
|
||||||
|
Thread model: posix
|
||||||
|
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
|
||||||
|
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/9/cc1 -quiet -v -imultiarch x86_64-linux-gnu /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cctBTZNR.s
|
||||||
|
GNU C17 (Ubuntu 9.3.0-17ubuntu1~20.04) version 9.3.0 (x86_64-linux-gnu)
|
||||||
|
compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP
|
||||||
|
|
||||||
|
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
|
||||||
|
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
|
||||||
|
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"
|
||||||
|
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"
|
||||||
|
#include "..." search starts here:
|
||||||
|
#include <...> search starts here:
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/9/include
|
||||||
|
/usr/local/include
|
||||||
|
/usr/include/x86_64-linux-gnu
|
||||||
|
/usr/include
|
||||||
|
End of search list.
|
||||||
|
GNU C17 (Ubuntu 9.3.0-17ubuntu1~20.04) version 9.3.0 (x86_64-linux-gnu)
|
||||||
|
compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP
|
||||||
|
|
||||||
|
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
|
||||||
|
Compiler executable checksum: bbf13931d8de1abe14040c9909cb6969
|
||||||
|
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'
|
||||||
|
as -v --64 -o CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o /tmp/cctBTZNR.s
|
||||||
|
GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34
|
||||||
|
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/
|
||||||
|
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/
|
||||||
|
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'
|
||||||
|
Linking C executable cmTC_c62d8
|
||||||
|
/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c62d8.dir/link.txt --verbose=1
|
||||||
|
/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o -o cmTC_c62d8
|
||||||
|
Using built-in specs.
|
||||||
|
COLLECT_GCC=/usr/bin/cc
|
||||||
|
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper
|
||||||
|
OFFLOAD_TARGET_NAMES=nvptx-none:hsa
|
||||||
|
OFFLOAD_TARGET_DEFAULT=1
|
||||||
|
Target: x86_64-linux-gnu
|
||||||
|
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
|
||||||
|
Thread model: posix
|
||||||
|
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
|
||||||
|
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/
|
||||||
|
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/
|
||||||
|
COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_c62d8' '-mtune=generic' '-march=x86-64'
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccUZshnm.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_c62d8 /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o
|
||||||
|
COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_c62d8' '-mtune=generic' '-march=x86-64'
|
||||||
|
make[1]: Leaving directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Parsed C implicit include dir info from above output: rv=done
|
||||||
|
found start of include info
|
||||||
|
found start of implicit include info
|
||||||
|
add: [/usr/lib/gcc/x86_64-linux-gnu/9/include]
|
||||||
|
add: [/usr/local/include]
|
||||||
|
add: [/usr/include/x86_64-linux-gnu]
|
||||||
|
add: [/usr/include]
|
||||||
|
end of search list found
|
||||||
|
collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/9/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/9/include]
|
||||||
|
collapse include dir [/usr/local/include] ==> [/usr/local/include]
|
||||||
|
collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu]
|
||||||
|
collapse include dir [/usr/include] ==> [/usr/include]
|
||||||
|
implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include]
|
||||||
|
|
||||||
|
|
||||||
|
Parsed C implicit link information from above output:
|
||||||
|
link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)]
|
||||||
|
ignore line: [Change Dir: /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp]
|
||||||
|
ignore line: []
|
||||||
|
ignore line: [Run Build Command(s):/usr/bin/make -f Makefile cmTC_c62d8/fast && /usr/bin/make -f CMakeFiles/cmTC_c62d8.dir/build.make CMakeFiles/cmTC_c62d8.dir/build]
|
||||||
|
ignore line: [make[1]: Entering directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp']
|
||||||
|
ignore line: [Building C object CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o]
|
||||||
|
ignore line: [/usr/bin/cc -v -o CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o -c /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCCompilerABI.c]
|
||||||
|
ignore line: [Using built-in specs.]
|
||||||
|
ignore line: [COLLECT_GCC=/usr/bin/cc]
|
||||||
|
ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa]
|
||||||
|
ignore line: [OFFLOAD_TARGET_DEFAULT=1]
|
||||||
|
ignore line: [Target: x86_64-linux-gnu]
|
||||||
|
ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]
|
||||||
|
ignore line: [Thread model: posix]
|
||||||
|
ignore line: [gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) ]
|
||||||
|
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64']
|
||||||
|
ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/cc1 -quiet -v -imultiarch x86_64-linux-gnu /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cctBTZNR.s]
|
||||||
|
ignore line: [GNU C17 (Ubuntu 9.3.0-17ubuntu1~20.04) version 9.3.0 (x86_64-linux-gnu)]
|
||||||
|
ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP]
|
||||||
|
ignore line: []
|
||||||
|
ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
|
||||||
|
ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"]
|
||||||
|
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"]
|
||||||
|
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"]
|
||||||
|
ignore line: [#include "..." search starts here:]
|
||||||
|
ignore line: [#include <...> search starts here:]
|
||||||
|
ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/include]
|
||||||
|
ignore line: [ /usr/local/include]
|
||||||
|
ignore line: [ /usr/include/x86_64-linux-gnu]
|
||||||
|
ignore line: [ /usr/include]
|
||||||
|
ignore line: [End of search list.]
|
||||||
|
ignore line: [GNU C17 (Ubuntu 9.3.0-17ubuntu1~20.04) version 9.3.0 (x86_64-linux-gnu)]
|
||||||
|
ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP]
|
||||||
|
ignore line: []
|
||||||
|
ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
|
||||||
|
ignore line: [Compiler executable checksum: bbf13931d8de1abe14040c9909cb6969]
|
||||||
|
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64']
|
||||||
|
ignore line: [ as -v --64 -o CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o /tmp/cctBTZNR.s]
|
||||||
|
ignore line: [GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34]
|
||||||
|
ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/]
|
||||||
|
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/]
|
||||||
|
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64']
|
||||||
|
ignore line: [Linking C executable cmTC_c62d8]
|
||||||
|
ignore line: [/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c62d8.dir/link.txt --verbose=1]
|
||||||
|
ignore line: [/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o -o cmTC_c62d8 ]
|
||||||
|
ignore line: [Using built-in specs.]
|
||||||
|
ignore line: [COLLECT_GCC=/usr/bin/cc]
|
||||||
|
ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper]
|
||||||
|
ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa]
|
||||||
|
ignore line: [OFFLOAD_TARGET_DEFAULT=1]
|
||||||
|
ignore line: [Target: x86_64-linux-gnu]
|
||||||
|
ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]
|
||||||
|
ignore line: [Thread model: posix]
|
||||||
|
ignore line: [gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) ]
|
||||||
|
ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/]
|
||||||
|
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/]
|
||||||
|
ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_c62d8' '-mtune=generic' '-march=x86-64']
|
||||||
|
link line: [ /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccUZshnm.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_c62d8 /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o]
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/collect2] ==> ignore
|
||||||
|
arg [-plugin] ==> ignore
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so] ==> ignore
|
||||||
|
arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] ==> ignore
|
||||||
|
arg [-plugin-opt=-fresolution=/tmp/ccUZshnm.res] ==> ignore
|
||||||
|
arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
|
||||||
|
arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
|
||||||
|
arg [-plugin-opt=-pass-through=-lc] ==> ignore
|
||||||
|
arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
|
||||||
|
arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
|
||||||
|
arg [--build-id] ==> ignore
|
||||||
|
arg [--eh-frame-hdr] ==> ignore
|
||||||
|
arg [-m] ==> ignore
|
||||||
|
arg [elf_x86_64] ==> ignore
|
||||||
|
arg [--hash-style=gnu] ==> ignore
|
||||||
|
arg [--as-needed] ==> ignore
|
||||||
|
arg [-export-dynamic] ==> ignore
|
||||||
|
arg [-dynamic-linker] ==> ignore
|
||||||
|
arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
|
||||||
|
arg [-pie] ==> ignore
|
||||||
|
arg [-znow] ==> ignore
|
||||||
|
arg [-zrelro] ==> ignore
|
||||||
|
arg [-o] ==> ignore
|
||||||
|
arg [cmTC_c62d8] ==> ignore
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o]
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o]
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o]
|
||||||
|
arg [-L/usr/lib/gcc/x86_64-linux-gnu/9] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9]
|
||||||
|
arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu]
|
||||||
|
arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib]
|
||||||
|
arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]
|
||||||
|
arg [-L/lib/../lib] ==> dir [/lib/../lib]
|
||||||
|
arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]
|
||||||
|
arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib]
|
||||||
|
arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..]
|
||||||
|
arg [CMakeFiles/cmTC_c62d8.dir/CMakeCCompilerABI.c.o] ==> ignore
|
||||||
|
arg [-lgcc] ==> lib [gcc]
|
||||||
|
arg [--push-state] ==> ignore
|
||||||
|
arg [--as-needed] ==> ignore
|
||||||
|
arg [-lgcc_s] ==> lib [gcc_s]
|
||||||
|
arg [--pop-state] ==> ignore
|
||||||
|
arg [-lc] ==> lib [c]
|
||||||
|
arg [-lgcc] ==> lib [gcc]
|
||||||
|
arg [--push-state] ==> ignore
|
||||||
|
arg [--as-needed] ==> ignore
|
||||||
|
arg [-lgcc_s] ==> lib [gcc_s]
|
||||||
|
arg [--pop-state] ==> ignore
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o]
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o]
|
||||||
|
collapse obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o]
|
||||||
|
collapse obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o]
|
||||||
|
collapse obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o]
|
||||||
|
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9] ==> [/usr/lib/gcc/x86_64-linux-gnu/9]
|
||||||
|
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
|
||||||
|
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> [/usr/lib]
|
||||||
|
collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]
|
||||||
|
collapse library dir [/lib/../lib] ==> [/lib]
|
||||||
|
collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
|
||||||
|
collapse library dir [/usr/lib/../lib] ==> [/usr/lib]
|
||||||
|
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> [/usr/lib]
|
||||||
|
implicit libs: [gcc;gcc_s;c;gcc;gcc_s]
|
||||||
|
implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o]
|
||||||
|
implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib]
|
||||||
|
implicit fwks: []
|
||||||
|
|
||||||
|
|
||||||
|
Detecting CXX compiler ABI info compiled with the following output:
|
||||||
|
Change Dir: /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp
|
||||||
|
|
||||||
|
Run Build Command(s):/usr/bin/make -f Makefile cmTC_53d5d/fast && /usr/bin/make -f CMakeFiles/cmTC_53d5d.dir/build.make CMakeFiles/cmTC_53d5d.dir/build
|
||||||
|
make[1]: Entering directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
Building CXX object CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o
|
||||||
|
/usr/bin/c++ -v -o CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o -c /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp
|
||||||
|
Using built-in specs.
|
||||||
|
COLLECT_GCC=/usr/bin/c++
|
||||||
|
OFFLOAD_TARGET_NAMES=nvptx-none:hsa
|
||||||
|
OFFLOAD_TARGET_DEFAULT=1
|
||||||
|
Target: x86_64-linux-gnu
|
||||||
|
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
|
||||||
|
Thread model: posix
|
||||||
|
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
|
||||||
|
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/9/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cczXu45R.s
|
||||||
|
GNU C++14 (Ubuntu 9.3.0-17ubuntu1~20.04) version 9.3.0 (x86_64-linux-gnu)
|
||||||
|
compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP
|
||||||
|
|
||||||
|
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
|
||||||
|
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/9"
|
||||||
|
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
|
||||||
|
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"
|
||||||
|
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"
|
||||||
|
#include "..." search starts here:
|
||||||
|
#include <...> search starts here:
|
||||||
|
/usr/include/c++/9
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/9
|
||||||
|
/usr/include/c++/9/backward
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/9/include
|
||||||
|
/usr/local/include
|
||||||
|
/usr/include/x86_64-linux-gnu
|
||||||
|
/usr/include
|
||||||
|
End of search list.
|
||||||
|
GNU C++14 (Ubuntu 9.3.0-17ubuntu1~20.04) version 9.3.0 (x86_64-linux-gnu)
|
||||||
|
compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP
|
||||||
|
|
||||||
|
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
|
||||||
|
Compiler executable checksum: 466f818abe2f30ba03783f22bd12d815
|
||||||
|
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
|
||||||
|
as -v --64 -o CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o /tmp/cczXu45R.s
|
||||||
|
GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34
|
||||||
|
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/
|
||||||
|
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/
|
||||||
|
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
|
||||||
|
Linking CXX executable cmTC_53d5d
|
||||||
|
/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E cmake_link_script CMakeFiles/cmTC_53d5d.dir/link.txt --verbose=1
|
||||||
|
/usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_53d5d
|
||||||
|
Using built-in specs.
|
||||||
|
COLLECT_GCC=/usr/bin/c++
|
||||||
|
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper
|
||||||
|
OFFLOAD_TARGET_NAMES=nvptx-none:hsa
|
||||||
|
OFFLOAD_TARGET_DEFAULT=1
|
||||||
|
Target: x86_64-linux-gnu
|
||||||
|
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
|
||||||
|
Thread model: posix
|
||||||
|
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
|
||||||
|
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/
|
||||||
|
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/
|
||||||
|
COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_53d5d' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccvC8s6i.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_53d5d /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o
|
||||||
|
COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_53d5d' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
|
||||||
|
make[1]: Leaving directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Parsed CXX implicit include dir info from above output: rv=done
|
||||||
|
found start of include info
|
||||||
|
found start of implicit include info
|
||||||
|
add: [/usr/include/c++/9]
|
||||||
|
add: [/usr/include/x86_64-linux-gnu/c++/9]
|
||||||
|
add: [/usr/include/c++/9/backward]
|
||||||
|
add: [/usr/lib/gcc/x86_64-linux-gnu/9/include]
|
||||||
|
add: [/usr/local/include]
|
||||||
|
add: [/usr/include/x86_64-linux-gnu]
|
||||||
|
add: [/usr/include]
|
||||||
|
end of search list found
|
||||||
|
collapse include dir [/usr/include/c++/9] ==> [/usr/include/c++/9]
|
||||||
|
collapse include dir [/usr/include/x86_64-linux-gnu/c++/9] ==> [/usr/include/x86_64-linux-gnu/c++/9]
|
||||||
|
collapse include dir [/usr/include/c++/9/backward] ==> [/usr/include/c++/9/backward]
|
||||||
|
collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/9/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/9/include]
|
||||||
|
collapse include dir [/usr/local/include] ==> [/usr/local/include]
|
||||||
|
collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu]
|
||||||
|
collapse include dir [/usr/include] ==> [/usr/include]
|
||||||
|
implicit include dirs: [/usr/include/c++/9;/usr/include/x86_64-linux-gnu/c++/9;/usr/include/c++/9/backward;/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include]
|
||||||
|
|
||||||
|
|
||||||
|
Parsed CXX implicit link information from above output:
|
||||||
|
link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)]
|
||||||
|
ignore line: [Change Dir: /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp]
|
||||||
|
ignore line: []
|
||||||
|
ignore line: [Run Build Command(s):/usr/bin/make -f Makefile cmTC_53d5d/fast && /usr/bin/make -f CMakeFiles/cmTC_53d5d.dir/build.make CMakeFiles/cmTC_53d5d.dir/build]
|
||||||
|
ignore line: [make[1]: Entering directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp']
|
||||||
|
ignore line: [Building CXX object CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o]
|
||||||
|
ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o -c /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp]
|
||||||
|
ignore line: [Using built-in specs.]
|
||||||
|
ignore line: [COLLECT_GCC=/usr/bin/c++]
|
||||||
|
ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa]
|
||||||
|
ignore line: [OFFLOAD_TARGET_DEFAULT=1]
|
||||||
|
ignore line: [Target: x86_64-linux-gnu]
|
||||||
|
ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]
|
||||||
|
ignore line: [Thread model: posix]
|
||||||
|
ignore line: [gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) ]
|
||||||
|
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64']
|
||||||
|
ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cczXu45R.s]
|
||||||
|
ignore line: [GNU C++14 (Ubuntu 9.3.0-17ubuntu1~20.04) version 9.3.0 (x86_64-linux-gnu)]
|
||||||
|
ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP]
|
||||||
|
ignore line: []
|
||||||
|
ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
|
||||||
|
ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/9"]
|
||||||
|
ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"]
|
||||||
|
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"]
|
||||||
|
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"]
|
||||||
|
ignore line: [#include "..." search starts here:]
|
||||||
|
ignore line: [#include <...> search starts here:]
|
||||||
|
ignore line: [ /usr/include/c++/9]
|
||||||
|
ignore line: [ /usr/include/x86_64-linux-gnu/c++/9]
|
||||||
|
ignore line: [ /usr/include/c++/9/backward]
|
||||||
|
ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/include]
|
||||||
|
ignore line: [ /usr/local/include]
|
||||||
|
ignore line: [ /usr/include/x86_64-linux-gnu]
|
||||||
|
ignore line: [ /usr/include]
|
||||||
|
ignore line: [End of search list.]
|
||||||
|
ignore line: [GNU C++14 (Ubuntu 9.3.0-17ubuntu1~20.04) version 9.3.0 (x86_64-linux-gnu)]
|
||||||
|
ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP]
|
||||||
|
ignore line: []
|
||||||
|
ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
|
||||||
|
ignore line: [Compiler executable checksum: 466f818abe2f30ba03783f22bd12d815]
|
||||||
|
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64']
|
||||||
|
ignore line: [ as -v --64 -o CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o /tmp/cczXu45R.s]
|
||||||
|
ignore line: [GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34]
|
||||||
|
ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/]
|
||||||
|
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/]
|
||||||
|
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64']
|
||||||
|
ignore line: [Linking CXX executable cmTC_53d5d]
|
||||||
|
ignore line: [/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E cmake_link_script CMakeFiles/cmTC_53d5d.dir/link.txt --verbose=1]
|
||||||
|
ignore line: [/usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_53d5d ]
|
||||||
|
ignore line: [Using built-in specs.]
|
||||||
|
ignore line: [COLLECT_GCC=/usr/bin/c++]
|
||||||
|
ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper]
|
||||||
|
ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa]
|
||||||
|
ignore line: [OFFLOAD_TARGET_DEFAULT=1]
|
||||||
|
ignore line: [Target: x86_64-linux-gnu]
|
||||||
|
ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]
|
||||||
|
ignore line: [Thread model: posix]
|
||||||
|
ignore line: [gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) ]
|
||||||
|
ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/]
|
||||||
|
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/]
|
||||||
|
ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_53d5d' '-shared-libgcc' '-mtune=generic' '-march=x86-64']
|
||||||
|
link line: [ /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccvC8s6i.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_53d5d /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o]
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/collect2] ==> ignore
|
||||||
|
arg [-plugin] ==> ignore
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so] ==> ignore
|
||||||
|
arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] ==> ignore
|
||||||
|
arg [-plugin-opt=-fresolution=/tmp/ccvC8s6i.res] ==> ignore
|
||||||
|
arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
|
||||||
|
arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
|
||||||
|
arg [-plugin-opt=-pass-through=-lc] ==> ignore
|
||||||
|
arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
|
||||||
|
arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
|
||||||
|
arg [--build-id] ==> ignore
|
||||||
|
arg [--eh-frame-hdr] ==> ignore
|
||||||
|
arg [-m] ==> ignore
|
||||||
|
arg [elf_x86_64] ==> ignore
|
||||||
|
arg [--hash-style=gnu] ==> ignore
|
||||||
|
arg [--as-needed] ==> ignore
|
||||||
|
arg [-export-dynamic] ==> ignore
|
||||||
|
arg [-dynamic-linker] ==> ignore
|
||||||
|
arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
|
||||||
|
arg [-pie] ==> ignore
|
||||||
|
arg [-znow] ==> ignore
|
||||||
|
arg [-zrelro] ==> ignore
|
||||||
|
arg [-o] ==> ignore
|
||||||
|
arg [cmTC_53d5d] ==> ignore
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o]
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o]
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o]
|
||||||
|
arg [-L/usr/lib/gcc/x86_64-linux-gnu/9] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9]
|
||||||
|
arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu]
|
||||||
|
arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib]
|
||||||
|
arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]
|
||||||
|
arg [-L/lib/../lib] ==> dir [/lib/../lib]
|
||||||
|
arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]
|
||||||
|
arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib]
|
||||||
|
arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..]
|
||||||
|
arg [CMakeFiles/cmTC_53d5d.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore
|
||||||
|
arg [-lstdc++] ==> lib [stdc++]
|
||||||
|
arg [-lm] ==> lib [m]
|
||||||
|
arg [-lgcc_s] ==> lib [gcc_s]
|
||||||
|
arg [-lgcc] ==> lib [gcc]
|
||||||
|
arg [-lc] ==> lib [c]
|
||||||
|
arg [-lgcc_s] ==> lib [gcc_s]
|
||||||
|
arg [-lgcc] ==> lib [gcc]
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o]
|
||||||
|
arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o]
|
||||||
|
collapse obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o]
|
||||||
|
collapse obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o]
|
||||||
|
collapse obj [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o]
|
||||||
|
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9] ==> [/usr/lib/gcc/x86_64-linux-gnu/9]
|
||||||
|
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
|
||||||
|
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> [/usr/lib]
|
||||||
|
collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]
|
||||||
|
collapse library dir [/lib/../lib] ==> [/lib]
|
||||||
|
collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
|
||||||
|
collapse library dir [/usr/lib/../lib] ==> [/usr/lib]
|
||||||
|
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> [/usr/lib]
|
||||||
|
implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc]
|
||||||
|
implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o]
|
||||||
|
implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib]
|
||||||
|
implicit fwks: []
|
||||||
|
|
||||||
|
|
||||||
|
Determining if the include file pthread.h exists passed with the following output:
|
||||||
|
Change Dir: /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp
|
||||||
|
|
||||||
|
Run Build Command(s):/usr/bin/make -f Makefile cmTC_7105f/fast && /usr/bin/make -f CMakeFiles/cmTC_7105f.dir/build.make CMakeFiles/cmTC_7105f.dir/build
|
||||||
|
make[1]: Entering directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
Building C object CMakeFiles/cmTC_7105f.dir/CheckIncludeFile.c.o
|
||||||
|
/usr/bin/cc -o CMakeFiles/cmTC_7105f.dir/CheckIncludeFile.c.o -c /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp/CheckIncludeFile.c
|
||||||
|
Linking C executable cmTC_7105f
|
||||||
|
/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7105f.dir/link.txt --verbose=1
|
||||||
|
/usr/bin/cc -rdynamic CMakeFiles/cmTC_7105f.dir/CheckIncludeFile.c.o -o cmTC_7105f
|
||||||
|
make[1]: Leaving directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Determining if the function pthread_create exists in the pthread passed with the following output:
|
||||||
|
Change Dir: /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp
|
||||||
|
|
||||||
|
Run Build Command(s):/usr/bin/make -f Makefile cmTC_0de57/fast && /usr/bin/make -f CMakeFiles/cmTC_0de57.dir/build.make CMakeFiles/cmTC_0de57.dir/build
|
||||||
|
make[1]: Entering directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
Building C object CMakeFiles/cmTC_0de57.dir/CheckFunctionExists.c.o
|
||||||
|
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -o CMakeFiles/cmTC_0de57.dir/CheckFunctionExists.c.o -c /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CheckFunctionExists.c
|
||||||
|
Linking C executable cmTC_0de57
|
||||||
|
/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0de57.dir/link.txt --verbose=1
|
||||||
|
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -rdynamic CMakeFiles/cmTC_0de57.dir/CheckFunctionExists.c.o -o cmTC_0de57 -lpthread
|
||||||
|
make[1]: Leaving directory '/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/CMakeTmp'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
87
cmake-build-debug/CMakeFiles/Makefile.cmake
Normal file
87
cmake-build-debug/CMakeFiles/Makefile.cmake
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.20
|
||||||
|
|
||||||
|
# The generator used is:
|
||||||
|
set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles")
|
||||||
|
|
||||||
|
# The top level Makefile was generated from the following files:
|
||||||
|
set(CMAKE_MAKEFILE_DEPENDS
|
||||||
|
"CMakeCache.txt"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/PangolinConfig.cmake"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/PangolinConfigVersion.cmake"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/PangolinTargets.cmake"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/OpenCVConfig-version.cmake"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/OpenCVConfig.cmake"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/OpenCVModules.cmake"
|
||||||
|
"../CMakeLists.txt"
|
||||||
|
"CMakeFiles/3.20.2/CMakeCCompiler.cmake"
|
||||||
|
"CMakeFiles/3.20.2/CMakeCXXCompiler.cmake"
|
||||||
|
"CMakeFiles/3.20.2/CMakeSystem.cmake"
|
||||||
|
"../cmake/FindEigen3.cmake"
|
||||||
|
"../cmake/FindLibZip.cmake"
|
||||||
|
"../cmake/FindSuiteParse.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCInformation.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCXXInformation.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeCommonLanguageInclude.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeFindCodeBlocks.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeFindDependencyMacro.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeGenericSystem.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeInitializeConfigs.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeLanguageInformation.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeSystemSpecificInformation.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CMakeSystemSpecificInitialize.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CheckCSourceCompiles.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CheckIncludeFile.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/CheckLibraryExists.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/Compiler/GNU-C.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/Compiler/GNU-CXX.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/Compiler/GNU.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/FindBoost.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/FindPackageMessage.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/FindPkgConfig.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/FindThreads.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/Internal/CheckSourceCompiles.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/Platform/Linux-GNU-C.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/Platform/Linux-GNU-CXX.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/Platform/Linux-GNU.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/Platform/Linux.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/Platform/UnixPaths.cmake"
|
||||||
|
"/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/ProcessorCount.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfigVersion.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/BoostDetectToolset-1.71.0.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/boost_atomic-config-version.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/boost_atomic-config.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant-shared.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant-static.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_headers-1.71.0/boost_headers-config-version.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_headers-1.71.0/boost_headers-config.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/boost_system-config-version.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/boost_system-config.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant-shared.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant-static.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/boost_thread-config-version.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/boost_thread-config.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant-shared.cmake"
|
||||||
|
"/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant-static.cmake"
|
||||||
|
)
|
||||||
|
|
||||||
|
# The corresponding makefile is:
|
||||||
|
set(CMAKE_MAKEFILE_OUTPUTS
|
||||||
|
"Makefile"
|
||||||
|
"CMakeFiles/cmake.check_cache"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Byproducts of CMake generate step:
|
||||||
|
set(CMAKE_MAKEFILE_PRODUCTS
|
||||||
|
"CMakeFiles/CMakeDirectoryInformation.cmake"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Dependency information for all targets:
|
||||||
|
set(CMAKE_DEPEND_INFO_FILES
|
||||||
|
"CMakeFiles/dso_dataset.dir/DependInfo.cmake"
|
||||||
|
"CMakeFiles/dso.dir/DependInfo.cmake"
|
||||||
|
)
|
||||||
140
cmake-build-debug/CMakeFiles/Makefile2
Normal file
140
cmake-build-debug/CMakeFiles/Makefile2
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.20
|
||||||
|
|
||||||
|
# Default target executed when no arguments are given to make.
|
||||||
|
default_target: all
|
||||||
|
.PHONY : default_target
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets provided by cmake.
|
||||||
|
|
||||||
|
# Disable implicit rules so canonical targets will work.
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : %,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : SCCS/s.%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : s.%
|
||||||
|
|
||||||
|
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||||
|
|
||||||
|
# Command-line flag to silence nested $(MAKE).
|
||||||
|
$(VERBOSE)MAKESILENT = -s
|
||||||
|
|
||||||
|
#Suppress display of executed commands.
|
||||||
|
$(VERBOSE).SILENT:
|
||||||
|
|
||||||
|
# A target that is always out of date.
|
||||||
|
cmake_force:
|
||||||
|
.PHONY : cmake_force
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Set environment variables for the build.
|
||||||
|
|
||||||
|
# The shell in which to execute make rules.
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
# The CMake executable.
|
||||||
|
CMAKE_COMMAND = /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake
|
||||||
|
|
||||||
|
# The command to remove a file.
|
||||||
|
RM = /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E rm -f
|
||||||
|
|
||||||
|
# Escaping for special characters.
|
||||||
|
EQUALS = =
|
||||||
|
|
||||||
|
# The top-level source directory on which CMake was run.
|
||||||
|
CMAKE_SOURCE_DIR = /home/ivan/ivan/git/work_drivecast2/SLAM/dso
|
||||||
|
|
||||||
|
# The top-level build directory on which CMake was run.
|
||||||
|
CMAKE_BINARY_DIR = /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Directory level rules for the build root directory
|
||||||
|
|
||||||
|
# The main recursive "all" target.
|
||||||
|
all: CMakeFiles/dso_dataset.dir/all
|
||||||
|
all: CMakeFiles/dso.dir/all
|
||||||
|
.PHONY : all
|
||||||
|
|
||||||
|
# The main recursive "preinstall" target.
|
||||||
|
preinstall:
|
||||||
|
.PHONY : preinstall
|
||||||
|
|
||||||
|
# The main recursive "clean" target.
|
||||||
|
clean: CMakeFiles/dso_dataset.dir/clean
|
||||||
|
clean: CMakeFiles/dso.dir/clean
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Target rules for target CMakeFiles/dso_dataset.dir
|
||||||
|
|
||||||
|
# All Build rule for target.
|
||||||
|
CMakeFiles/dso_dataset.dir/all: CMakeFiles/dso.dir/all
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso_dataset.dir/build.make CMakeFiles/dso_dataset.dir/depend
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso_dataset.dir/build.make CMakeFiles/dso_dataset.dir/build
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles --progress-num=24,25 "Built target dso_dataset"
|
||||||
|
.PHONY : CMakeFiles/dso_dataset.dir/all
|
||||||
|
|
||||||
|
# Build rule for subdir invocation for target.
|
||||||
|
CMakeFiles/dso_dataset.dir/rule: cmake_check_build_system
|
||||||
|
$(CMAKE_COMMAND) -E cmake_progress_start /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles 25
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/dso_dataset.dir/all
|
||||||
|
$(CMAKE_COMMAND) -E cmake_progress_start /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles 0
|
||||||
|
.PHONY : CMakeFiles/dso_dataset.dir/rule
|
||||||
|
|
||||||
|
# Convenience name for target.
|
||||||
|
dso_dataset: CMakeFiles/dso_dataset.dir/rule
|
||||||
|
.PHONY : dso_dataset
|
||||||
|
|
||||||
|
# clean rule for target.
|
||||||
|
CMakeFiles/dso_dataset.dir/clean:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso_dataset.dir/build.make CMakeFiles/dso_dataset.dir/clean
|
||||||
|
.PHONY : CMakeFiles/dso_dataset.dir/clean
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Target rules for target CMakeFiles/dso.dir
|
||||||
|
|
||||||
|
# All Build rule for target.
|
||||||
|
CMakeFiles/dso.dir/all:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/depend
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/build
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 "Built target dso"
|
||||||
|
.PHONY : CMakeFiles/dso.dir/all
|
||||||
|
|
||||||
|
# Build rule for subdir invocation for target.
|
||||||
|
CMakeFiles/dso.dir/rule: cmake_check_build_system
|
||||||
|
$(CMAKE_COMMAND) -E cmake_progress_start /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles 23
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/dso.dir/all
|
||||||
|
$(CMAKE_COMMAND) -E cmake_progress_start /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles 0
|
||||||
|
.PHONY : CMakeFiles/dso.dir/rule
|
||||||
|
|
||||||
|
# Convenience name for target.
|
||||||
|
dso: CMakeFiles/dso.dir/rule
|
||||||
|
.PHONY : dso
|
||||||
|
|
||||||
|
# clean rule for target.
|
||||||
|
CMakeFiles/dso.dir/clean:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/clean
|
||||||
|
.PHONY : CMakeFiles/dso.dir/clean
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets to cleanup operation of make.
|
||||||
|
|
||||||
|
# Special rule to run CMake to check the build system integrity.
|
||||||
|
# No rule that depends on this can have commands that come from listfiles
|
||||||
|
# because they might be regenerated.
|
||||||
|
cmake_check_build_system:
|
||||||
|
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
|
||||||
|
.PHONY : cmake_check_build_system
|
||||||
|
|
||||||
4
cmake-build-debug/CMakeFiles/TargetDirectories.txt
Normal file
4
cmake-build-debug/CMakeFiles/TargetDirectories.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/rebuild_cache.dir
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso_dataset.dir
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/edit_cache.dir
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir
|
||||||
3
cmake-build-debug/CMakeFiles/clion-environment.txt
Normal file
3
cmake-build-debug/CMakeFiles/clion-environment.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
ToolSet: 1.0 (local)Options:
|
||||||
|
|
||||||
|
Options:
|
||||||
26
cmake-build-debug/CMakeFiles/clion-log.txt
Normal file
26
cmake-build-debug/CMakeFiles/clion-log.txt
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_DEPENDS_USE_COMPILER=FALSE -G "CodeBlocks - Unix Makefiles" /home/ivan/ivan/git/work_drivecast2/SLAM/dso
|
||||||
|
CMake Deprecation Warning at CMakeLists.txt:4 (CMAKE_MINIMUM_REQUIRED):
|
||||||
|
Compatibility with CMake < 2.8.12 will be removed from a future version of
|
||||||
|
CMake.
|
||||||
|
|
||||||
|
Update the VERSION argument <min> value or use a ...<max> suffix to tell
|
||||||
|
CMake that the project does not need compatibility with older versions.
|
||||||
|
|
||||||
|
|
||||||
|
CMake Warning (dev) at /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:438 (message):
|
||||||
|
The package name passed to `find_package_handle_standard_args` (LIBZIP)
|
||||||
|
does not match the name of the calling package (LibZip). This can lead to
|
||||||
|
problems in calling code that expects `find_package` result variables
|
||||||
|
(e.g., `_FOUND`) to follow a certain pattern.
|
||||||
|
Call Stack (most recent call first):
|
||||||
|
cmake/FindLibZip.cmake:24 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
|
||||||
|
CMakeLists.txt:21 (find_package)
|
||||||
|
This warning is for project developers. Use -Wno-dev to suppress it.
|
||||||
|
|
||||||
|
--- found PANGOLIN, compiling dso_pangolin library.
|
||||||
|
--- found OpenCV, compiling dso_opencv library.
|
||||||
|
--- found ziplib (1.1.1), compiling with zip capability.
|
||||||
|
--- compiling dso_dataset.
|
||||||
|
-- Configuring done
|
||||||
|
-- Generating done
|
||||||
|
-- Build files have been written to: /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug
|
||||||
1
cmake-build-debug/CMakeFiles/cmake.check_cache
Normal file
1
cmake-build-debug/CMakeFiles/cmake.check_cache
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# This file is generated by cmake for dependency checking of the CMakeCache.txt file
|
||||||
3694
cmake-build-debug/CMakeFiles/dso.dir/CXX.includecache
Normal file
3694
cmake-build-debug/CMakeFiles/dso.dir/CXX.includecache
Normal file
File diff suppressed because it is too large
Load Diff
84
cmake-build-debug/CMakeFiles/dso.dir/DependInfo.cmake
Normal file
84
cmake-build-debug/CMakeFiles/dso.dir/DependInfo.cmake
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
|
||||||
|
# Consider dependencies only in project.
|
||||||
|
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
|
||||||
|
|
||||||
|
# The set of languages for which implicit dependencies are needed:
|
||||||
|
set(CMAKE_DEPENDS_LANGUAGES
|
||||||
|
"CXX"
|
||||||
|
)
|
||||||
|
# The set of files for implicit dependencies of each language:
|
||||||
|
set(CMAKE_DEPENDS_CHECK_CXX
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/CoarseInitializer.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/CoarseInitializer.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/CoarseTracker.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/CoarseTracker.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystem.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/FullSystem.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystemDebugStuff.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/FullSystemDebugStuff.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystemMarginalize.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/FullSystemMarginalize.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystemOptPoint.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/FullSystemOptPoint.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystemOptimize.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/FullSystemOptimize.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/HessianBlocks.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/HessianBlocks.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/ImmaturePoint.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/ImmaturePoint.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/PixelSelector2.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/PixelSelector2.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/Residuals.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/FullSystem/Residuals.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/Pangolin/KeyFrameDisplay.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/Pangolin/PangolinDSOViewer.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/AccumulatedSCHessian.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedSCHessian.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/AccumulatedTopHessian.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedTopHessian.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/EnergyFunctional.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctional.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/EnergyFunctionalStructs.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctionalStructs.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/Undistort.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/util/Undistort.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/globalCalib.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/util/globalCalib.cpp.o"
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/settings.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/src/util/settings.cpp.o"
|
||||||
|
)
|
||||||
|
set(CMAKE_CXX_COMPILER_ID "GNU")
|
||||||
|
|
||||||
|
# Preprocessor definitions for this target.
|
||||||
|
set(CMAKE_TARGET_DEFINITIONS_CXX
|
||||||
|
"ENABLE_SSE"
|
||||||
|
"HAS_ZIPLIB=1"
|
||||||
|
)
|
||||||
|
|
||||||
|
# The include file search paths:
|
||||||
|
set(CMAKE_CXX_TARGET_INCLUDE_PATH
|
||||||
|
"../src"
|
||||||
|
"../thirdparty/Sophus"
|
||||||
|
"../thirdparty/sse2neon"
|
||||||
|
"/usr/include/eigen3"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include/opencv"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ml/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/photo/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/features2d/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgcodecs/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videoio/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/superres/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ts/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include"
|
||||||
|
"/usr/include/suitesparse"
|
||||||
|
)
|
||||||
|
|
||||||
|
# The set of dependency files which are needed:
|
||||||
|
set(CMAKE_DEPENDS_DEPENDENCY_FILES
|
||||||
|
)
|
||||||
|
|
||||||
|
# Targets to which this target links.
|
||||||
|
set(CMAKE_TARGET_LINKED_INFO_FILES
|
||||||
|
)
|
||||||
|
|
||||||
|
# Fortran module output directory.
|
||||||
|
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
||||||
31
cmake-build-debug/CMakeFiles/dso.dir/cmake_clean.cmake
Normal file
31
cmake-build-debug/CMakeFiles/dso.dir/cmake_clean.cmake
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
file(REMOVE_RECURSE
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/CoarseInitializer.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/CoarseTracker.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/FullSystem.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/FullSystemDebugStuff.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/FullSystemMarginalize.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/FullSystemOptPoint.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/FullSystemOptimize.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/HessianBlocks.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/ImmaturePoint.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/PixelSelector2.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/FullSystem/Residuals.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedSCHessian.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedTopHessian.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctional.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctionalStructs.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/util/Undistort.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/util/globalCalib.cpp.o"
|
||||||
|
"CMakeFiles/dso.dir/src/util/settings.cpp.o"
|
||||||
|
"lib/libdso.a"
|
||||||
|
"lib/libdso.pdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Per-language clean rules from dependency scanning.
|
||||||
|
foreach(lang CXX)
|
||||||
|
include(CMakeFiles/dso.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||||
|
endforeach()
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
file(REMOVE_RECURSE
|
||||||
|
"lib/libdso.a"
|
||||||
|
)
|
||||||
6835
cmake-build-debug/CMakeFiles/dso.dir/depend.internal
Normal file
6835
cmake-build-debug/CMakeFiles/dso.dir/depend.internal
Normal file
File diff suppressed because it is too large
Load Diff
6835
cmake-build-debug/CMakeFiles/dso.dir/depend.make
Normal file
6835
cmake-build-debug/CMakeFiles/dso.dir/depend.make
Normal file
File diff suppressed because it is too large
Load Diff
10
cmake-build-debug/CMakeFiles/dso.dir/flags.make
Normal file
10
cmake-build-debug/CMakeFiles/dso.dir/flags.make
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.20
|
||||||
|
|
||||||
|
# compile CXX with /usr/bin/c++
|
||||||
|
CXX_DEFINES = -DENABLE_SSE -DHAS_ZIPLIB=1
|
||||||
|
|
||||||
|
CXX_INCLUDES = -I/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src -I/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/Sophus -I/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/sse2neon -I/usr/include/eigen3 -I"/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include" -I"/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include/opencv" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ml/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/photo/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/features2d/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgcodecs/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videoio/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/superres/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ts/include" -I"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include" -I/usr/include/suitesparse
|
||||||
|
|
||||||
|
CXX_FLAGS = -O3 -g -std=c++0x -march=native -g
|
||||||
|
|
||||||
2
cmake-build-debug/CMakeFiles/dso.dir/link.txt
Normal file
2
cmake-build-debug/CMakeFiles/dso.dir/link.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/usr/bin/ar qc lib/libdso.a CMakeFiles/dso.dir/src/FullSystem/FullSystem.cpp.o CMakeFiles/dso.dir/src/FullSystem/FullSystemOptimize.cpp.o CMakeFiles/dso.dir/src/FullSystem/FullSystemOptPoint.cpp.o CMakeFiles/dso.dir/src/FullSystem/FullSystemDebugStuff.cpp.o CMakeFiles/dso.dir/src/FullSystem/FullSystemMarginalize.cpp.o CMakeFiles/dso.dir/src/FullSystem/Residuals.cpp.o CMakeFiles/dso.dir/src/FullSystem/CoarseTracker.cpp.o CMakeFiles/dso.dir/src/FullSystem/CoarseInitializer.cpp.o CMakeFiles/dso.dir/src/FullSystem/ImmaturePoint.cpp.o CMakeFiles/dso.dir/src/FullSystem/HessianBlocks.cpp.o CMakeFiles/dso.dir/src/FullSystem/PixelSelector2.cpp.o CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctional.cpp.o CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedTopHessian.cpp.o CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedSCHessian.cpp.o CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctionalStructs.cpp.o CMakeFiles/dso.dir/src/util/settings.cpp.o CMakeFiles/dso.dir/src/util/Undistort.cpp.o CMakeFiles/dso.dir/src/util/globalCalib.cpp.o CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.o CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.o CMakeFiles/dso.dir/src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.o CMakeFiles/dso.dir/src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.o
|
||||||
|
/usr/bin/ranlib lib/libdso.a
|
||||||
24
cmake-build-debug/CMakeFiles/dso.dir/progress.make
Normal file
24
cmake-build-debug/CMakeFiles/dso.dir/progress.make
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
CMAKE_PROGRESS_1 = 1
|
||||||
|
CMAKE_PROGRESS_2 = 2
|
||||||
|
CMAKE_PROGRESS_3 = 3
|
||||||
|
CMAKE_PROGRESS_4 = 4
|
||||||
|
CMAKE_PROGRESS_5 = 5
|
||||||
|
CMAKE_PROGRESS_6 = 6
|
||||||
|
CMAKE_PROGRESS_7 = 7
|
||||||
|
CMAKE_PROGRESS_8 = 8
|
||||||
|
CMAKE_PROGRESS_9 = 9
|
||||||
|
CMAKE_PROGRESS_10 = 10
|
||||||
|
CMAKE_PROGRESS_11 = 11
|
||||||
|
CMAKE_PROGRESS_12 = 12
|
||||||
|
CMAKE_PROGRESS_13 = 13
|
||||||
|
CMAKE_PROGRESS_14 = 14
|
||||||
|
CMAKE_PROGRESS_15 = 15
|
||||||
|
CMAKE_PROGRESS_16 = 16
|
||||||
|
CMAKE_PROGRESS_17 = 17
|
||||||
|
CMAKE_PROGRESS_18 = 18
|
||||||
|
CMAKE_PROGRESS_19 = 19
|
||||||
|
CMAKE_PROGRESS_20 = 20
|
||||||
|
CMAKE_PROGRESS_21 = 21
|
||||||
|
CMAKE_PROGRESS_22 = 22
|
||||||
|
CMAKE_PROGRESS_23 = 23
|
||||||
|
|
||||||
3766
cmake-build-debug/CMakeFiles/dso_dataset.dir/CXX.includecache
Normal file
3766
cmake-build-debug/CMakeFiles/dso_dataset.dir/CXX.includecache
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
# Consider dependencies only in project.
|
||||||
|
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
|
||||||
|
|
||||||
|
# The set of languages for which implicit dependencies are needed:
|
||||||
|
set(CMAKE_DEPENDS_LANGUAGES
|
||||||
|
"CXX"
|
||||||
|
)
|
||||||
|
# The set of files for implicit dependencies of each language:
|
||||||
|
set(CMAKE_DEPENDS_CHECK_CXX
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/main_dso_pangolin.cpp" "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso_dataset.dir/src/main_dso_pangolin.cpp.o"
|
||||||
|
)
|
||||||
|
set(CMAKE_CXX_COMPILER_ID "GNU")
|
||||||
|
|
||||||
|
# Preprocessor definitions for this target.
|
||||||
|
set(CMAKE_TARGET_DEFINITIONS_CXX
|
||||||
|
"ENABLE_SSE"
|
||||||
|
"HAS_ZIPLIB=1"
|
||||||
|
)
|
||||||
|
|
||||||
|
# The include file search paths:
|
||||||
|
set(CMAKE_CXX_TARGET_INCLUDE_PATH
|
||||||
|
"../src"
|
||||||
|
"../thirdparty/Sophus"
|
||||||
|
"../thirdparty/sse2neon"
|
||||||
|
"/usr/include/suitesparse"
|
||||||
|
"/usr/include/eigen3"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include/opencv"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ml/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/photo/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/features2d/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgcodecs/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videoio/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/superres/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ts/include"
|
||||||
|
"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include"
|
||||||
|
)
|
||||||
|
|
||||||
|
# The set of dependency files which are needed:
|
||||||
|
set(CMAKE_DEPENDS_DEPENDENCY_FILES
|
||||||
|
)
|
||||||
|
|
||||||
|
# Targets to which this target links.
|
||||||
|
set(CMAKE_TARGET_LINKED_INFO_FILES
|
||||||
|
"/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles/dso.dir/DependInfo.cmake"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Fortran module output directory.
|
||||||
|
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
file(REMOVE_RECURSE
|
||||||
|
"CMakeFiles/dso_dataset.dir/src/main_dso_pangolin.cpp.o"
|
||||||
|
"bin/dso_dataset"
|
||||||
|
"bin/dso_dataset.pdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Per-language clean rules from dependency scanning.
|
||||||
|
foreach(lang CXX)
|
||||||
|
include(CMakeFiles/dso_dataset.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||||
|
endforeach()
|
||||||
519
cmake-build-debug/CMakeFiles/dso_dataset.dir/depend.internal
Normal file
519
cmake-build-debug/CMakeFiles/dso_dataset.dir/depend.internal
Normal file
@@ -0,0 +1,519 @@
|
|||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.20
|
||||||
|
|
||||||
|
CMakeFiles/dso_dataset.dir/src/main_dso_pangolin.cpp.o
|
||||||
|
../src/FullSystem/HessianBlocks.h
|
||||||
|
../src/FullSystem/Residuals.h
|
||||||
|
../src/IOWrapper/ImageRW.h
|
||||||
|
../src/OptimizationBackend/EnergyFunctional.h
|
||||||
|
../src/OptimizationBackend/RawResidualJacobian.h
|
||||||
|
../src/util/FrameShell.h
|
||||||
|
../src/util/ImageAndExposure.h
|
||||||
|
../src/util/IndexThreadReduce.h
|
||||||
|
../src/util/MinimalImage.h
|
||||||
|
../src/util/Undistort.h
|
||||||
|
../thirdparty/Sophus/sophus/rxso3.hpp
|
||||||
|
../thirdparty/Sophus/sophus/se3.hpp
|
||||||
|
../thirdparty/Sophus/sophus/sim3.hpp
|
||||||
|
../thirdparty/Sophus/sophus/so3.hpp
|
||||||
|
../thirdparty/Sophus/sophus/sophus.hpp
|
||||||
|
../thirdparty/sse2neon/SSE2NEON.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/include/pangolin/config.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/compat/type_traits.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/display/attach.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/display/device/display_android.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/display/display.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/display/opengl_render_state.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/display/view.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/display/viewport.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/display/widgets/widgets.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/display/window.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/colour.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/compat/gl_es_compat.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/gl.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/gl.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/glchar.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/gldraw.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/glfont.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/glformattraits.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/glinclude.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/glpangoglu.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/glpixformat.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/glplatform.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/glsl.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/glstate.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/gltext.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/gl/glvbo.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/handler/handler.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/handler/handler_enums.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/image/copy.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/image/image.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/image/image_io.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/image/managed_image.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/image/memcpy.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/image/pixel_format.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/image/typed_image.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/pangolin.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/platform.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/plot/datalog.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/plot/plotter.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/plot/range.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/utils/assert.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/utils/file_extension.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/utils/file_utils.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/utils/format_string.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/utils/log.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/utils/params.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/utils/picojson.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/utils/simple_math.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/utils/type_convert.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/utils/uri.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/var/var.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/var/varextra.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/var/varstate.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/var/varvalue.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/var/varvaluegeneric.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/var/varvaluet.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/var/varwrapper.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/video/stream_info.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/video/video.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/video/video_exception.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/video/video_input.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/video/video_interface.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/video/video_output.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include/pangolin/video/video_output_interface.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/cv_cpu_config.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/cvconfig.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/opencv2/opencv_modules.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include/opencv/cxcore.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include/opencv2/opencv.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include/opencv2/calib3d.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include/opencv2/calib3d/calib3d.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include/opencv2/calib3d/calib3d_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/affine.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/async.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/base.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/bufferpool.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/check.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/core.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/core_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cuda.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cuda.inl.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cuda_types.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cv_cpu_dispatch.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cv_cpu_helper.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cvdef.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cvstd.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cvstd.inl.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/fast_math.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/hal/interface.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/hal/msa_macros.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/mat.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/mat.inl.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/matx.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/neon_utils.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/operations.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/optim.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/ovx.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/persistence.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/ptr.inl.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/saturate.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/traits.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/types.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/types_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/utility.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/utils/instrumentation.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/utils/tls.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/version.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/vsx_utils.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn/dict.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn/dnn.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn/dnn.inl.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn/layer.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn/utils/inference_engine.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/features2d/include/opencv2/features2d.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/all_indices.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/allocator.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/any.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/autotuned_index.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/composite_index.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/config.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/defines.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/dist.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/dynamic_bitset.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/flann_base.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/general.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/ground_truth.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/heap.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/hierarchical_clustering_index.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/index_testing.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/kdtree_index.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/kdtree_single_index.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/kmeans_index.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/linear_index.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/logger.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/lsh_index.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/lsh_table.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/matrix.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/miniflann.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/nn_index.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/params.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/random.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/result_set.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/sampling.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/saving.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/timer.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include/opencv2/highgui.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include/opencv2/highgui/highgui.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include/opencv2/highgui/highgui_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgcodecs/include/opencv2/imgcodecs.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgcodecs/include/opencv2/imgcodecs/imgcodecs_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include/opencv2/imgproc.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include/opencv2/imgproc/imgproc.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include/opencv2/imgproc/imgproc_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include/opencv2/imgproc/types_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ml/include/opencv2/ml.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ml/include/opencv2/ml/ml.inl.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include/opencv2/objdetect.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include/opencv2/objdetect/detection_based_tracker.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include/opencv2/objdetect/objdetect_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/photo/include/opencv2/photo.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/photo/include/opencv2/photo/photo_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include/opencv2/shape.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include/opencv2/shape/emdL1.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include/opencv2/shape/hist_cost.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include/opencv2/shape/shape_distance.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include/opencv2/shape/shape_transformer.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/blenders.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/camera.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/exposure_compensate.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/matchers.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/motion_estimators.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/seam_finders.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/util.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/util_inl.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/warpers.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/warpers_inl.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/warpers.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/superres/include/opencv2/superres.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/superres/include/opencv2/superres/optical_flow.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include/opencv2/video.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include/opencv2/video/background_segm.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include/opencv2/video/tracking.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include/opencv2/video/tracking_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videoio/include/opencv2/videoio.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videoio/include/opencv2/videoio/videoio_c.h
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/deblurring.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/fast_marching.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/fast_marching_inl.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/frame_source.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/global_motion.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/inpainting.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/log.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/motion_core.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/motion_stabilizing.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/optical_flow.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/outlier_rejection.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/ring_buffer.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/stabilizer.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/wobble_suppression.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include/opencv2/viz.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include/opencv2/viz/types.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include/opencv2/viz/viz3d.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include/opencv2/viz/vizcore.hpp
|
||||||
|
/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include/opencv2/viz/widgets.hpp
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystem.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/PixelSelector2.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/ImageDisplay.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/Output3DWrapper.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/OutputWrapper/SampleOutputWrapper.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/Pangolin/PangolinDSOViewer.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/MatrixAccumulators.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/main_dso_pangolin.cpp
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/DatasetReader.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/NumType.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/globalCalib.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/globalFuncs.h
|
||||||
|
/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/settings.h
|
||||||
|
/usr/include/eigen3/Eigen/Cholesky
|
||||||
|
/usr/include/eigen3/Eigen/Core
|
||||||
|
/usr/include/eigen3/Eigen/Dense
|
||||||
|
/usr/include/eigen3/Eigen/Eigen
|
||||||
|
/usr/include/eigen3/Eigen/Eigenvalues
|
||||||
|
/usr/include/eigen3/Eigen/Geometry
|
||||||
|
/usr/include/eigen3/Eigen/Householder
|
||||||
|
/usr/include/eigen3/Eigen/IterativeLinearSolvers
|
||||||
|
/usr/include/eigen3/Eigen/Jacobi
|
||||||
|
/usr/include/eigen3/Eigen/LU
|
||||||
|
/usr/include/eigen3/Eigen/OrderingMethods
|
||||||
|
/usr/include/eigen3/Eigen/QR
|
||||||
|
/usr/include/eigen3/Eigen/SVD
|
||||||
|
/usr/include/eigen3/Eigen/Sparse
|
||||||
|
/usr/include/eigen3/Eigen/SparseCholesky
|
||||||
|
/usr/include/eigen3/Eigen/SparseCore
|
||||||
|
/usr/include/eigen3/Eigen/SparseLU
|
||||||
|
/usr/include/eigen3/Eigen/SparseQR
|
||||||
|
/usr/include/eigen3/Eigen/src/Cholesky/LDLT.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Cholesky/LLT.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Array.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/ArrayBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/ArrayWrapper.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Assign.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Assign_MKL.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/BandMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Block.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/BooleanRedux.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CommaInitializer.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/ConditionEstimator.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CoreEvaluators.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CoreIterators.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CwiseNullaryOp.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CwiseTernaryOp.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CwiseUnaryOp.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CwiseUnaryView.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/DenseBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/DenseStorage.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Diagonal.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/DiagonalMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/DiagonalProduct.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Dot.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/EigenBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Fuzzy.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/GeneralProduct.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/GenericPacketMath.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/GlobalFunctions.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/IO.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Inverse.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Map.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/MapBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/MathFunctions.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/MathFunctionsImpl.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Matrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/NestByValue.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/NoAlias.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/NumTraits.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/PermutationMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Product.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/ProductEvaluators.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Random.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Redux.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Ref.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Replicate.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/ReturnByValue.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Reverse.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Select.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/SelfAdjointView.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Solve.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/SolveTriangular.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/SolverBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/StableNorm.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Stride.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Swap.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Transpose.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Transpositions.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/TriangularMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/VectorBlock.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/VectorwiseOp.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Visitor.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX/Complex.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/Half.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/MathFunctions.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/PacketMath.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/PacketMathHalf.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/TypeCasting.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/Default/Settings.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/NEON/Complex.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/SSE/Complex.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/StlFunctors.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/Parallelizer.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/BlasUtil.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/Constants.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/MKL_support.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/Macros.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/Memory.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/Meta.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/NonMPL2.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/XprHelper.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/RealQZ.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/RealSchur.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/AlignedBox.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/AngleAxis.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/EulerAngles.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Homogeneous.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Hyperplane.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/OrthoMethods.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/ParametrizedLine.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Rotation2D.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/RotationBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Scaling.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Transform.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Translation.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Umeyama.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/arch/Geometry_SSE.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Householder/BlockHouseholder.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Householder/Householder.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Householder/HouseholderSequence.h
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h
|
||||||
|
/usr/include/eigen3/Eigen/src/Jacobi/Jacobi.h
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/Determinant.h
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/FullPivLU.h
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/InverseImpl.h
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/PartialPivLU.h
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/arch/Inverse_SSE.h
|
||||||
|
/usr/include/eigen3/Eigen/src/OrderingMethods/Amd.h
|
||||||
|
/usr/include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h
|
||||||
|
/usr/include/eigen3/Eigen/src/OrderingMethods/Ordering.h
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/HouseholderQR.h
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SVD/BDCSVD.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SVD/JacobiSVD.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SVD/SVDBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/AmbiVector.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/CompressedStorage.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseAssign.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseBlock.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseColEtree.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseDot.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseMap.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparsePermutation.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseProduct.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseRedux.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseRef.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseTranspose.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseUtil.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseVector.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseView.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/TriangularSolver.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseQR/SparseQR.h
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/Image.h
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/Kernel.h
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/RealSvd2x2.h
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/blas.h
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/lapacke.h
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/lapacke_mangling.h
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/BlockMethods.h
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h
|
||||||
519
cmake-build-debug/CMakeFiles/dso_dataset.dir/depend.make
Normal file
519
cmake-build-debug/CMakeFiles/dso_dataset.dir/depend.make
Normal file
@@ -0,0 +1,519 @@
|
|||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.20
|
||||||
|
|
||||||
|
CMakeFiles/dso_dataset.dir/src/main_dso_pangolin.cpp.o: \
|
||||||
|
../src/FullSystem/HessianBlocks.h \
|
||||||
|
../src/FullSystem/Residuals.h \
|
||||||
|
../src/IOWrapper/ImageRW.h \
|
||||||
|
../src/OptimizationBackend/EnergyFunctional.h \
|
||||||
|
../src/OptimizationBackend/RawResidualJacobian.h \
|
||||||
|
../src/util/FrameShell.h \
|
||||||
|
../src/util/ImageAndExposure.h \
|
||||||
|
../src/util/IndexThreadReduce.h \
|
||||||
|
../src/util/MinimalImage.h \
|
||||||
|
../src/util/Undistort.h \
|
||||||
|
../thirdparty/Sophus/sophus/rxso3.hpp \
|
||||||
|
../thirdparty/Sophus/sophus/se3.hpp \
|
||||||
|
../thirdparty/Sophus/sophus/sim3.hpp \
|
||||||
|
../thirdparty/Sophus/sophus/so3.hpp \
|
||||||
|
../thirdparty/Sophus/sophus/sophus.hpp \
|
||||||
|
../thirdparty/sse2neon/SSE2NEON.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/build/src/include/pangolin/config.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/compat/type_traits.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/display/attach.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/display/device/display_android.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/display/display.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/display/opengl_render_state.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/display/view.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/display/viewport.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/display/widgets/widgets.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/display/window.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/colour.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/compat/gl_es_compat.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/gl.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/gl.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/glchar.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/gldraw.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/glfont.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/glformattraits.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/glinclude.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/glpangoglu.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/glpixformat.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/glplatform.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/glsl.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/glstate.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/gltext.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/gl/glvbo.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/handler/handler.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/handler/handler_enums.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/image/copy.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/image/image.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/image/image_io.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/image/managed_image.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/image/memcpy.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/image/pixel_format.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/image/typed_image.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/pangolin.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/platform.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/plot/datalog.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/plot/plotter.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/plot/range.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/utils/assert.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/utils/file_extension.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/utils/file_utils.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/utils/format_string.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/utils/log.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/utils/params.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/utils/picojson.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/utils/simple_math.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/utils/type_convert.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/utils/uri.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/var/var.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/var/varextra.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/var/varstate.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/var/varvalue.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/var/varvaluegeneric.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/var/varvaluet.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/var/varwrapper.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/video/stream_info.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/video/video.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/video/video_exception.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/video/video_input.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/video/video_interface.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/video/video_output.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/Pangolin-0.6/include/pangolin/video/video_output_interface.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/build/cv_cpu_config.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/build/cvconfig.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/build/opencv2/opencv_modules.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/include/opencv/cxcore.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/include/opencv2/opencv.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/calib3d/include/opencv2/calib3d.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/calib3d/include/opencv2/calib3d/calib3d.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/calib3d/include/opencv2/calib3d/calib3d_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/affine.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/async.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/base.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/bufferpool.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/check.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/core.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/core_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cuda.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cuda.inl.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cuda_types.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cv_cpu_dispatch.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cv_cpu_helper.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cvdef.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cvstd.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/cvstd.inl.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/fast_math.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/hal/interface.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/hal/msa_macros.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/mat.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/mat.inl.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/matx.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/neon_utils.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/operations.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/optim.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/ovx.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/persistence.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/ptr.inl.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/saturate.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/traits.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/types.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/types_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/utility.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/utils/instrumentation.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/utils/tls.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/version.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/core/include/opencv2/core/vsx_utils.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn/dict.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn/dnn.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn/dnn.inl.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn/layer.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/dnn/include/opencv2/dnn/utils/inference_engine.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/features2d/include/opencv2/features2d.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/all_indices.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/allocator.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/any.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/autotuned_index.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/composite_index.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/config.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/defines.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/dist.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/dynamic_bitset.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/flann_base.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/general.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/ground_truth.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/heap.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/hierarchical_clustering_index.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/index_testing.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/kdtree_index.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/kdtree_single_index.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/kmeans_index.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/linear_index.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/logger.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/lsh_index.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/lsh_table.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/matrix.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/miniflann.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/nn_index.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/params.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/random.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/result_set.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/sampling.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/saving.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/flann/include/opencv2/flann/timer.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/highgui/include/opencv2/highgui.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/highgui/include/opencv2/highgui/highgui.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/highgui/include/opencv2/highgui/highgui_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/imgcodecs/include/opencv2/imgcodecs.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/imgcodecs/include/opencv2/imgcodecs/imgcodecs_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/imgproc/include/opencv2/imgproc.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/imgproc/include/opencv2/imgproc/imgproc.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/imgproc/include/opencv2/imgproc/imgproc_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/imgproc/include/opencv2/imgproc/types_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/ml/include/opencv2/ml.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/ml/include/opencv2/ml/ml.inl.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/objdetect/include/opencv2/objdetect.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/objdetect/include/opencv2/objdetect/detection_based_tracker.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/objdetect/include/opencv2/objdetect/objdetect_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/photo/include/opencv2/photo.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/photo/include/opencv2/photo/photo_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/shape/include/opencv2/shape.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/shape/include/opencv2/shape/emdL1.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/shape/include/opencv2/shape/hist_cost.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/shape/include/opencv2/shape/shape_distance.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/shape/include/opencv2/shape/shape_transformer.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/blenders.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/camera.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/exposure_compensate.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/matchers.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/motion_estimators.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/seam_finders.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/util.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/util_inl.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/warpers.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/detail/warpers_inl.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/stitching/include/opencv2/stitching/warpers.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/superres/include/opencv2/superres.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/superres/include/opencv2/superres/optical_flow.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/video/include/opencv2/video.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/video/include/opencv2/video/background_segm.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/video/include/opencv2/video/tracking.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/video/include/opencv2/video/tracking_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videoio/include/opencv2/videoio.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videoio/include/opencv2/videoio/videoio_c.h \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/deblurring.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/fast_marching.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/fast_marching_inl.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/frame_source.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/global_motion.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/inpainting.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/log.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/motion_core.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/motion_stabilizing.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/optical_flow.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/outlier_rejection.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/ring_buffer.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/stabilizer.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/videostab/include/opencv2/videostab/wobble_suppression.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/viz/include/opencv2/viz.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/viz/include/opencv2/viz/types.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/viz/include/opencv2/viz/viz3d.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/viz/include/opencv2/viz/vizcore.hpp \
|
||||||
|
/home/ivan/ivan/git/Work\ DriveCast/opencv-3.4.15/modules/viz/include/opencv2/viz/widgets.hpp \
|
||||||
|
../src/FullSystem/FullSystem.h \
|
||||||
|
../src/FullSystem/PixelSelector2.h \
|
||||||
|
../src/IOWrapper/ImageDisplay.h \
|
||||||
|
../src/IOWrapper/Output3DWrapper.h \
|
||||||
|
../src/IOWrapper/OutputWrapper/SampleOutputWrapper.h \
|
||||||
|
../src/IOWrapper/Pangolin/PangolinDSOViewer.h \
|
||||||
|
../src/OptimizationBackend/MatrixAccumulators.h \
|
||||||
|
../src/main_dso_pangolin.cpp \
|
||||||
|
../src/util/DatasetReader.h \
|
||||||
|
../src/util/NumType.h \
|
||||||
|
../src/util/globalCalib.h \
|
||||||
|
../src/util/globalFuncs.h \
|
||||||
|
../src/util/settings.h \
|
||||||
|
/usr/include/eigen3/Eigen/Cholesky \
|
||||||
|
/usr/include/eigen3/Eigen/Core \
|
||||||
|
/usr/include/eigen3/Eigen/Dense \
|
||||||
|
/usr/include/eigen3/Eigen/Eigen \
|
||||||
|
/usr/include/eigen3/Eigen/Eigenvalues \
|
||||||
|
/usr/include/eigen3/Eigen/Geometry \
|
||||||
|
/usr/include/eigen3/Eigen/Householder \
|
||||||
|
/usr/include/eigen3/Eigen/IterativeLinearSolvers \
|
||||||
|
/usr/include/eigen3/Eigen/Jacobi \
|
||||||
|
/usr/include/eigen3/Eigen/LU \
|
||||||
|
/usr/include/eigen3/Eigen/OrderingMethods \
|
||||||
|
/usr/include/eigen3/Eigen/QR \
|
||||||
|
/usr/include/eigen3/Eigen/SVD \
|
||||||
|
/usr/include/eigen3/Eigen/Sparse \
|
||||||
|
/usr/include/eigen3/Eigen/SparseCholesky \
|
||||||
|
/usr/include/eigen3/Eigen/SparseCore \
|
||||||
|
/usr/include/eigen3/Eigen/SparseLU \
|
||||||
|
/usr/include/eigen3/Eigen/SparseQR \
|
||||||
|
/usr/include/eigen3/Eigen/src/Cholesky/LDLT.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Cholesky/LLT.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Array.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/ArrayBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/ArrayWrapper.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Assign.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Assign_MKL.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/BandMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Block.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/BooleanRedux.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CommaInitializer.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/ConditionEstimator.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CoreEvaluators.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CoreIterators.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CwiseNullaryOp.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CwiseTernaryOp.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CwiseUnaryOp.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/CwiseUnaryView.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/DenseBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/DenseStorage.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Diagonal.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/DiagonalMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/DiagonalProduct.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Dot.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/EigenBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Fuzzy.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/GeneralProduct.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/GenericPacketMath.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/GlobalFunctions.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/IO.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Inverse.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Map.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/MapBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/MathFunctions.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/MathFunctionsImpl.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Matrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/NestByValue.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/NoAlias.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/NumTraits.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/PermutationMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/PlainObjectBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Product.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/ProductEvaluators.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Random.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Redux.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Ref.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Replicate.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/ReturnByValue.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Reverse.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Select.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/SelfAdjointView.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Solve.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/SolveTriangular.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/SolverBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/StableNorm.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Stride.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Swap.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Transpose.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Transpositions.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/TriangularMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/VectorBlock.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/VectorwiseOp.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/Visitor.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX/Complex.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/Half.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/MathFunctions.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/PacketMath.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/PacketMathHalf.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/CUDA/TypeCasting.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/Default/Settings.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/NEON/Complex.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/SSE/Complex.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/StlFunctors.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/Parallelizer.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/BlasUtil.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/Constants.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/MKL_support.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/Macros.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/Memory.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/Meta.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/NonMPL2.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Core/util/XprHelper.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/RealQZ.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/RealSchur.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/AlignedBox.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/AngleAxis.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/EulerAngles.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Homogeneous.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Hyperplane.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/OrthoMethods.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/ParametrizedLine.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Rotation2D.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/RotationBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Scaling.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Transform.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Translation.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/Umeyama.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Geometry/arch/Geometry_SSE.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Householder/BlockHouseholder.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Householder/Householder.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Householder/HouseholderSequence.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/Jacobi/Jacobi.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/Determinant.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/FullPivLU.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/InverseImpl.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/PartialPivLU.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/LU/arch/Inverse_SSE.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/OrderingMethods/Amd.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/OrderingMethods/Ordering.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/HouseholderQR.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SVD/BDCSVD.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SVD/JacobiSVD.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SVD/SVDBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/AmbiVector.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/CompressedStorage.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseAssign.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseBlock.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseColEtree.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseDot.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseMap.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparsePermutation.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseProduct.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseRedux.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseRef.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseTranspose.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseUtil.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseVector.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/SparseView.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseCore/TriangularSolver.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/SparseQR/SparseQR.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/Image.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/Kernel.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/RealSvd2x2.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/blas.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/lapacke.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/misc/lapacke_mangling.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/BlockMethods.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h \
|
||||||
|
/usr/include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h
|
||||||
10
cmake-build-debug/CMakeFiles/dso_dataset.dir/flags.make
Normal file
10
cmake-build-debug/CMakeFiles/dso_dataset.dir/flags.make
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.20
|
||||||
|
|
||||||
|
# compile CXX with /usr/bin/c++
|
||||||
|
CXX_DEFINES = -DENABLE_SSE -DHAS_ZIPLIB=1
|
||||||
|
|
||||||
|
CXX_INCLUDES = -I/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src -I/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/Sophus -I/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/sse2neon -I/usr/include/suitesparse -isystem /usr/include/eigen3 -isystem "/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include" -isystem "/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include/opencv" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ml/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/photo/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/features2d/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgcodecs/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videoio/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/superres/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ts/include" -isystem "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include"
|
||||||
|
|
||||||
|
CXX_FLAGS = -O3 -g -std=c++0x -march=native -g
|
||||||
|
|
||||||
1
cmake-build-debug/CMakeFiles/dso_dataset.dir/link.txt
Normal file
1
cmake-build-debug/CMakeFiles/dso_dataset.dir/link.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/usr/bin/c++ -O3 -g -std=c++0x -march=native -g -rdynamic CMakeFiles/dso_dataset.dir/src/main_dso_pangolin.cpp.o -o bin/dso_dataset -Wl,-rpath,"/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib:/usr/local/lib:/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src" lib/libdso.a -lboost_system -lcxsparse -lboost_thread /usr/local/lib/libzip.so "/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/libpangolin.so" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_dnn.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_highgui.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_ml.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_objdetect.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_shape.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_stitching.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_superres.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_videostab.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_viz.so.3.4.15" -lrt -lpthread -lOpenGL -lGLX -lGLU -lGLEW -lEGL -lSM -lICE -lX11 -lXext -lrt -lpthread -lOpenGL -lGLX -lGLU -lGLEW -lEGL -lSM -lICE -lX11 -lXext -ldc1394 -lOpenNI -lOpenNI2 -lpng -lz -ljpeg -ltiff -lIlmImf -lzstd -llz4 "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_calib3d.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_features2d.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_flann.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_photo.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_video.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_videoio.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_imgcodecs.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_imgproc.so.3.4.15" "/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build/lib/libopencv_core.so.3.4.15"
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
CMAKE_PROGRESS_1 = 24
|
||||||
|
CMAKE_PROGRESS_2 = 25
|
||||||
|
|
||||||
1
cmake-build-debug/CMakeFiles/progress.marks
Normal file
1
cmake-build-debug/CMakeFiles/progress.marks
Normal file
@@ -0,0 +1 @@
|
|||||||
|
25
|
||||||
452
cmake-build-debug/DSO.cbp
Normal file
452
cmake-build-debug/DSO.cbp
Normal file
@@ -0,0 +1,452 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CodeBlocks_project_file>
|
||||||
|
<FileVersion major="1" minor="6"/>
|
||||||
|
<Project>
|
||||||
|
<Option title="DSO"/>
|
||||||
|
<Option makefile_is_custom="1"/>
|
||||||
|
<Option compiler="gcc"/>
|
||||||
|
<Option virtualFolders="CMake Files\;CMake Files\cmake\;CMake Files\..\;CMake Files\..\..\;CMake Files\..\..\..\;CMake Files\..\..\..\..\;CMake Files\..\..\..\..\..\;CMake Files\..\..\..\..\..\..\;CMake Files\..\..\..\..\..\..\..\;CMake Files\..\..\..\..\..\..\..\usr\;CMake Files\..\..\..\..\..\..\..\usr\lib\;CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\;CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\;CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\Boost-1.71.0\;CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_headers-1.71.0\;CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_system-1.71.0\;CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_thread-1.71.0\;CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_atomic-1.71.0\;CMake Files\..\..\..\Work DriveCast\;CMake Files\..\..\..\Work DriveCast\Pangolin-0.6\;CMake Files\..\..\..\Work DriveCast\Pangolin-0.6\build\;CMake Files\..\..\..\Work DriveCast\Pangolin-0.6\build\src\;CMake Files\..\..\..\Work DriveCast\opencv-3.4.15\;CMake Files\..\..\..\Work DriveCast\opencv-3.4.15\build\;"/>
|
||||||
|
<Build>
|
||||||
|
<Target title="all">
|
||||||
|
<Option working_dir="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug"/>
|
||||||
|
<Option type="4"/>
|
||||||
|
<MakeCommands>
|
||||||
|
<Build command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 all"/>
|
||||||
|
<CompileFile command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 "$file""/>
|
||||||
|
<Clean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
<DistClean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
</MakeCommands>
|
||||||
|
</Target>
|
||||||
|
<Target title="rebuild_cache">
|
||||||
|
<Option working_dir="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug"/>
|
||||||
|
<Option type="4"/>
|
||||||
|
<MakeCommands>
|
||||||
|
<Build command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 rebuild_cache"/>
|
||||||
|
<CompileFile command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 "$file""/>
|
||||||
|
<Clean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
<DistClean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
</MakeCommands>
|
||||||
|
</Target>
|
||||||
|
<Target title="dso_dataset">
|
||||||
|
<Option output="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/bin/dso_dataset" prefix_auto="0" extension_auto="0"/>
|
||||||
|
<Option working_dir="bin"/>
|
||||||
|
<Option object_output="./"/>
|
||||||
|
<Option type="1"/>
|
||||||
|
<Option compiler="gcc"/>
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-DENABLE_SSE"/>
|
||||||
|
<Add option="-DHAS_ZIPLIB=1"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/Sophus"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/sse2neon"/>
|
||||||
|
<Add directory="/usr/include/suitesparse"/>
|
||||||
|
<Add directory="/usr/include/eigen3"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include/opencv"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ml/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/photo/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/features2d/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgcodecs/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videoio/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/superres/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ts/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include"/>
|
||||||
|
<Add directory="/usr/include/c++/9"/>
|
||||||
|
<Add directory="/usr/include/x86_64-linux-gnu/c++/9"/>
|
||||||
|
<Add directory="/usr/include/c++/9/backward"/>
|
||||||
|
<Add directory="/usr/lib/gcc/x86_64-linux-gnu/9/include"/>
|
||||||
|
<Add directory="/usr/local/include"/>
|
||||||
|
<Add directory="/usr/include/x86_64-linux-gnu"/>
|
||||||
|
<Add directory="/usr/include"/>
|
||||||
|
</Compiler>
|
||||||
|
<MakeCommands>
|
||||||
|
<Build command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 dso_dataset"/>
|
||||||
|
<CompileFile command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 "$file""/>
|
||||||
|
<Clean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
<DistClean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
</MakeCommands>
|
||||||
|
</Target>
|
||||||
|
<Target title="dso_dataset/fast">
|
||||||
|
<Option output="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/bin/dso_dataset" prefix_auto="0" extension_auto="0"/>
|
||||||
|
<Option working_dir="bin"/>
|
||||||
|
<Option object_output="./"/>
|
||||||
|
<Option type="1"/>
|
||||||
|
<Option compiler="gcc"/>
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-DENABLE_SSE"/>
|
||||||
|
<Add option="-DHAS_ZIPLIB=1"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/Sophus"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/sse2neon"/>
|
||||||
|
<Add directory="/usr/include/suitesparse"/>
|
||||||
|
<Add directory="/usr/include/eigen3"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include/opencv"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ml/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/photo/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/features2d/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgcodecs/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videoio/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/superres/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ts/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include"/>
|
||||||
|
<Add directory="/usr/include/c++/9"/>
|
||||||
|
<Add directory="/usr/include/x86_64-linux-gnu/c++/9"/>
|
||||||
|
<Add directory="/usr/include/c++/9/backward"/>
|
||||||
|
<Add directory="/usr/lib/gcc/x86_64-linux-gnu/9/include"/>
|
||||||
|
<Add directory="/usr/local/include"/>
|
||||||
|
<Add directory="/usr/include/x86_64-linux-gnu"/>
|
||||||
|
<Add directory="/usr/include"/>
|
||||||
|
</Compiler>
|
||||||
|
<MakeCommands>
|
||||||
|
<Build command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 dso_dataset/fast"/>
|
||||||
|
<CompileFile command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 "$file""/>
|
||||||
|
<Clean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
<DistClean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
</MakeCommands>
|
||||||
|
</Target>
|
||||||
|
<Target title="edit_cache">
|
||||||
|
<Option working_dir="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug"/>
|
||||||
|
<Option type="4"/>
|
||||||
|
<MakeCommands>
|
||||||
|
<Build command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 edit_cache"/>
|
||||||
|
<CompileFile command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 "$file""/>
|
||||||
|
<Clean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
<DistClean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
</MakeCommands>
|
||||||
|
</Target>
|
||||||
|
<Target title="dso">
|
||||||
|
<Option output="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/lib/libdso.a" prefix_auto="0" extension_auto="0"/>
|
||||||
|
<Option working_dir="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug"/>
|
||||||
|
<Option object_output="./"/>
|
||||||
|
<Option type="2"/>
|
||||||
|
<Option compiler="gcc"/>
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-DENABLE_SSE"/>
|
||||||
|
<Add option="-DHAS_ZIPLIB=1"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/Sophus"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/sse2neon"/>
|
||||||
|
<Add directory="/usr/include/eigen3"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include/opencv"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ml/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/photo/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/features2d/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgcodecs/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videoio/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/superres/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ts/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include"/>
|
||||||
|
<Add directory="/usr/include/suitesparse"/>
|
||||||
|
<Add directory="/usr/include/c++/9"/>
|
||||||
|
<Add directory="/usr/include/x86_64-linux-gnu/c++/9"/>
|
||||||
|
<Add directory="/usr/include/c++/9/backward"/>
|
||||||
|
<Add directory="/usr/lib/gcc/x86_64-linux-gnu/9/include"/>
|
||||||
|
<Add directory="/usr/local/include"/>
|
||||||
|
<Add directory="/usr/include/x86_64-linux-gnu"/>
|
||||||
|
<Add directory="/usr/include"/>
|
||||||
|
</Compiler>
|
||||||
|
<MakeCommands>
|
||||||
|
<Build command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 dso"/>
|
||||||
|
<CompileFile command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 "$file""/>
|
||||||
|
<Clean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
<DistClean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
</MakeCommands>
|
||||||
|
</Target>
|
||||||
|
<Target title="dso/fast">
|
||||||
|
<Option output="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/lib/libdso.a" prefix_auto="0" extension_auto="0"/>
|
||||||
|
<Option working_dir="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug"/>
|
||||||
|
<Option object_output="./"/>
|
||||||
|
<Option type="2"/>
|
||||||
|
<Option compiler="gcc"/>
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-DENABLE_SSE"/>
|
||||||
|
<Add option="-DHAS_ZIPLIB=1"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/Sophus"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/thirdparty/sse2neon"/>
|
||||||
|
<Add directory="/usr/include/eigen3"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/Pangolin-0.6/build/src/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/build"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/include/opencv"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/core/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/flann/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgproc/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ml/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/photo/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/video/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/viz/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/dnn/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/features2d/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/imgcodecs/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/shape/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videoio/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/calib3d/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/highgui/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/objdetect/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/stitching/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/superres/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/ts/include"/>
|
||||||
|
<Add directory="/home/ivan/ivan/git/Work DriveCast/opencv-3.4.15/modules/videostab/include"/>
|
||||||
|
<Add directory="/usr/include/suitesparse"/>
|
||||||
|
<Add directory="/usr/include/c++/9"/>
|
||||||
|
<Add directory="/usr/include/x86_64-linux-gnu/c++/9"/>
|
||||||
|
<Add directory="/usr/include/c++/9/backward"/>
|
||||||
|
<Add directory="/usr/lib/gcc/x86_64-linux-gnu/9/include"/>
|
||||||
|
<Add directory="/usr/local/include"/>
|
||||||
|
<Add directory="/usr/include/x86_64-linux-gnu"/>
|
||||||
|
<Add directory="/usr/include"/>
|
||||||
|
</Compiler>
|
||||||
|
<MakeCommands>
|
||||||
|
<Build command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 dso/fast"/>
|
||||||
|
<CompileFile command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 "$file""/>
|
||||||
|
<Clean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
<DistClean command="/usr/bin/make -j4 -f "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/Makefile" VERBOSE=1 clean"/>
|
||||||
|
</MakeCommands>
|
||||||
|
</Target>
|
||||||
|
</Build>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/CoarseInitializer.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/CoarseInitializer.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/CoarseTracker.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/CoarseTracker.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystem.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystem.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystemDebugStuff.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystemMarginalize.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystemOptPoint.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/FullSystemOptimize.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/HessianBlocks.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/HessianBlocks.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/ImmaturePoint.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/ImmaturePoint.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/PixelSelector2.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/PixelSelector2.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/Residuals.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/FullSystem/Residuals.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/Pangolin/KeyFrameDisplay.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/Pangolin/KeyFrameDisplay.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/Pangolin/PangolinDSOViewer.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/IOWrapper/Pangolin/PangolinDSOViewer.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/AccumulatedSCHessian.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/AccumulatedSCHessian.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/AccumulatedTopHessian.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/AccumulatedTopHessian.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/EnergyFunctional.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/EnergyFunctional.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/EnergyFunctionalStructs.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/OptimizationBackend/EnergyFunctionalStructs.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/main_dso_pangolin.cpp">
|
||||||
|
<Option target="dso_dataset"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/Undistort.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/Undistort.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/globalCalib.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/globalCalib.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/settings.cpp">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/src/util/settings.h">
|
||||||
|
<Option target="dso"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/CMakeLists.txt">
|
||||||
|
<Option virtualFolder="CMake Files\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake/FindEigen3.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\cmake\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake/FindLibZip.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\cmake\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake/FindSuiteParse.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\cmake\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/BoostDetectToolset-1.71.0.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\Boost-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfigVersion.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\Boost-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_headers-1.71.0/boost_headers-config-version.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_headers-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_headers-1.71.0/boost_headers-config.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_headers-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/boost_system-config-version.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_system-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/boost_system-config.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_system-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant-shared.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_system-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant-static.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_system-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/boost_thread-config-version.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_thread-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/boost_thread-config.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_thread-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant-shared.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_thread-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant-static.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_thread-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/boost_atomic-config-version.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_atomic-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/boost_atomic-config.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_atomic-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant-shared.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_atomic-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../../../../../usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant-static.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\..\..\..\..\usr\lib\x86_64-linux-gnu\cmake\boost_atomic-1.71.0\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../Work DriveCast/Pangolin-0.6/build/src/PangolinConfig.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\Work DriveCast\Pangolin-0.6\build\src\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../Work DriveCast/Pangolin-0.6/build/src/PangolinConfigVersion.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\Work DriveCast\Pangolin-0.6\build\src\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../Work DriveCast/Pangolin-0.6/build/src/PangolinTargets.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\Work DriveCast\Pangolin-0.6\build\src\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../Work DriveCast/opencv-3.4.15/build/OpenCVConfig-version.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\Work DriveCast\opencv-3.4.15\build\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../Work DriveCast/opencv-3.4.15/build/OpenCVConfig.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\Work DriveCast\opencv-3.4.15\build\"/>
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="/home/ivan/ivan/git/work_drivecast2/SLAM/dso/../../../Work DriveCast/opencv-3.4.15/build/OpenCVModules.cmake">
|
||||||
|
<Option virtualFolder="CMake Files\..\..\..\Work DriveCast\opencv-3.4.15\build\"/>
|
||||||
|
</Unit>
|
||||||
|
</Project>
|
||||||
|
</CodeBlocks_project_file>
|
||||||
789
cmake-build-debug/Makefile
Normal file
789
cmake-build-debug/Makefile
Normal file
@@ -0,0 +1,789 @@
|
|||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.20
|
||||||
|
|
||||||
|
# Default target executed when no arguments are given to make.
|
||||||
|
default_target: all
|
||||||
|
.PHONY : default_target
|
||||||
|
|
||||||
|
# Allow only one "make -f Makefile2" at a time, but pass parallelism.
|
||||||
|
.NOTPARALLEL:
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets provided by cmake.
|
||||||
|
|
||||||
|
# Disable implicit rules so canonical targets will work.
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : %,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : SCCS/s.%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : s.%
|
||||||
|
|
||||||
|
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||||
|
|
||||||
|
# Command-line flag to silence nested $(MAKE).
|
||||||
|
$(VERBOSE)MAKESILENT = -s
|
||||||
|
|
||||||
|
#Suppress display of executed commands.
|
||||||
|
$(VERBOSE).SILENT:
|
||||||
|
|
||||||
|
# A target that is always out of date.
|
||||||
|
cmake_force:
|
||||||
|
.PHONY : cmake_force
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Set environment variables for the build.
|
||||||
|
|
||||||
|
# The shell in which to execute make rules.
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
# The CMake executable.
|
||||||
|
CMAKE_COMMAND = /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake
|
||||||
|
|
||||||
|
# The command to remove a file.
|
||||||
|
RM = /home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E rm -f
|
||||||
|
|
||||||
|
# Escaping for special characters.
|
||||||
|
EQUALS = =
|
||||||
|
|
||||||
|
# The top-level source directory on which CMake was run.
|
||||||
|
CMAKE_SOURCE_DIR = /home/ivan/ivan/git/work_drivecast2/SLAM/dso
|
||||||
|
|
||||||
|
# The top-level build directory on which CMake was run.
|
||||||
|
CMAKE_BINARY_DIR = /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Targets provided globally by CMake.
|
||||||
|
|
||||||
|
# Special rule for the target rebuild_cache
|
||||||
|
rebuild_cache:
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
|
||||||
|
/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
|
||||||
|
.PHONY : rebuild_cache
|
||||||
|
|
||||||
|
# Special rule for the target rebuild_cache
|
||||||
|
rebuild_cache/fast: rebuild_cache
|
||||||
|
.PHONY : rebuild_cache/fast
|
||||||
|
|
||||||
|
# Special rule for the target edit_cache
|
||||||
|
edit_cache:
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..."
|
||||||
|
/home/ivan/ivan/programs/clion-2021.1.2/bin/cmake/linux/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
|
||||||
|
.PHONY : edit_cache
|
||||||
|
|
||||||
|
# Special rule for the target edit_cache
|
||||||
|
edit_cache/fast: edit_cache
|
||||||
|
.PHONY : edit_cache/fast
|
||||||
|
|
||||||
|
# The main all target
|
||||||
|
all: cmake_check_build_system
|
||||||
|
$(CMAKE_COMMAND) -E cmake_progress_start /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug//CMakeFiles/progress.marks
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all
|
||||||
|
$(CMAKE_COMMAND) -E cmake_progress_start /home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/CMakeFiles 0
|
||||||
|
.PHONY : all
|
||||||
|
|
||||||
|
# The main clean target
|
||||||
|
clean:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
# The main clean target
|
||||||
|
clean/fast: clean
|
||||||
|
.PHONY : clean/fast
|
||||||
|
|
||||||
|
# Prepare targets for installation.
|
||||||
|
preinstall: all
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
|
||||||
|
.PHONY : preinstall
|
||||||
|
|
||||||
|
# Prepare targets for installation.
|
||||||
|
preinstall/fast:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
|
||||||
|
.PHONY : preinstall/fast
|
||||||
|
|
||||||
|
# clear depends
|
||||||
|
depend:
|
||||||
|
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
|
||||||
|
.PHONY : depend
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Target rules for targets named dso_dataset
|
||||||
|
|
||||||
|
# Build rule for target.
|
||||||
|
dso_dataset: cmake_check_build_system
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 dso_dataset
|
||||||
|
.PHONY : dso_dataset
|
||||||
|
|
||||||
|
# fast build rule for target.
|
||||||
|
dso_dataset/fast:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso_dataset.dir/build.make CMakeFiles/dso_dataset.dir/build
|
||||||
|
.PHONY : dso_dataset/fast
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Target rules for targets named dso
|
||||||
|
|
||||||
|
# Build rule for target.
|
||||||
|
dso: cmake_check_build_system
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 dso
|
||||||
|
.PHONY : dso
|
||||||
|
|
||||||
|
# fast build rule for target.
|
||||||
|
dso/fast:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/build
|
||||||
|
.PHONY : dso/fast
|
||||||
|
|
||||||
|
src/FullSystem/CoarseInitializer.o: src/FullSystem/CoarseInitializer.cpp.o
|
||||||
|
.PHONY : src/FullSystem/CoarseInitializer.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/CoarseInitializer.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/CoarseInitializer.cpp.o
|
||||||
|
.PHONY : src/FullSystem/CoarseInitializer.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/CoarseInitializer.i: src/FullSystem/CoarseInitializer.cpp.i
|
||||||
|
.PHONY : src/FullSystem/CoarseInitializer.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/CoarseInitializer.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/CoarseInitializer.cpp.i
|
||||||
|
.PHONY : src/FullSystem/CoarseInitializer.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/CoarseInitializer.s: src/FullSystem/CoarseInitializer.cpp.s
|
||||||
|
.PHONY : src/FullSystem/CoarseInitializer.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/CoarseInitializer.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/CoarseInitializer.cpp.s
|
||||||
|
.PHONY : src/FullSystem/CoarseInitializer.cpp.s
|
||||||
|
|
||||||
|
src/FullSystem/CoarseTracker.o: src/FullSystem/CoarseTracker.cpp.o
|
||||||
|
.PHONY : src/FullSystem/CoarseTracker.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/CoarseTracker.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/CoarseTracker.cpp.o
|
||||||
|
.PHONY : src/FullSystem/CoarseTracker.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/CoarseTracker.i: src/FullSystem/CoarseTracker.cpp.i
|
||||||
|
.PHONY : src/FullSystem/CoarseTracker.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/CoarseTracker.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/CoarseTracker.cpp.i
|
||||||
|
.PHONY : src/FullSystem/CoarseTracker.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/CoarseTracker.s: src/FullSystem/CoarseTracker.cpp.s
|
||||||
|
.PHONY : src/FullSystem/CoarseTracker.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/CoarseTracker.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/CoarseTracker.cpp.s
|
||||||
|
.PHONY : src/FullSystem/CoarseTracker.cpp.s
|
||||||
|
|
||||||
|
src/FullSystem/FullSystem.o: src/FullSystem/FullSystem.cpp.o
|
||||||
|
.PHONY : src/FullSystem/FullSystem.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/FullSystem.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystem.cpp.o
|
||||||
|
.PHONY : src/FullSystem/FullSystem.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/FullSystem.i: src/FullSystem/FullSystem.cpp.i
|
||||||
|
.PHONY : src/FullSystem/FullSystem.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/FullSystem.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystem.cpp.i
|
||||||
|
.PHONY : src/FullSystem/FullSystem.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/FullSystem.s: src/FullSystem/FullSystem.cpp.s
|
||||||
|
.PHONY : src/FullSystem/FullSystem.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/FullSystem.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystem.cpp.s
|
||||||
|
.PHONY : src/FullSystem/FullSystem.cpp.s
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemDebugStuff.o: src/FullSystem/FullSystemDebugStuff.cpp.o
|
||||||
|
.PHONY : src/FullSystem/FullSystemDebugStuff.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/FullSystemDebugStuff.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemDebugStuff.cpp.o
|
||||||
|
.PHONY : src/FullSystem/FullSystemDebugStuff.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemDebugStuff.i: src/FullSystem/FullSystemDebugStuff.cpp.i
|
||||||
|
.PHONY : src/FullSystem/FullSystemDebugStuff.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/FullSystemDebugStuff.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemDebugStuff.cpp.i
|
||||||
|
.PHONY : src/FullSystem/FullSystemDebugStuff.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemDebugStuff.s: src/FullSystem/FullSystemDebugStuff.cpp.s
|
||||||
|
.PHONY : src/FullSystem/FullSystemDebugStuff.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/FullSystemDebugStuff.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemDebugStuff.cpp.s
|
||||||
|
.PHONY : src/FullSystem/FullSystemDebugStuff.cpp.s
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemMarginalize.o: src/FullSystem/FullSystemMarginalize.cpp.o
|
||||||
|
.PHONY : src/FullSystem/FullSystemMarginalize.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/FullSystemMarginalize.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemMarginalize.cpp.o
|
||||||
|
.PHONY : src/FullSystem/FullSystemMarginalize.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemMarginalize.i: src/FullSystem/FullSystemMarginalize.cpp.i
|
||||||
|
.PHONY : src/FullSystem/FullSystemMarginalize.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/FullSystemMarginalize.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemMarginalize.cpp.i
|
||||||
|
.PHONY : src/FullSystem/FullSystemMarginalize.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemMarginalize.s: src/FullSystem/FullSystemMarginalize.cpp.s
|
||||||
|
.PHONY : src/FullSystem/FullSystemMarginalize.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/FullSystemMarginalize.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemMarginalize.cpp.s
|
||||||
|
.PHONY : src/FullSystem/FullSystemMarginalize.cpp.s
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemOptPoint.o: src/FullSystem/FullSystemOptPoint.cpp.o
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptPoint.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/FullSystemOptPoint.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemOptPoint.cpp.o
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptPoint.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemOptPoint.i: src/FullSystem/FullSystemOptPoint.cpp.i
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptPoint.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/FullSystemOptPoint.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemOptPoint.cpp.i
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptPoint.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemOptPoint.s: src/FullSystem/FullSystemOptPoint.cpp.s
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptPoint.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/FullSystemOptPoint.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemOptPoint.cpp.s
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptPoint.cpp.s
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemOptimize.o: src/FullSystem/FullSystemOptimize.cpp.o
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptimize.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/FullSystemOptimize.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemOptimize.cpp.o
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptimize.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemOptimize.i: src/FullSystem/FullSystemOptimize.cpp.i
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptimize.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/FullSystemOptimize.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemOptimize.cpp.i
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptimize.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/FullSystemOptimize.s: src/FullSystem/FullSystemOptimize.cpp.s
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptimize.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/FullSystemOptimize.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/FullSystemOptimize.cpp.s
|
||||||
|
.PHONY : src/FullSystem/FullSystemOptimize.cpp.s
|
||||||
|
|
||||||
|
src/FullSystem/HessianBlocks.o: src/FullSystem/HessianBlocks.cpp.o
|
||||||
|
.PHONY : src/FullSystem/HessianBlocks.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/HessianBlocks.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/HessianBlocks.cpp.o
|
||||||
|
.PHONY : src/FullSystem/HessianBlocks.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/HessianBlocks.i: src/FullSystem/HessianBlocks.cpp.i
|
||||||
|
.PHONY : src/FullSystem/HessianBlocks.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/HessianBlocks.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/HessianBlocks.cpp.i
|
||||||
|
.PHONY : src/FullSystem/HessianBlocks.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/HessianBlocks.s: src/FullSystem/HessianBlocks.cpp.s
|
||||||
|
.PHONY : src/FullSystem/HessianBlocks.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/HessianBlocks.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/HessianBlocks.cpp.s
|
||||||
|
.PHONY : src/FullSystem/HessianBlocks.cpp.s
|
||||||
|
|
||||||
|
src/FullSystem/ImmaturePoint.o: src/FullSystem/ImmaturePoint.cpp.o
|
||||||
|
.PHONY : src/FullSystem/ImmaturePoint.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/ImmaturePoint.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/ImmaturePoint.cpp.o
|
||||||
|
.PHONY : src/FullSystem/ImmaturePoint.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/ImmaturePoint.i: src/FullSystem/ImmaturePoint.cpp.i
|
||||||
|
.PHONY : src/FullSystem/ImmaturePoint.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/ImmaturePoint.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/ImmaturePoint.cpp.i
|
||||||
|
.PHONY : src/FullSystem/ImmaturePoint.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/ImmaturePoint.s: src/FullSystem/ImmaturePoint.cpp.s
|
||||||
|
.PHONY : src/FullSystem/ImmaturePoint.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/ImmaturePoint.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/ImmaturePoint.cpp.s
|
||||||
|
.PHONY : src/FullSystem/ImmaturePoint.cpp.s
|
||||||
|
|
||||||
|
src/FullSystem/PixelSelector2.o: src/FullSystem/PixelSelector2.cpp.o
|
||||||
|
.PHONY : src/FullSystem/PixelSelector2.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/PixelSelector2.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/PixelSelector2.cpp.o
|
||||||
|
.PHONY : src/FullSystem/PixelSelector2.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/PixelSelector2.i: src/FullSystem/PixelSelector2.cpp.i
|
||||||
|
.PHONY : src/FullSystem/PixelSelector2.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/PixelSelector2.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/PixelSelector2.cpp.i
|
||||||
|
.PHONY : src/FullSystem/PixelSelector2.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/PixelSelector2.s: src/FullSystem/PixelSelector2.cpp.s
|
||||||
|
.PHONY : src/FullSystem/PixelSelector2.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/PixelSelector2.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/PixelSelector2.cpp.s
|
||||||
|
.PHONY : src/FullSystem/PixelSelector2.cpp.s
|
||||||
|
|
||||||
|
src/FullSystem/Residuals.o: src/FullSystem/Residuals.cpp.o
|
||||||
|
.PHONY : src/FullSystem/Residuals.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/FullSystem/Residuals.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/Residuals.cpp.o
|
||||||
|
.PHONY : src/FullSystem/Residuals.cpp.o
|
||||||
|
|
||||||
|
src/FullSystem/Residuals.i: src/FullSystem/Residuals.cpp.i
|
||||||
|
.PHONY : src/FullSystem/Residuals.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/FullSystem/Residuals.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/Residuals.cpp.i
|
||||||
|
.PHONY : src/FullSystem/Residuals.cpp.i
|
||||||
|
|
||||||
|
src/FullSystem/Residuals.s: src/FullSystem/Residuals.cpp.s
|
||||||
|
.PHONY : src/FullSystem/Residuals.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/FullSystem/Residuals.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/FullSystem/Residuals.cpp.s
|
||||||
|
.PHONY : src/FullSystem/Residuals.cpp.s
|
||||||
|
|
||||||
|
src/IOWrapper/OpenCV/ImageDisplay_OpenCV.o: src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.o
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageDisplay_OpenCV.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.o
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.o
|
||||||
|
|
||||||
|
src/IOWrapper/OpenCV/ImageDisplay_OpenCV.i: src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.i
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageDisplay_OpenCV.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.i
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.i
|
||||||
|
|
||||||
|
src/IOWrapper/OpenCV/ImageDisplay_OpenCV.s: src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.s
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageDisplay_OpenCV.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.s
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp.s
|
||||||
|
|
||||||
|
src/IOWrapper/OpenCV/ImageRW_OpenCV.o: src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.o
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageRW_OpenCV.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.o
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.o
|
||||||
|
|
||||||
|
src/IOWrapper/OpenCV/ImageRW_OpenCV.i: src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.i
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageRW_OpenCV.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.i
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.i
|
||||||
|
|
||||||
|
src/IOWrapper/OpenCV/ImageRW_OpenCV.s: src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.s
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageRW_OpenCV.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.s
|
||||||
|
.PHONY : src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp.s
|
||||||
|
|
||||||
|
src/IOWrapper/Pangolin/KeyFrameDisplay.o: src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.o
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/KeyFrameDisplay.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.o
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.o
|
||||||
|
|
||||||
|
src/IOWrapper/Pangolin/KeyFrameDisplay.i: src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.i
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/KeyFrameDisplay.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.i
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.i
|
||||||
|
|
||||||
|
src/IOWrapper/Pangolin/KeyFrameDisplay.s: src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.s
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/KeyFrameDisplay.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.s
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/KeyFrameDisplay.cpp.s
|
||||||
|
|
||||||
|
src/IOWrapper/Pangolin/PangolinDSOViewer.o: src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.o
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/PangolinDSOViewer.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.o
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.o
|
||||||
|
|
||||||
|
src/IOWrapper/Pangolin/PangolinDSOViewer.i: src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.i
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/PangolinDSOViewer.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.i
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.i
|
||||||
|
|
||||||
|
src/IOWrapper/Pangolin/PangolinDSOViewer.s: src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.s
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/PangolinDSOViewer.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.s
|
||||||
|
.PHONY : src/IOWrapper/Pangolin/PangolinDSOViewer.cpp.s
|
||||||
|
|
||||||
|
src/OptimizationBackend/AccumulatedSCHessian.o: src/OptimizationBackend/AccumulatedSCHessian.cpp.o
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedSCHessian.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/OptimizationBackend/AccumulatedSCHessian.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedSCHessian.cpp.o
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedSCHessian.cpp.o
|
||||||
|
|
||||||
|
src/OptimizationBackend/AccumulatedSCHessian.i: src/OptimizationBackend/AccumulatedSCHessian.cpp.i
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedSCHessian.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/OptimizationBackend/AccumulatedSCHessian.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedSCHessian.cpp.i
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedSCHessian.cpp.i
|
||||||
|
|
||||||
|
src/OptimizationBackend/AccumulatedSCHessian.s: src/OptimizationBackend/AccumulatedSCHessian.cpp.s
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedSCHessian.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/OptimizationBackend/AccumulatedSCHessian.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedSCHessian.cpp.s
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedSCHessian.cpp.s
|
||||||
|
|
||||||
|
src/OptimizationBackend/AccumulatedTopHessian.o: src/OptimizationBackend/AccumulatedTopHessian.cpp.o
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedTopHessian.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/OptimizationBackend/AccumulatedTopHessian.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedTopHessian.cpp.o
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedTopHessian.cpp.o
|
||||||
|
|
||||||
|
src/OptimizationBackend/AccumulatedTopHessian.i: src/OptimizationBackend/AccumulatedTopHessian.cpp.i
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedTopHessian.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/OptimizationBackend/AccumulatedTopHessian.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedTopHessian.cpp.i
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedTopHessian.cpp.i
|
||||||
|
|
||||||
|
src/OptimizationBackend/AccumulatedTopHessian.s: src/OptimizationBackend/AccumulatedTopHessian.cpp.s
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedTopHessian.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/OptimizationBackend/AccumulatedTopHessian.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/AccumulatedTopHessian.cpp.s
|
||||||
|
.PHONY : src/OptimizationBackend/AccumulatedTopHessian.cpp.s
|
||||||
|
|
||||||
|
src/OptimizationBackend/EnergyFunctional.o: src/OptimizationBackend/EnergyFunctional.cpp.o
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctional.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/OptimizationBackend/EnergyFunctional.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctional.cpp.o
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctional.cpp.o
|
||||||
|
|
||||||
|
src/OptimizationBackend/EnergyFunctional.i: src/OptimizationBackend/EnergyFunctional.cpp.i
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctional.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/OptimizationBackend/EnergyFunctional.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctional.cpp.i
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctional.cpp.i
|
||||||
|
|
||||||
|
src/OptimizationBackend/EnergyFunctional.s: src/OptimizationBackend/EnergyFunctional.cpp.s
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctional.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/OptimizationBackend/EnergyFunctional.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctional.cpp.s
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctional.cpp.s
|
||||||
|
|
||||||
|
src/OptimizationBackend/EnergyFunctionalStructs.o: src/OptimizationBackend/EnergyFunctionalStructs.cpp.o
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctionalStructs.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/OptimizationBackend/EnergyFunctionalStructs.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctionalStructs.cpp.o
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctionalStructs.cpp.o
|
||||||
|
|
||||||
|
src/OptimizationBackend/EnergyFunctionalStructs.i: src/OptimizationBackend/EnergyFunctionalStructs.cpp.i
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctionalStructs.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/OptimizationBackend/EnergyFunctionalStructs.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctionalStructs.cpp.i
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctionalStructs.cpp.i
|
||||||
|
|
||||||
|
src/OptimizationBackend/EnergyFunctionalStructs.s: src/OptimizationBackend/EnergyFunctionalStructs.cpp.s
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctionalStructs.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/OptimizationBackend/EnergyFunctionalStructs.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/OptimizationBackend/EnergyFunctionalStructs.cpp.s
|
||||||
|
.PHONY : src/OptimizationBackend/EnergyFunctionalStructs.cpp.s
|
||||||
|
|
||||||
|
src/main_dso_pangolin.o: src/main_dso_pangolin.cpp.o
|
||||||
|
.PHONY : src/main_dso_pangolin.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/main_dso_pangolin.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso_dataset.dir/build.make CMakeFiles/dso_dataset.dir/src/main_dso_pangolin.cpp.o
|
||||||
|
.PHONY : src/main_dso_pangolin.cpp.o
|
||||||
|
|
||||||
|
src/main_dso_pangolin.i: src/main_dso_pangolin.cpp.i
|
||||||
|
.PHONY : src/main_dso_pangolin.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/main_dso_pangolin.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso_dataset.dir/build.make CMakeFiles/dso_dataset.dir/src/main_dso_pangolin.cpp.i
|
||||||
|
.PHONY : src/main_dso_pangolin.cpp.i
|
||||||
|
|
||||||
|
src/main_dso_pangolin.s: src/main_dso_pangolin.cpp.s
|
||||||
|
.PHONY : src/main_dso_pangolin.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/main_dso_pangolin.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso_dataset.dir/build.make CMakeFiles/dso_dataset.dir/src/main_dso_pangolin.cpp.s
|
||||||
|
.PHONY : src/main_dso_pangolin.cpp.s
|
||||||
|
|
||||||
|
src/util/Undistort.o: src/util/Undistort.cpp.o
|
||||||
|
.PHONY : src/util/Undistort.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/util/Undistort.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/util/Undistort.cpp.o
|
||||||
|
.PHONY : src/util/Undistort.cpp.o
|
||||||
|
|
||||||
|
src/util/Undistort.i: src/util/Undistort.cpp.i
|
||||||
|
.PHONY : src/util/Undistort.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/util/Undistort.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/util/Undistort.cpp.i
|
||||||
|
.PHONY : src/util/Undistort.cpp.i
|
||||||
|
|
||||||
|
src/util/Undistort.s: src/util/Undistort.cpp.s
|
||||||
|
.PHONY : src/util/Undistort.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/util/Undistort.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/util/Undistort.cpp.s
|
||||||
|
.PHONY : src/util/Undistort.cpp.s
|
||||||
|
|
||||||
|
src/util/globalCalib.o: src/util/globalCalib.cpp.o
|
||||||
|
.PHONY : src/util/globalCalib.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/util/globalCalib.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/util/globalCalib.cpp.o
|
||||||
|
.PHONY : src/util/globalCalib.cpp.o
|
||||||
|
|
||||||
|
src/util/globalCalib.i: src/util/globalCalib.cpp.i
|
||||||
|
.PHONY : src/util/globalCalib.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/util/globalCalib.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/util/globalCalib.cpp.i
|
||||||
|
.PHONY : src/util/globalCalib.cpp.i
|
||||||
|
|
||||||
|
src/util/globalCalib.s: src/util/globalCalib.cpp.s
|
||||||
|
.PHONY : src/util/globalCalib.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/util/globalCalib.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/util/globalCalib.cpp.s
|
||||||
|
.PHONY : src/util/globalCalib.cpp.s
|
||||||
|
|
||||||
|
src/util/settings.o: src/util/settings.cpp.o
|
||||||
|
.PHONY : src/util/settings.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/util/settings.cpp.o:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/util/settings.cpp.o
|
||||||
|
.PHONY : src/util/settings.cpp.o
|
||||||
|
|
||||||
|
src/util/settings.i: src/util/settings.cpp.i
|
||||||
|
.PHONY : src/util/settings.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/util/settings.cpp.i:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/util/settings.cpp.i
|
||||||
|
.PHONY : src/util/settings.cpp.i
|
||||||
|
|
||||||
|
src/util/settings.s: src/util/settings.cpp.s
|
||||||
|
.PHONY : src/util/settings.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/util/settings.cpp.s:
|
||||||
|
$(MAKE) $(MAKESILENT) -f CMakeFiles/dso.dir/build.make CMakeFiles/dso.dir/src/util/settings.cpp.s
|
||||||
|
.PHONY : src/util/settings.cpp.s
|
||||||
|
|
||||||
|
# Help Target
|
||||||
|
help:
|
||||||
|
@echo "The following are some of the valid targets for this Makefile:"
|
||||||
|
@echo "... all (the default if no target is provided)"
|
||||||
|
@echo "... clean"
|
||||||
|
@echo "... depend"
|
||||||
|
@echo "... edit_cache"
|
||||||
|
@echo "... rebuild_cache"
|
||||||
|
@echo "... dso"
|
||||||
|
@echo "... dso_dataset"
|
||||||
|
@echo "... src/FullSystem/CoarseInitializer.o"
|
||||||
|
@echo "... src/FullSystem/CoarseInitializer.i"
|
||||||
|
@echo "... src/FullSystem/CoarseInitializer.s"
|
||||||
|
@echo "... src/FullSystem/CoarseTracker.o"
|
||||||
|
@echo "... src/FullSystem/CoarseTracker.i"
|
||||||
|
@echo "... src/FullSystem/CoarseTracker.s"
|
||||||
|
@echo "... src/FullSystem/FullSystem.o"
|
||||||
|
@echo "... src/FullSystem/FullSystem.i"
|
||||||
|
@echo "... src/FullSystem/FullSystem.s"
|
||||||
|
@echo "... src/FullSystem/FullSystemDebugStuff.o"
|
||||||
|
@echo "... src/FullSystem/FullSystemDebugStuff.i"
|
||||||
|
@echo "... src/FullSystem/FullSystemDebugStuff.s"
|
||||||
|
@echo "... src/FullSystem/FullSystemMarginalize.o"
|
||||||
|
@echo "... src/FullSystem/FullSystemMarginalize.i"
|
||||||
|
@echo "... src/FullSystem/FullSystemMarginalize.s"
|
||||||
|
@echo "... src/FullSystem/FullSystemOptPoint.o"
|
||||||
|
@echo "... src/FullSystem/FullSystemOptPoint.i"
|
||||||
|
@echo "... src/FullSystem/FullSystemOptPoint.s"
|
||||||
|
@echo "... src/FullSystem/FullSystemOptimize.o"
|
||||||
|
@echo "... src/FullSystem/FullSystemOptimize.i"
|
||||||
|
@echo "... src/FullSystem/FullSystemOptimize.s"
|
||||||
|
@echo "... src/FullSystem/HessianBlocks.o"
|
||||||
|
@echo "... src/FullSystem/HessianBlocks.i"
|
||||||
|
@echo "... src/FullSystem/HessianBlocks.s"
|
||||||
|
@echo "... src/FullSystem/ImmaturePoint.o"
|
||||||
|
@echo "... src/FullSystem/ImmaturePoint.i"
|
||||||
|
@echo "... src/FullSystem/ImmaturePoint.s"
|
||||||
|
@echo "... src/FullSystem/PixelSelector2.o"
|
||||||
|
@echo "... src/FullSystem/PixelSelector2.i"
|
||||||
|
@echo "... src/FullSystem/PixelSelector2.s"
|
||||||
|
@echo "... src/FullSystem/Residuals.o"
|
||||||
|
@echo "... src/FullSystem/Residuals.i"
|
||||||
|
@echo "... src/FullSystem/Residuals.s"
|
||||||
|
@echo "... src/IOWrapper/OpenCV/ImageDisplay_OpenCV.o"
|
||||||
|
@echo "... src/IOWrapper/OpenCV/ImageDisplay_OpenCV.i"
|
||||||
|
@echo "... src/IOWrapper/OpenCV/ImageDisplay_OpenCV.s"
|
||||||
|
@echo "... src/IOWrapper/OpenCV/ImageRW_OpenCV.o"
|
||||||
|
@echo "... src/IOWrapper/OpenCV/ImageRW_OpenCV.i"
|
||||||
|
@echo "... src/IOWrapper/OpenCV/ImageRW_OpenCV.s"
|
||||||
|
@echo "... src/IOWrapper/Pangolin/KeyFrameDisplay.o"
|
||||||
|
@echo "... src/IOWrapper/Pangolin/KeyFrameDisplay.i"
|
||||||
|
@echo "... src/IOWrapper/Pangolin/KeyFrameDisplay.s"
|
||||||
|
@echo "... src/IOWrapper/Pangolin/PangolinDSOViewer.o"
|
||||||
|
@echo "... src/IOWrapper/Pangolin/PangolinDSOViewer.i"
|
||||||
|
@echo "... src/IOWrapper/Pangolin/PangolinDSOViewer.s"
|
||||||
|
@echo "... src/OptimizationBackend/AccumulatedSCHessian.o"
|
||||||
|
@echo "... src/OptimizationBackend/AccumulatedSCHessian.i"
|
||||||
|
@echo "... src/OptimizationBackend/AccumulatedSCHessian.s"
|
||||||
|
@echo "... src/OptimizationBackend/AccumulatedTopHessian.o"
|
||||||
|
@echo "... src/OptimizationBackend/AccumulatedTopHessian.i"
|
||||||
|
@echo "... src/OptimizationBackend/AccumulatedTopHessian.s"
|
||||||
|
@echo "... src/OptimizationBackend/EnergyFunctional.o"
|
||||||
|
@echo "... src/OptimizationBackend/EnergyFunctional.i"
|
||||||
|
@echo "... src/OptimizationBackend/EnergyFunctional.s"
|
||||||
|
@echo "... src/OptimizationBackend/EnergyFunctionalStructs.o"
|
||||||
|
@echo "... src/OptimizationBackend/EnergyFunctionalStructs.i"
|
||||||
|
@echo "... src/OptimizationBackend/EnergyFunctionalStructs.s"
|
||||||
|
@echo "... src/main_dso_pangolin.o"
|
||||||
|
@echo "... src/main_dso_pangolin.i"
|
||||||
|
@echo "... src/main_dso_pangolin.s"
|
||||||
|
@echo "... src/util/Undistort.o"
|
||||||
|
@echo "... src/util/Undistort.i"
|
||||||
|
@echo "... src/util/Undistort.s"
|
||||||
|
@echo "... src/util/globalCalib.o"
|
||||||
|
@echo "... src/util/globalCalib.i"
|
||||||
|
@echo "... src/util/globalCalib.s"
|
||||||
|
@echo "... src/util/settings.o"
|
||||||
|
@echo "... src/util/settings.i"
|
||||||
|
@echo "... src/util/settings.s"
|
||||||
|
.PHONY : help
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets to cleanup operation of make.
|
||||||
|
|
||||||
|
# Special rule to run CMake to check the build system integrity.
|
||||||
|
# No rule that depends on this can have commands that come from listfiles
|
||||||
|
# because they might be regenerated.
|
||||||
|
cmake_check_build_system:
|
||||||
|
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
|
||||||
|
.PHONY : cmake_check_build_system
|
||||||
|
|
||||||
3
cmake-build-debug/Testing/Temporary/LastTest.log
Normal file
3
cmake-build-debug/Testing/Temporary/LastTest.log
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Start testing: Jun 17 10:03 MSK
|
||||||
|
----------------------------------------------------------
|
||||||
|
End testing: Jun 17 10:03 MSK
|
||||||
BIN
cmake-build-debug/bin/dso_dataset
Executable file
BIN
cmake-build-debug/bin/dso_dataset
Executable file
Binary file not shown.
0
cmake-build-debug/bin/result_online.txt
Normal file
0
cmake-build-debug/bin/result_online.txt
Normal file
54
cmake-build-debug/cmake_install.cmake
Normal file
54
cmake-build-debug/cmake_install.cmake
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# Install script for directory: /home/ivan/ivan/git/work_drivecast2/SLAM/dso
|
||||||
|
|
||||||
|
# Set the install prefix
|
||||||
|
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
|
||||||
|
set(CMAKE_INSTALL_PREFIX "/usr/local")
|
||||||
|
endif()
|
||||||
|
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||||
|
|
||||||
|
# Set the install configuration name.
|
||||||
|
if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
||||||
|
if(BUILD_TYPE)
|
||||||
|
string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
|
||||||
|
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
|
||||||
|
else()
|
||||||
|
set(CMAKE_INSTALL_CONFIG_NAME "Debug")
|
||||||
|
endif()
|
||||||
|
message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Set the component getting installed.
|
||||||
|
if(NOT CMAKE_INSTALL_COMPONENT)
|
||||||
|
if(COMPONENT)
|
||||||
|
message(STATUS "Install component: \"${COMPONENT}\"")
|
||||||
|
set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
|
||||||
|
else()
|
||||||
|
set(CMAKE_INSTALL_COMPONENT)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Install shared libraries without execute permission?
|
||||||
|
if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
|
||||||
|
set(CMAKE_INSTALL_SO_NO_EXE "1")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Is this installation the result of a crosscompile?
|
||||||
|
if(NOT DEFINED CMAKE_CROSSCOMPILING)
|
||||||
|
set(CMAKE_CROSSCOMPILING "FALSE")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Set default install directory permissions.
|
||||||
|
if(NOT DEFINED CMAKE_OBJDUMP)
|
||||||
|
set(CMAKE_OBJDUMP "/usr/bin/objdump")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_INSTALL_COMPONENT)
|
||||||
|
set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
|
||||||
|
else()
|
||||||
|
set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT
|
||||||
|
"${CMAKE_INSTALL_MANIFEST_FILES}")
|
||||||
|
file(WRITE "/home/ivan/ivan/git/work_drivecast2/SLAM/dso/cmake-build-debug/${CMAKE_INSTALL_MANIFEST}"
|
||||||
|
"${CMAKE_INSTALL_MANIFEST_CONTENT}")
|
||||||
81
cmake/FindEigen3.cmake
Normal file
81
cmake/FindEigen3.cmake
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# - Try to find Eigen3 lib
|
||||||
|
#
|
||||||
|
# This module supports requiring a minimum version, e.g. you can do
|
||||||
|
# find_package(Eigen3 3.1.2)
|
||||||
|
# to require version 3.1.2 or newer of Eigen3.
|
||||||
|
#
|
||||||
|
# Once done this will define
|
||||||
|
#
|
||||||
|
# EIGEN3_FOUND - system has eigen lib with correct version
|
||||||
|
# EIGEN3_INCLUDE_DIR - the eigen include directory
|
||||||
|
# EIGEN3_VERSION - eigen version
|
||||||
|
|
||||||
|
# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
|
||||||
|
# Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
|
||||||
|
# Copyright (c) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
|
||||||
|
# Redistribution and use is allowed according to the terms of the 2-clause BSD license.
|
||||||
|
|
||||||
|
if(NOT Eigen3_FIND_VERSION)
|
||||||
|
if(NOT Eigen3_FIND_VERSION_MAJOR)
|
||||||
|
set(Eigen3_FIND_VERSION_MAJOR 2)
|
||||||
|
endif(NOT Eigen3_FIND_VERSION_MAJOR)
|
||||||
|
if(NOT Eigen3_FIND_VERSION_MINOR)
|
||||||
|
set(Eigen3_FIND_VERSION_MINOR 91)
|
||||||
|
endif(NOT Eigen3_FIND_VERSION_MINOR)
|
||||||
|
if(NOT Eigen3_FIND_VERSION_PATCH)
|
||||||
|
set(Eigen3_FIND_VERSION_PATCH 0)
|
||||||
|
endif(NOT Eigen3_FIND_VERSION_PATCH)
|
||||||
|
|
||||||
|
set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}")
|
||||||
|
endif(NOT Eigen3_FIND_VERSION)
|
||||||
|
|
||||||
|
macro(_eigen3_check_version)
|
||||||
|
file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)
|
||||||
|
|
||||||
|
string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
|
||||||
|
set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
|
||||||
|
string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
|
||||||
|
set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
|
||||||
|
string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
|
||||||
|
set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")
|
||||||
|
|
||||||
|
set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
|
||||||
|
if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
|
||||||
|
set(EIGEN3_VERSION_OK FALSE)
|
||||||
|
else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
|
||||||
|
set(EIGEN3_VERSION_OK TRUE)
|
||||||
|
endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
|
||||||
|
|
||||||
|
if(NOT EIGEN3_VERSION_OK)
|
||||||
|
|
||||||
|
message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, "
|
||||||
|
"but at least version ${Eigen3_FIND_VERSION} is required")
|
||||||
|
endif(NOT EIGEN3_VERSION_OK)
|
||||||
|
endmacro(_eigen3_check_version)
|
||||||
|
|
||||||
|
if (EIGEN3_INCLUDE_DIR)
|
||||||
|
|
||||||
|
# in cache already
|
||||||
|
_eigen3_check_version()
|
||||||
|
set(EIGEN3_FOUND ${EIGEN3_VERSION_OK})
|
||||||
|
|
||||||
|
else (EIGEN3_INCLUDE_DIR)
|
||||||
|
|
||||||
|
find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
|
||||||
|
PATHS
|
||||||
|
${CMAKE_INSTALL_PREFIX}/include
|
||||||
|
${KDE4_INCLUDE_DIR}
|
||||||
|
PATH_SUFFIXES eigen3 eigen
|
||||||
|
)
|
||||||
|
|
||||||
|
if(EIGEN3_INCLUDE_DIR)
|
||||||
|
_eigen3_check_version()
|
||||||
|
endif(EIGEN3_INCLUDE_DIR)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK)
|
||||||
|
|
||||||
|
mark_as_advanced(EIGEN3_INCLUDE_DIR)
|
||||||
|
|
||||||
|
endif(EIGEN3_INCLUDE_DIR)
|
||||||
|
|
||||||
37
cmake/FindLibZip.cmake
Normal file
37
cmake/FindLibZip.cmake
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# Finds libzip.
|
||||||
|
#
|
||||||
|
# This module defines:
|
||||||
|
# LIBZIP_INCLUDE_DIR_ZIP
|
||||||
|
# LIBZIP_INCLUDE_DIR_ZIPCONF
|
||||||
|
# LIBZIP_LIBRARY
|
||||||
|
#
|
||||||
|
|
||||||
|
find_package(PkgConfig)
|
||||||
|
pkg_check_modules(PC_LIBZIP QUIET libzip)
|
||||||
|
|
||||||
|
find_path(LIBZIP_INCLUDE_DIR_ZIP
|
||||||
|
NAMES zip.h
|
||||||
|
HINTS ${PC_LIBZIP_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
find_path(LIBZIP_INCLUDE_DIR_ZIPCONF
|
||||||
|
NAMES zipconf.h
|
||||||
|
HINTS ${PC_LIBZIP_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
find_library(LIBZIP_LIBRARY
|
||||||
|
NAMES zip)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
|
||||||
|
LIBZIP DEFAULT_MSG
|
||||||
|
LIBZIP_LIBRARY LIBZIP_INCLUDE_DIR_ZIP LIBZIP_INCLUDE_DIR_ZIPCONF)
|
||||||
|
|
||||||
|
set(LIBZIP_VERSION 0)
|
||||||
|
|
||||||
|
if (LIBZIP_INCLUDE_DIR_ZIPCONF)
|
||||||
|
FILE(READ "${LIBZIP_INCLUDE_DIR_ZIPCONF}/zipconf.h" _LIBZIP_VERSION_CONTENTS)
|
||||||
|
if (_LIBZIP_VERSION_CONTENTS)
|
||||||
|
STRING(REGEX REPLACE ".*#define LIBZIP_VERSION \"([0-9.]+)\".*" "\\1" LIBZIP_VERSION "${_LIBZIP_VERSION_CONTENTS}")
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set(LIBZIP_VERSION ${LIBZIP_VERSION} CACHE STRING "Version number of libzip")
|
||||||
128
cmake/FindSuiteParse.cmake
Normal file
128
cmake/FindSuiteParse.cmake
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
FIND_PATH(CHOLMOD_INCLUDE_DIR NAMES cholmod.h amd.h camd.h
|
||||||
|
PATHS
|
||||||
|
${SUITE_SPARSE_ROOT}/include
|
||||||
|
/usr/include/suitesparse
|
||||||
|
/usr/include/ufsparse
|
||||||
|
/opt/local/include/ufsparse
|
||||||
|
/usr/local/include/ufsparse
|
||||||
|
/sw/include/ufsparse
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(CHOLMOD_LIBRARY NAMES cholmod
|
||||||
|
PATHS
|
||||||
|
${SUITE_SPARSE_ROOT}/lib
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(AMD_LIBRARY NAMES SHARED NAMES amd
|
||||||
|
PATHS
|
||||||
|
${SUITE_SPARSE_ROOT}/lib
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(CAMD_LIBRARY NAMES camd
|
||||||
|
PATHS
|
||||||
|
${SUITE_SPARSE_ROOT}/lib
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(SUITESPARSECONFIG_LIBRARY NAMES suitesparseconfig
|
||||||
|
PATHS
|
||||||
|
${SUITE_SPARSE_ROOT}/lib
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Different platforms seemingly require linking against different sets of libraries
|
||||||
|
IF(CYGWIN)
|
||||||
|
FIND_PACKAGE(PkgConfig)
|
||||||
|
FIND_LIBRARY(COLAMD_LIBRARY NAMES colamd
|
||||||
|
PATHS
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
PKG_CHECK_MODULES(LAPACK lapack)
|
||||||
|
|
||||||
|
SET(CHOLMOD_LIBRARIES ${CHOLMOD_LIBRARY} ${AMD_LIBRARY} ${CAMD_LIBRARY} ${COLAMD_LIBRARY} ${CCOLAMD_LIBRARY} ${LAPACK_LIBRARIES})
|
||||||
|
|
||||||
|
# MacPorts build of the SparseSuite requires linking against extra libraries
|
||||||
|
|
||||||
|
ELSEIF(APPLE)
|
||||||
|
|
||||||
|
FIND_LIBRARY(COLAMD_LIBRARY NAMES colamd
|
||||||
|
PATHS
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(CCOLAMD_LIBRARY NAMES ccolamd
|
||||||
|
PATHS
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(METIS_LIBRARY NAMES metis
|
||||||
|
PATHS
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
SET(CHOLMOD_LIBRARIES ${CHOLMOD_LIBRARY} ${AMD_LIBRARY} ${CAMD_LIBRARY} ${COLAMD_LIBRARY} ${CCOLAMD_LIBRARY} ${METIS_LIBRARY} "-framework Accelerate")
|
||||||
|
ELSE(APPLE)
|
||||||
|
SET(CHOLMOD_LIBRARIES ${CHOLMOD_LIBRARY} ${AMD_LIBRARY})
|
||||||
|
ENDIF(CYGWIN)
|
||||||
|
|
||||||
|
IF(CHOLMOD_INCLUDE_DIR AND CHOLMOD_LIBRARIES)
|
||||||
|
SET(CHOLMOD_FOUND TRUE)
|
||||||
|
ELSE(CHOLMOD_INCLUDE_DIR AND CHOLMOD_LIBRARIES)
|
||||||
|
SET(CHOLMOD_FOUND FALSE)
|
||||||
|
ENDIF(CHOLMOD_INCLUDE_DIR AND CHOLMOD_LIBRARIES)
|
||||||
|
|
||||||
|
# Look for csparse; note the difference in the directory specifications!
|
||||||
|
FIND_PATH(CSPARSE_INCLUDE_DIR NAMES cs.h
|
||||||
|
PATHS
|
||||||
|
/usr/include/suitesparse
|
||||||
|
/usr/include
|
||||||
|
/opt/local/include
|
||||||
|
/usr/local/include
|
||||||
|
/sw/include
|
||||||
|
/usr/include/ufsparse
|
||||||
|
/opt/local/include/ufsparse
|
||||||
|
/usr/local/include/ufsparse
|
||||||
|
/sw/include/ufsparse
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(CSPARSE_LIBRARY NAMES cxsparse
|
||||||
|
PATHS
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
IF(CSPARSE_INCLUDE_DIR AND CSPARSE_LIBRARY)
|
||||||
|
SET(CSPARSE_FOUND TRUE)
|
||||||
|
ELSE(CSPARSE_INCLUDE_DIR AND CSPARSE_LIBRARY)
|
||||||
|
SET(CSPARSE_FOUND FALSE)
|
||||||
|
ENDIF(CSPARSE_INCLUDE_DIR AND CSPARSE_LIBRARY)
|
||||||
|
|
||||||
1043
src/FullSystem/CoarseInitializer.cpp
Normal file
1043
src/FullSystem/CoarseInitializer.cpp
Normal file
File diff suppressed because it is too large
Load Diff
192
src/FullSystem/CoarseInitializer.h
Normal file
192
src/FullSystem/CoarseInitializer.h
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "OptimizationBackend/MatrixAccumulators.h"
|
||||||
|
#include "IOWrapper/Output3DWrapper.h"
|
||||||
|
#include "util/settings.h"
|
||||||
|
#include "vector"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
struct CalibHessian;
|
||||||
|
struct FrameHessian;
|
||||||
|
|
||||||
|
|
||||||
|
struct Pnt
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
// index in jacobian. never changes (actually, there is no reason why).
|
||||||
|
float u,v;
|
||||||
|
|
||||||
|
// idepth / isgood / energy during optimization.
|
||||||
|
float idepth;
|
||||||
|
bool isGood;
|
||||||
|
Vec2f energy; // (UenergyPhotometric, energyRegularizer)
|
||||||
|
bool isGood_new;
|
||||||
|
float idepth_new;
|
||||||
|
Vec2f energy_new;
|
||||||
|
|
||||||
|
float iR;
|
||||||
|
float iRSumNum;
|
||||||
|
|
||||||
|
float lastHessian;
|
||||||
|
float lastHessian_new;
|
||||||
|
|
||||||
|
// max stepsize for idepth (corresponding to max. movement in pixel-space).
|
||||||
|
float maxstep;
|
||||||
|
|
||||||
|
// idx (x+y*w) of closest point one pyramid level above.
|
||||||
|
int parent;
|
||||||
|
float parentDist;
|
||||||
|
|
||||||
|
// idx (x+y*w) of up to 10 nearest points in pixel space.
|
||||||
|
int neighbours[10];
|
||||||
|
float neighboursDist[10];
|
||||||
|
|
||||||
|
float my_type;
|
||||||
|
float outlierTH;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CoarseInitializer {
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
CoarseInitializer(int w, int h);
|
||||||
|
~CoarseInitializer();
|
||||||
|
|
||||||
|
|
||||||
|
void setFirst( CalibHessian* HCalib, FrameHessian* newFrameHessian);
|
||||||
|
bool trackFrame(FrameHessian* newFrameHessian, std::vector<IOWrap::Output3DWrapper*> &wraps);
|
||||||
|
void calcTGrads(FrameHessian* newFrameHessian);
|
||||||
|
|
||||||
|
int frameID;
|
||||||
|
bool fixAffine;
|
||||||
|
bool printDebug;
|
||||||
|
|
||||||
|
Pnt* points[PYR_LEVELS];
|
||||||
|
int numPoints[PYR_LEVELS];
|
||||||
|
AffLight thisToNext_aff;
|
||||||
|
SE3 thisToNext;
|
||||||
|
|
||||||
|
|
||||||
|
FrameHessian* firstFrame;
|
||||||
|
FrameHessian* newFrame;
|
||||||
|
private:
|
||||||
|
Mat33 K[PYR_LEVELS];
|
||||||
|
Mat33 Ki[PYR_LEVELS];
|
||||||
|
double fx[PYR_LEVELS];
|
||||||
|
double fy[PYR_LEVELS];
|
||||||
|
double fxi[PYR_LEVELS];
|
||||||
|
double fyi[PYR_LEVELS];
|
||||||
|
double cx[PYR_LEVELS];
|
||||||
|
double cy[PYR_LEVELS];
|
||||||
|
double cxi[PYR_LEVELS];
|
||||||
|
double cyi[PYR_LEVELS];
|
||||||
|
int w[PYR_LEVELS];
|
||||||
|
int h[PYR_LEVELS];
|
||||||
|
void makeK(CalibHessian* HCalib);
|
||||||
|
|
||||||
|
bool snapped;
|
||||||
|
int snappedAt;
|
||||||
|
|
||||||
|
// pyramid images & levels on all levels
|
||||||
|
Eigen::Vector3f* dINew[PYR_LEVELS];
|
||||||
|
Eigen::Vector3f* dIFist[PYR_LEVELS];
|
||||||
|
|
||||||
|
Eigen::DiagonalMatrix<float, 8> wM;
|
||||||
|
|
||||||
|
// temporary buffers for H and b.
|
||||||
|
Vec10f* JbBuffer; // 0-7: sum(dd * dp). 8: sum(res*dd). 9: 1/(1+sum(dd*dd))=inverse hessian entry.
|
||||||
|
Vec10f* JbBuffer_new;
|
||||||
|
|
||||||
|
Accumulator9 acc9;
|
||||||
|
Accumulator9 acc9SC;
|
||||||
|
|
||||||
|
|
||||||
|
Vec3f dGrads[PYR_LEVELS];
|
||||||
|
|
||||||
|
float alphaK;
|
||||||
|
float alphaW;
|
||||||
|
float regWeight;
|
||||||
|
float couplingWeight;
|
||||||
|
|
||||||
|
Vec3f calcResAndGS(
|
||||||
|
int lvl,
|
||||||
|
Mat88f &H_out, Vec8f &b_out,
|
||||||
|
Mat88f &H_out_sc, Vec8f &b_out_sc,
|
||||||
|
const SE3 &refToNew, AffLight refToNew_aff,
|
||||||
|
bool plot);
|
||||||
|
Vec3f calcEC(int lvl); // returns OLD NERGY, NEW ENERGY, NUM TERMS.
|
||||||
|
void optReg(int lvl);
|
||||||
|
|
||||||
|
void propagateUp(int srcLvl);
|
||||||
|
void propagateDown(int srcLvl);
|
||||||
|
float rescale();
|
||||||
|
|
||||||
|
void resetPoints(int lvl);
|
||||||
|
void doStep(int lvl, float lambda, Vec8f inc);
|
||||||
|
void applyStep(int lvl);
|
||||||
|
|
||||||
|
void makeGradients(Eigen::Vector3f** data);
|
||||||
|
|
||||||
|
void debugPlot(int lvl, std::vector<IOWrap::Output3DWrapper*> &wraps);
|
||||||
|
void makeNN();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct FLANNPointcloud
|
||||||
|
{
|
||||||
|
inline FLANNPointcloud() {num=0; points=0;}
|
||||||
|
inline FLANNPointcloud(int n, Pnt* p) : num(n), points(p) {}
|
||||||
|
int num;
|
||||||
|
Pnt* points;
|
||||||
|
inline size_t kdtree_get_point_count() const { return num; }
|
||||||
|
inline float kdtree_distance(const float *p1, const size_t idx_p2,size_t /*size*/) const
|
||||||
|
{
|
||||||
|
const float d0=p1[0]-points[idx_p2].u;
|
||||||
|
const float d1=p1[1]-points[idx_p2].v;
|
||||||
|
return d0*d0+d1*d1;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float kdtree_get_pt(const size_t idx, int dim) const
|
||||||
|
{
|
||||||
|
if (dim==0) return points[idx].u;
|
||||||
|
else return points[idx].v;
|
||||||
|
}
|
||||||
|
template <class BBOX>
|
||||||
|
bool kdtree_get_bbox(BBOX& /* bb */) const { return false; }
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
1055
src/FullSystem/CoarseTracker.cpp
Normal file
1055
src/FullSystem/CoarseTracker.cpp
Normal file
File diff suppressed because it is too large
Load Diff
176
src/FullSystem/CoarseTracker.h
Normal file
176
src/FullSystem/CoarseTracker.h
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "vector"
|
||||||
|
#include <math.h>
|
||||||
|
#include "util/settings.h"
|
||||||
|
#include "OptimizationBackend/MatrixAccumulators.h"
|
||||||
|
#include "IOWrapper/Output3DWrapper.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
struct CalibHessian;
|
||||||
|
struct FrameHessian;
|
||||||
|
struct PointFrameResidual;
|
||||||
|
|
||||||
|
class CoarseTracker {
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
|
||||||
|
CoarseTracker(int w, int h);
|
||||||
|
~CoarseTracker();
|
||||||
|
|
||||||
|
bool trackNewestCoarse(
|
||||||
|
FrameHessian* newFrameHessian,
|
||||||
|
SE3 &lastToNew_out, AffLight &aff_g2l_out,
|
||||||
|
int coarsestLvl, Vec5 minResForAbort,
|
||||||
|
IOWrap::Output3DWrapper* wrap=0);
|
||||||
|
|
||||||
|
void setCoarseTrackingRef(
|
||||||
|
std::vector<FrameHessian*> frameHessians);
|
||||||
|
|
||||||
|
void makeK(
|
||||||
|
CalibHessian* HCalib);
|
||||||
|
|
||||||
|
bool debugPrint, debugPlot;
|
||||||
|
|
||||||
|
Mat33f K[PYR_LEVELS];
|
||||||
|
Mat33f Ki[PYR_LEVELS];
|
||||||
|
float fx[PYR_LEVELS];
|
||||||
|
float fy[PYR_LEVELS];
|
||||||
|
float fxi[PYR_LEVELS];
|
||||||
|
float fyi[PYR_LEVELS];
|
||||||
|
float cx[PYR_LEVELS];
|
||||||
|
float cy[PYR_LEVELS];
|
||||||
|
float cxi[PYR_LEVELS];
|
||||||
|
float cyi[PYR_LEVELS];
|
||||||
|
int w[PYR_LEVELS];
|
||||||
|
int h[PYR_LEVELS];
|
||||||
|
|
||||||
|
void debugPlotIDepthMap(float* minID, float* maxID, std::vector<IOWrap::Output3DWrapper*> &wraps);
|
||||||
|
void debugPlotIDepthMapFloat(std::vector<IOWrap::Output3DWrapper*> &wraps);
|
||||||
|
|
||||||
|
FrameHessian* lastRef;
|
||||||
|
AffLight lastRef_aff_g2l;
|
||||||
|
FrameHessian* newFrame;
|
||||||
|
int refFrameID;
|
||||||
|
|
||||||
|
// act as pure ouptut
|
||||||
|
Vec5 lastResiduals;
|
||||||
|
Vec3 lastFlowIndicators;
|
||||||
|
double firstCoarseRMSE;
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
void makeCoarseDepthL0(std::vector<FrameHessian*> frameHessians);
|
||||||
|
float* idepth[PYR_LEVELS];
|
||||||
|
float* weightSums[PYR_LEVELS];
|
||||||
|
float* weightSums_bak[PYR_LEVELS];
|
||||||
|
|
||||||
|
|
||||||
|
Vec6 calcResAndGS(int lvl, Mat88 &H_out, Vec8 &b_out, const SE3 &refToNew, AffLight aff_g2l, float cutoffTH);
|
||||||
|
Vec6 calcRes(int lvl, const SE3 &refToNew, AffLight aff_g2l, float cutoffTH);
|
||||||
|
void calcGSSSE(int lvl, Mat88 &H_out, Vec8 &b_out, const SE3 &refToNew, AffLight aff_g2l);
|
||||||
|
void calcGS(int lvl, Mat88 &H_out, Vec8 &b_out, const SE3 &refToNew, AffLight aff_g2l);
|
||||||
|
|
||||||
|
// pc buffers
|
||||||
|
float* pc_u[PYR_LEVELS];
|
||||||
|
float* pc_v[PYR_LEVELS];
|
||||||
|
float* pc_idepth[PYR_LEVELS];
|
||||||
|
float* pc_color[PYR_LEVELS];
|
||||||
|
int pc_n[PYR_LEVELS];
|
||||||
|
|
||||||
|
// warped buffers
|
||||||
|
float* buf_warped_idepth;
|
||||||
|
float* buf_warped_u;
|
||||||
|
float* buf_warped_v;
|
||||||
|
float* buf_warped_dx;
|
||||||
|
float* buf_warped_dy;
|
||||||
|
float* buf_warped_residual;
|
||||||
|
float* buf_warped_weight;
|
||||||
|
float* buf_warped_refColor;
|
||||||
|
int buf_warped_n;
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<float*> ptrToDelete;
|
||||||
|
|
||||||
|
|
||||||
|
Accumulator9 acc;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CoarseDistanceMap {
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
|
||||||
|
CoarseDistanceMap(int w, int h);
|
||||||
|
~CoarseDistanceMap();
|
||||||
|
|
||||||
|
void makeDistanceMap(
|
||||||
|
std::vector<FrameHessian*> frameHessians,
|
||||||
|
FrameHessian* frame);
|
||||||
|
|
||||||
|
void makeInlierVotes(
|
||||||
|
std::vector<FrameHessian*> frameHessians);
|
||||||
|
|
||||||
|
void makeK( CalibHessian* HCalib);
|
||||||
|
|
||||||
|
|
||||||
|
float* fwdWarpedIDDistFinal;
|
||||||
|
|
||||||
|
Mat33f K[PYR_LEVELS];
|
||||||
|
Mat33f Ki[PYR_LEVELS];
|
||||||
|
float fx[PYR_LEVELS];
|
||||||
|
float fy[PYR_LEVELS];
|
||||||
|
float fxi[PYR_LEVELS];
|
||||||
|
float fyi[PYR_LEVELS];
|
||||||
|
float cx[PYR_LEVELS];
|
||||||
|
float cy[PYR_LEVELS];
|
||||||
|
float cxi[PYR_LEVELS];
|
||||||
|
float cyi[PYR_LEVELS];
|
||||||
|
int w[PYR_LEVELS];
|
||||||
|
int h[PYR_LEVELS];
|
||||||
|
|
||||||
|
void addIntoDistFinal(int u, int v);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
PointFrameResidual** coarseProjectionGrid;
|
||||||
|
int* coarseProjectionGridNum;
|
||||||
|
Eigen::Vector2i* bfsList1;
|
||||||
|
Eigen::Vector2i* bfsList2;
|
||||||
|
|
||||||
|
void growDistBFS(int bfsNum);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
1512
src/FullSystem/FullSystem.cpp
Normal file
1512
src/FullSystem/FullSystem.cpp
Normal file
File diff suppressed because it is too large
Load Diff
324
src/FullSystem/FullSystem.h
Normal file
324
src/FullSystem/FullSystem.h
Normal file
@@ -0,0 +1,324 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#define MAX_ACTIVE_FRAMES 100
|
||||||
|
|
||||||
|
#include <deque>
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "util/globalCalib.h"
|
||||||
|
#include "vector"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "FullSystem/Residuals.h"
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
#include "util/FrameShell.h"
|
||||||
|
#include "util/IndexThreadReduce.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctional.h"
|
||||||
|
#include "FullSystem/PixelSelector2.h"
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
class Output3DWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
class PixelSelector;
|
||||||
|
class PCSyntheticPoint;
|
||||||
|
class CoarseTracker;
|
||||||
|
struct FrameHessian;
|
||||||
|
struct PointHessian;
|
||||||
|
class CoarseInitializer;
|
||||||
|
struct ImmaturePointTemporaryResidual;
|
||||||
|
class ImageAndExposure;
|
||||||
|
class CoarseDistanceMap;
|
||||||
|
|
||||||
|
class EnergyFunctional;
|
||||||
|
|
||||||
|
template<typename T> inline void deleteOut(std::vector<T*> &v, const int i)
|
||||||
|
{
|
||||||
|
delete v[i];
|
||||||
|
v[i] = v.back();
|
||||||
|
v.pop_back();
|
||||||
|
}
|
||||||
|
template<typename T> inline void deleteOutPt(std::vector<T*> &v, const T* i)
|
||||||
|
{
|
||||||
|
delete i;
|
||||||
|
|
||||||
|
for(unsigned int k=0;k<v.size();k++)
|
||||||
|
if(v[k] == i)
|
||||||
|
{
|
||||||
|
v[k] = v.back();
|
||||||
|
v.pop_back();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
template<typename T> inline void deleteOutOrder(std::vector<T*> &v, const int i)
|
||||||
|
{
|
||||||
|
delete v[i];
|
||||||
|
for(unsigned int k=i+1; k<v.size();k++)
|
||||||
|
v[k-1] = v[k];
|
||||||
|
v.pop_back();
|
||||||
|
}
|
||||||
|
template<typename T> inline void deleteOutOrder(std::vector<T*> &v, const T* element)
|
||||||
|
{
|
||||||
|
int i=-1;
|
||||||
|
for(unsigned int k=0; k<v.size();k++)
|
||||||
|
{
|
||||||
|
if(v[k] == element)
|
||||||
|
{
|
||||||
|
i=k;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert(i!=-1);
|
||||||
|
|
||||||
|
for(unsigned int k=i+1; k<v.size();k++)
|
||||||
|
v[k-1] = v[k];
|
||||||
|
v.pop_back();
|
||||||
|
|
||||||
|
delete element;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool eigenTestNan(const MatXX &m, std::string msg)
|
||||||
|
{
|
||||||
|
bool foundNan = false;
|
||||||
|
for(int y=0;y<m.rows();y++)
|
||||||
|
for(int x=0;x<m.cols();x++)
|
||||||
|
{
|
||||||
|
if(!std::isfinite((double)m(y,x))) foundNan = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(foundNan)
|
||||||
|
{
|
||||||
|
printf("NAN in %s:\n",msg.c_str());
|
||||||
|
std::cout << m << "\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return foundNan;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class FullSystem {
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
|
||||||
|
FullSystem();
|
||||||
|
virtual ~FullSystem();
|
||||||
|
|
||||||
|
// adds a new frame, and creates point & residual structs.
|
||||||
|
void addActiveFrame(ImageAndExposure* image, int id);
|
||||||
|
|
||||||
|
// marginalizes a frame. drops / marginalizes points & residuals.
|
||||||
|
void marginalizeFrame(FrameHessian* frame);
|
||||||
|
void blockUntilMappingIsFinished();
|
||||||
|
|
||||||
|
float optimize(int mnumOptIts);
|
||||||
|
|
||||||
|
void printResult(std::string file);
|
||||||
|
|
||||||
|
void debugPlot(std::string name);
|
||||||
|
|
||||||
|
void printFrameLifetimes();
|
||||||
|
// contains pointers to active frames
|
||||||
|
|
||||||
|
std::vector<IOWrap::Output3DWrapper*> outputWrapper;
|
||||||
|
|
||||||
|
bool isLost;
|
||||||
|
bool initFailed;
|
||||||
|
bool initialized;
|
||||||
|
bool linearizeOperation;
|
||||||
|
|
||||||
|
|
||||||
|
void setGammaFunction(float* BInv);
|
||||||
|
void setOriginalCalib(const VecXf &originalCalib, int originalW, int originalH);
|
||||||
|
|
||||||
|
//Addition
|
||||||
|
FrameShell* getLastPose();
|
||||||
|
CalibHessian* getHCalib();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
CalibHessian Hcalib;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// opt single point
|
||||||
|
int optimizePoint(PointHessian* point, int minObs, bool flagOOB);
|
||||||
|
PointHessian* optimizeImmaturePoint(ImmaturePoint* point, int minObs, ImmaturePointTemporaryResidual* residuals);
|
||||||
|
|
||||||
|
double linAllPointSinle(PointHessian* point, float outlierTHSlack, bool plot);
|
||||||
|
|
||||||
|
// mainPipelineFunctions
|
||||||
|
Vec4 trackNewCoarse(FrameHessian* fh);
|
||||||
|
void traceNewCoarse(FrameHessian* fh);
|
||||||
|
void activatePoints();
|
||||||
|
void activatePointsMT();
|
||||||
|
void activatePointsOldFirst();
|
||||||
|
void flagPointsForRemoval();
|
||||||
|
void makeNewTraces(FrameHessian* newFrame, float* gtDepth);
|
||||||
|
void initializeFromInitializer(FrameHessian* newFrame);
|
||||||
|
void flagFramesForMarginalization(FrameHessian* newFH);
|
||||||
|
|
||||||
|
|
||||||
|
void removeOutliers();
|
||||||
|
|
||||||
|
|
||||||
|
// set precalc values.
|
||||||
|
void setPrecalcValues();
|
||||||
|
|
||||||
|
|
||||||
|
// solce. eventually migrate to ef.
|
||||||
|
void solveSystem(int iteration, double lambda);
|
||||||
|
Vec3 linearizeAll(bool fixLinearization);
|
||||||
|
bool doStepFromBackup(float stepfacC,float stepfacT,float stepfacR,float stepfacA,float stepfacD);
|
||||||
|
void backupState(bool backupLastStep);
|
||||||
|
void loadSateBackup();
|
||||||
|
double calcLEnergy();
|
||||||
|
double calcMEnergy();
|
||||||
|
void linearizeAll_Reductor(bool fixLinearization, std::vector<PointFrameResidual*>* toRemove, int min, int max, Vec10* stats, int tid);
|
||||||
|
void activatePointsMT_Reductor(std::vector<PointHessian*>* optimized,std::vector<ImmaturePoint*>* toOptimize,int min, int max, Vec10* stats, int tid);
|
||||||
|
void applyRes_Reductor(bool copyJacobians, int min, int max, Vec10* stats, int tid);
|
||||||
|
|
||||||
|
void printOptRes(const Vec3 &res, double resL, double resM, double resPrior, double LExact, float a, float b);
|
||||||
|
|
||||||
|
void debugPlotTracking();
|
||||||
|
|
||||||
|
std::vector<VecX> getNullspaces(
|
||||||
|
std::vector<VecX> &nullspaces_pose,
|
||||||
|
std::vector<VecX> &nullspaces_scale,
|
||||||
|
std::vector<VecX> &nullspaces_affA,
|
||||||
|
std::vector<VecX> &nullspaces_affB);
|
||||||
|
|
||||||
|
void setNewFrameEnergyTH();
|
||||||
|
|
||||||
|
|
||||||
|
void printLogLine();
|
||||||
|
void printEvalLine();
|
||||||
|
void printEigenValLine();
|
||||||
|
std::ofstream* calibLog;
|
||||||
|
std::ofstream* numsLog;
|
||||||
|
std::ofstream* errorsLog;
|
||||||
|
std::ofstream* eigenAllLog;
|
||||||
|
std::ofstream* eigenPLog;
|
||||||
|
std::ofstream* eigenALog;
|
||||||
|
std::ofstream* DiagonalLog;
|
||||||
|
std::ofstream* variancesLog;
|
||||||
|
std::ofstream* nullspacesLog;
|
||||||
|
|
||||||
|
std::ofstream* coarseTrackingLog;
|
||||||
|
|
||||||
|
// statistics
|
||||||
|
long int statistics_lastNumOptIts;
|
||||||
|
long int statistics_numDroppedPoints;
|
||||||
|
long int statistics_numActivatedPoints;
|
||||||
|
long int statistics_numCreatedPoints;
|
||||||
|
long int statistics_numForceDroppedResBwd;
|
||||||
|
long int statistics_numForceDroppedResFwd;
|
||||||
|
long int statistics_numMargResFwd;
|
||||||
|
long int statistics_numMargResBwd;
|
||||||
|
float statistics_lastFineTrackRMSE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// =================== changed by tracker-thread. protected by trackMutex ============
|
||||||
|
boost::mutex trackMutex;
|
||||||
|
std::vector<FrameShell*> allFrameHistory;
|
||||||
|
CoarseInitializer* coarseInitializer;
|
||||||
|
Vec5 lastCoarseRMSE;
|
||||||
|
|
||||||
|
|
||||||
|
// ================== changed by mapper-thread. protected by mapMutex ===============
|
||||||
|
boost::mutex mapMutex;
|
||||||
|
std::vector<FrameShell*> allKeyFramesHistory;
|
||||||
|
|
||||||
|
EnergyFunctional* ef;
|
||||||
|
IndexThreadReduce<Vec10> treadReduce;
|
||||||
|
|
||||||
|
float* selectionMap;
|
||||||
|
PixelSelector* pixelSelector;
|
||||||
|
CoarseDistanceMap* coarseDistanceMap;
|
||||||
|
|
||||||
|
std::vector<FrameHessian*> frameHessians; // ONLY changed in marginalizeFrame and addFrame.
|
||||||
|
std::vector<PointFrameResidual*> activeResiduals;
|
||||||
|
float currentMinActDist;
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<float> allResVec;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// mutex etc. for tracker exchange.
|
||||||
|
boost::mutex coarseTrackerSwapMutex; // if tracker sees that there is a new reference, tracker locks [coarseTrackerSwapMutex] and swaps the two.
|
||||||
|
CoarseTracker* coarseTracker_forNewKF; // set as as reference. protected by [coarseTrackerSwapMutex].
|
||||||
|
CoarseTracker* coarseTracker; // always used to track new frames. protected by [trackMutex].
|
||||||
|
float minIdJetVisTracker, maxIdJetVisTracker;
|
||||||
|
float minIdJetVisDebug, maxIdJetVisDebug;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// mutex for camToWorl's in shells (these are always in a good configuration).
|
||||||
|
boost::mutex shellPoseMutex;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* tracking always uses the newest KF as reference.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
void makeKeyFrame( FrameHessian* fh);
|
||||||
|
void makeNonKeyFrame( FrameHessian* fh);
|
||||||
|
void deliverTrackedFrame(FrameHessian* fh, bool needKF);
|
||||||
|
void mappingLoop();
|
||||||
|
|
||||||
|
// tracking / mapping synchronization. All protected by [trackMapSyncMutex].
|
||||||
|
boost::mutex trackMapSyncMutex;
|
||||||
|
boost::condition_variable trackedFrameSignal;
|
||||||
|
boost::condition_variable mappedFrameSignal;
|
||||||
|
std::deque<FrameHessian*> unmappedTrackedFrames;
|
||||||
|
int needNewKFAfter; // Otherwise, a new KF is *needed that has ID bigger than [needNewKFAfter]*.
|
||||||
|
boost::thread mappingThread;
|
||||||
|
bool runMapping;
|
||||||
|
bool needToKetchupMapping;
|
||||||
|
|
||||||
|
int lastRefStopID;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
365
src/FullSystem/FullSystemDebugStuff.cpp
Normal file
365
src/FullSystem/FullSystemDebugStuff.cpp
Normal file
@@ -0,0 +1,365 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* KFBuffer.cpp
|
||||||
|
*
|
||||||
|
* Created on: Jan 7, 2014
|
||||||
|
* Author: engelj
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "FullSystem/FullSystem.h"
|
||||||
|
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "util/globalFuncs.h"
|
||||||
|
#include <Eigen/LU>
|
||||||
|
#include <algorithm>
|
||||||
|
#include "IOWrapper/ImageDisplay.h"
|
||||||
|
#include "IOWrapper/ImageRW.h"
|
||||||
|
#include "util/globalCalib.h"
|
||||||
|
#include <Eigen/SVD>
|
||||||
|
#include <Eigen/Eigenvalues>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include "FullSystem/ImmaturePoint.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
void FullSystem::debugPlotTracking()
|
||||||
|
{
|
||||||
|
if(disableAllDisplay) return;
|
||||||
|
if(!setting_render_plotTrackingFull) return;
|
||||||
|
int wh = hG[0]*wG[0];
|
||||||
|
|
||||||
|
int idx=0;
|
||||||
|
for(FrameHessian* f : frameHessians)
|
||||||
|
{
|
||||||
|
std::vector<MinimalImageB3* > images;
|
||||||
|
|
||||||
|
// make images for all frames. will be deleted by the FrameHessian's destructor.
|
||||||
|
for(FrameHessian* f2 : frameHessians)
|
||||||
|
if(f2->debugImage == 0) f2->debugImage = new MinimalImageB3(wG[0], hG[0]);
|
||||||
|
|
||||||
|
for(FrameHessian* f2 : frameHessians)
|
||||||
|
{
|
||||||
|
MinimalImageB3* debugImage=f2->debugImage;
|
||||||
|
images.push_back(debugImage);
|
||||||
|
|
||||||
|
Eigen::Vector3f* fd = f2->dI;
|
||||||
|
|
||||||
|
Vec2 affL = AffLight::fromToVecExposure(f2->ab_exposure, f->ab_exposure, f2->aff_g2l(), f->aff_g2l());
|
||||||
|
|
||||||
|
for(int i=0;i<wh;i++)
|
||||||
|
{
|
||||||
|
// BRIGHTNESS TRANSFER
|
||||||
|
float colL = affL[0] * fd[i][0] + affL[1];
|
||||||
|
if(colL<0) colL=0; if(colL>255) colL =255;
|
||||||
|
debugImage->at(i) = Vec3b(colL, colL, colL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(PointHessian* ph : f->pointHessians)
|
||||||
|
{
|
||||||
|
assert(ph->status == PointHessian::ACTIVE);
|
||||||
|
if(ph->status == PointHessian::ACTIVE || ph->status == PointHessian::MARGINALIZED)
|
||||||
|
{
|
||||||
|
for(PointFrameResidual* r : ph->residuals)
|
||||||
|
r->debugPlot();
|
||||||
|
f->debugImage->setPixel9(ph->u+0.5, ph->v+0.5, makeRainbow3B(ph->idepth_scaled));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char buf[100];
|
||||||
|
snprintf(buf, 100, "IMG %d", idx);
|
||||||
|
IOWrap::displayImageStitch(buf, images);
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
IOWrap::waitKey(0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FullSystem::debugPlot(std::string name)
|
||||||
|
{
|
||||||
|
if(disableAllDisplay) return;
|
||||||
|
if(!setting_render_renderWindowFrames) return;
|
||||||
|
std::vector<MinimalImageB3* > images;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
float minID=0, maxID=0;
|
||||||
|
if((int)(freeDebugParam5+0.5f) == 7 || (debugSaveImages&&false))
|
||||||
|
{
|
||||||
|
std::vector<float> allID;
|
||||||
|
for(unsigned int f=0;f<frameHessians.size();f++)
|
||||||
|
{
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessians)
|
||||||
|
if(ph!=0) allID.push_back(ph->idepth_scaled);
|
||||||
|
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessiansMarginalized)
|
||||||
|
if(ph!=0) allID.push_back(ph->idepth_scaled);
|
||||||
|
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessiansOut)
|
||||||
|
if(ph!=0) allID.push_back(ph->idepth_scaled);
|
||||||
|
}
|
||||||
|
std::sort(allID.begin(), allID.end());
|
||||||
|
int n = allID.size()-1;
|
||||||
|
minID = allID[(int)(n*0.05)];
|
||||||
|
maxID = allID[(int)(n*0.95)];
|
||||||
|
|
||||||
|
|
||||||
|
// slowly adapt: change by maximum 10% of old span.
|
||||||
|
float maxChange = 0.1*(maxIdJetVisDebug - minIdJetVisDebug);
|
||||||
|
if(maxIdJetVisDebug < 0 || minIdJetVisDebug < 0 ) maxChange = 1e5;
|
||||||
|
|
||||||
|
|
||||||
|
if(minID < minIdJetVisDebug - maxChange)
|
||||||
|
minID = minIdJetVisDebug - maxChange;
|
||||||
|
if(minID > minIdJetVisDebug + maxChange)
|
||||||
|
minID = minIdJetVisDebug + maxChange;
|
||||||
|
|
||||||
|
|
||||||
|
if(maxID < maxIdJetVisDebug - maxChange)
|
||||||
|
maxID = maxIdJetVisDebug - maxChange;
|
||||||
|
if(maxID > maxIdJetVisDebug + maxChange)
|
||||||
|
maxID = maxIdJetVisDebug + maxChange;
|
||||||
|
|
||||||
|
maxIdJetVisDebug = maxID;
|
||||||
|
minIdJetVisDebug = minID;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int wh = hG[0]*wG[0];
|
||||||
|
for(unsigned int f=0;f<frameHessians.size();f++)
|
||||||
|
{
|
||||||
|
MinimalImageB3* img = new MinimalImageB3(wG[0],hG[0]);
|
||||||
|
images.push_back(img);
|
||||||
|
//float* fd = frameHessians[f]->I;
|
||||||
|
Eigen::Vector3f* fd = frameHessians[f]->dI;
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<wh;i++)
|
||||||
|
{
|
||||||
|
int c = fd[i][0]*0.9f;
|
||||||
|
if(c>255) c=255;
|
||||||
|
img->at(i) = Vec3b(c,c,c);
|
||||||
|
}
|
||||||
|
|
||||||
|
if((int)(freeDebugParam5+0.5f) == 0)
|
||||||
|
{
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessians)
|
||||||
|
{
|
||||||
|
if(ph==0) continue;
|
||||||
|
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, makeRainbow3B(ph->idepth_scaled));
|
||||||
|
}
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessiansMarginalized)
|
||||||
|
{
|
||||||
|
if(ph==0) continue;
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, makeRainbow3B(ph->idepth_scaled));
|
||||||
|
}
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessiansOut)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(255,255,255));
|
||||||
|
}
|
||||||
|
else if((int)(freeDebugParam5+0.5f) == 1)
|
||||||
|
{
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessians)
|
||||||
|
{
|
||||||
|
if(ph==0) continue;
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, makeRainbow3B(ph->idepth_scaled));
|
||||||
|
}
|
||||||
|
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessiansMarginalized)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,0,0));
|
||||||
|
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessiansOut)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(255,255,255));
|
||||||
|
}
|
||||||
|
else if((int)(freeDebugParam5+0.5f) == 2)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else if((int)(freeDebugParam5+0.5f) == 3)
|
||||||
|
{
|
||||||
|
for(ImmaturePoint* ph : frameHessians[f]->immaturePoints)
|
||||||
|
{
|
||||||
|
if(ph==0) continue;
|
||||||
|
if(ph->lastTraceStatus==ImmaturePointStatus::IPS_GOOD ||
|
||||||
|
ph->lastTraceStatus==ImmaturePointStatus::IPS_SKIPPED ||
|
||||||
|
ph->lastTraceStatus==ImmaturePointStatus::IPS_BADCONDITION)
|
||||||
|
{
|
||||||
|
if(!std::isfinite(ph->idepth_max))
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,0,0));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, makeRainbow3B((ph->idepth_min + ph->idepth_max)*0.5f));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if((int)(freeDebugParam5+0.5f) == 4)
|
||||||
|
{
|
||||||
|
for(ImmaturePoint* ph : frameHessians[f]->immaturePoints)
|
||||||
|
{
|
||||||
|
if(ph==0) continue;
|
||||||
|
|
||||||
|
if(ph->lastTraceStatus==ImmaturePointStatus::IPS_GOOD)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,255,0));
|
||||||
|
if(ph->lastTraceStatus==ImmaturePointStatus::IPS_OOB)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(255,0,0));
|
||||||
|
if(ph->lastTraceStatus==ImmaturePointStatus::IPS_OUTLIER)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,0,255));
|
||||||
|
if(ph->lastTraceStatus==ImmaturePointStatus::IPS_SKIPPED)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(255,255,0));
|
||||||
|
if(ph->lastTraceStatus==ImmaturePointStatus::IPS_BADCONDITION)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(255,255,255));
|
||||||
|
if(ph->lastTraceStatus==ImmaturePointStatus::IPS_UNINITIALIZED)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,0,0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if((int)(freeDebugParam5+0.5f) == 5)
|
||||||
|
{
|
||||||
|
for(ImmaturePoint* ph : frameHessians[f]->immaturePoints)
|
||||||
|
{
|
||||||
|
if(ph==0) continue;
|
||||||
|
|
||||||
|
if(ph->lastTraceStatus==ImmaturePointStatus::IPS_UNINITIALIZED) continue;
|
||||||
|
float d = freeDebugParam1 * (sqrtf(ph->quality)-1);
|
||||||
|
if(d<0) d=0;
|
||||||
|
if(d>1) d=1;
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,d*255,(1-d)*255));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if((int)(freeDebugParam5+0.5f) == 6)
|
||||||
|
{
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessians)
|
||||||
|
{
|
||||||
|
if(ph==0) continue;
|
||||||
|
if(ph->my_type==0)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(255,0,255));
|
||||||
|
if(ph->my_type==1)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(255,0,0));
|
||||||
|
if(ph->my_type==2)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,0,255));
|
||||||
|
if(ph->my_type==3)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,255,255));
|
||||||
|
}
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessiansMarginalized)
|
||||||
|
{
|
||||||
|
if(ph==0) continue;
|
||||||
|
if(ph->my_type==0)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(255,0,255));
|
||||||
|
if(ph->my_type==1)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(255,0,0));
|
||||||
|
if(ph->my_type==2)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,0,255));
|
||||||
|
if(ph->my_type==3)
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,255,255));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if((int)(freeDebugParam5+0.5f) == 7)
|
||||||
|
{
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessians)
|
||||||
|
{
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, makeJet3B((ph->idepth_scaled-minID) / ((maxID-minID))));
|
||||||
|
}
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessiansMarginalized)
|
||||||
|
{
|
||||||
|
if(ph==0) continue;
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,0,0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IOWrap::displayImageStitch(name.c_str(), images);
|
||||||
|
IOWrap::waitKey(5);
|
||||||
|
|
||||||
|
for(unsigned int i=0;i<images.size();i++)
|
||||||
|
delete images[i];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if((debugSaveImages&&false))
|
||||||
|
{
|
||||||
|
for(unsigned int f=0;f<frameHessians.size();f++)
|
||||||
|
{
|
||||||
|
MinimalImageB3* img = new MinimalImageB3(wG[0],hG[0]);
|
||||||
|
Eigen::Vector3f* fd = frameHessians[f]->dI;
|
||||||
|
|
||||||
|
for(int i=0;i<wh;i++)
|
||||||
|
{
|
||||||
|
int c = fd[i][0]*0.9f;
|
||||||
|
if(c>255) c=255;
|
||||||
|
img->at(i) = Vec3b(c,c,c);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessians)
|
||||||
|
{
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, makeJet3B((ph->idepth_scaled-minID) / ((maxID-minID))));
|
||||||
|
}
|
||||||
|
for(PointHessian* ph : frameHessians[f]->pointHessiansMarginalized)
|
||||||
|
{
|
||||||
|
if(ph==0) continue;
|
||||||
|
img->setPixelCirc(ph->u+0.5f, ph->v+0.5f, Vec3b(0,0,0));
|
||||||
|
}
|
||||||
|
|
||||||
|
char buf[1000];
|
||||||
|
snprintf(buf, 1000, "images_out/kf_%05d_%05d_%02d.png",
|
||||||
|
frameHessians.back()->shell->id, frameHessians.back()->frameID, f);
|
||||||
|
IOWrap::writeImage(buf,img);
|
||||||
|
|
||||||
|
delete img;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
220
src/FullSystem/FullSystemMarginalize.cpp
Normal file
220
src/FullSystem/FullSystemMarginalize.cpp
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* KFBuffer.cpp
|
||||||
|
*
|
||||||
|
* Created on: Jan 7, 2014
|
||||||
|
* Author: engelj
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "FullSystem/FullSystem.h"
|
||||||
|
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "util/globalFuncs.h"
|
||||||
|
#include <Eigen/LU>
|
||||||
|
#include <algorithm>
|
||||||
|
#include "IOWrapper/ImageDisplay.h"
|
||||||
|
#include "util/globalCalib.h"
|
||||||
|
|
||||||
|
#include <Eigen/SVD>
|
||||||
|
#include <Eigen/Eigenvalues>
|
||||||
|
#include "FullSystem/ResidualProjections.h"
|
||||||
|
#include "FullSystem/ImmaturePoint.h"
|
||||||
|
|
||||||
|
#include "OptimizationBackend/EnergyFunctional.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctionalStructs.h"
|
||||||
|
|
||||||
|
#include "IOWrapper/Output3DWrapper.h"
|
||||||
|
|
||||||
|
#include "FullSystem/CoarseTracker.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void FullSystem::flagFramesForMarginalization(FrameHessian* newFH)
|
||||||
|
{
|
||||||
|
if(setting_minFrameAge > setting_maxFrames)
|
||||||
|
{
|
||||||
|
for(int i=setting_maxFrames;i<(int)frameHessians.size();i++)
|
||||||
|
{
|
||||||
|
FrameHessian* fh = frameHessians[i-setting_maxFrames];
|
||||||
|
fh->flaggedForMarginalization = true;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int flagged = 0;
|
||||||
|
// marginalize all frames that have not enough points.
|
||||||
|
for(int i=0;i<(int)frameHessians.size();i++)
|
||||||
|
{
|
||||||
|
FrameHessian* fh = frameHessians[i];
|
||||||
|
int in = fh->pointHessians.size() + fh->immaturePoints.size();
|
||||||
|
int out = fh->pointHessiansMarginalized.size() + fh->pointHessiansOut.size();
|
||||||
|
|
||||||
|
|
||||||
|
Vec2 refToFh=AffLight::fromToVecExposure(frameHessians.back()->ab_exposure, fh->ab_exposure,
|
||||||
|
frameHessians.back()->aff_g2l(), fh->aff_g2l());
|
||||||
|
|
||||||
|
|
||||||
|
if( (in < setting_minPointsRemaining *(in+out) || fabs(logf((float)refToFh[0])) > setting_maxLogAffFacInWindow)
|
||||||
|
&& ((int)frameHessians.size())-flagged > setting_minFrames)
|
||||||
|
{
|
||||||
|
// printf("MARGINALIZE frame %d, as only %'d/%'d points remaining (%'d %'d %'d %'d). VisInLast %'d / %'d. traces %d, activated %d!\n",
|
||||||
|
// fh->frameID, in, in+out,
|
||||||
|
// (int)fh->pointHessians.size(), (int)fh->immaturePoints.size(),
|
||||||
|
// (int)fh->pointHessiansMarginalized.size(), (int)fh->pointHessiansOut.size(),
|
||||||
|
// visInLast, outInLast,
|
||||||
|
// fh->statistics_tracesCreatedForThisFrame, fh->statistics_pointsActivatedForThisFrame);
|
||||||
|
fh->flaggedForMarginalization = true;
|
||||||
|
flagged++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// printf("May Keep frame %d, as %'d/%'d points remaining (%'d %'d %'d %'d). VisInLast %'d / %'d. traces %d, activated %d!\n",
|
||||||
|
// fh->frameID, in, in+out,
|
||||||
|
// (int)fh->pointHessians.size(), (int)fh->immaturePoints.size(),
|
||||||
|
// (int)fh->pointHessiansMarginalized.size(), (int)fh->pointHessiansOut.size(),
|
||||||
|
// visInLast, outInLast,
|
||||||
|
// fh->statistics_tracesCreatedForThisFrame, fh->statistics_pointsActivatedForThisFrame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// marginalize one.
|
||||||
|
if((int)frameHessians.size()-flagged >= setting_maxFrames)
|
||||||
|
{
|
||||||
|
double smallestScore = 1;
|
||||||
|
FrameHessian* toMarginalize=0;
|
||||||
|
FrameHessian* latest = frameHessians.back();
|
||||||
|
|
||||||
|
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
if(fh->frameID > latest->frameID-setting_minFrameAge || fh->frameID == 0) continue;
|
||||||
|
//if(fh==frameHessians.front() == 0) continue;
|
||||||
|
|
||||||
|
double distScore = 0;
|
||||||
|
for(FrameFramePrecalc &ffh : fh->targetPrecalc)
|
||||||
|
{
|
||||||
|
if(ffh.target->frameID > latest->frameID-setting_minFrameAge+1 || ffh.target == ffh.host) continue;
|
||||||
|
distScore += 1/(1e-5+ffh.distanceLL);
|
||||||
|
|
||||||
|
}
|
||||||
|
distScore *= -sqrtf(fh->targetPrecalc.back().distanceLL);
|
||||||
|
|
||||||
|
|
||||||
|
if(distScore < smallestScore)
|
||||||
|
{
|
||||||
|
smallestScore = distScore;
|
||||||
|
toMarginalize = fh;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// printf("MARGINALIZE frame %d, as it is the closest (score %.2f)!\n",
|
||||||
|
// toMarginalize->frameID, smallestScore);
|
||||||
|
toMarginalize->flaggedForMarginalization = true;
|
||||||
|
flagged++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// printf("FRAMES LEFT: ");
|
||||||
|
// for(FrameHessian* fh : frameHessians)
|
||||||
|
// printf("%d ", fh->frameID);
|
||||||
|
// printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void FullSystem::marginalizeFrame(FrameHessian* frame)
|
||||||
|
{
|
||||||
|
// marginalize or remove all this frames points.
|
||||||
|
|
||||||
|
assert((int)frame->pointHessians.size()==0);
|
||||||
|
|
||||||
|
|
||||||
|
ef->marginalizeFrame(frame->efFrame);
|
||||||
|
|
||||||
|
// drop all observations of existing points in that frame.
|
||||||
|
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
if(fh==frame) continue;
|
||||||
|
|
||||||
|
for(PointHessian* ph : fh->pointHessians)
|
||||||
|
{
|
||||||
|
for(unsigned int i=0;i<ph->residuals.size();i++)
|
||||||
|
{
|
||||||
|
PointFrameResidual* r = ph->residuals[i];
|
||||||
|
if(r->target == frame)
|
||||||
|
{
|
||||||
|
if(ph->lastResiduals[0].first == r)
|
||||||
|
ph->lastResiduals[0].first=0;
|
||||||
|
else if(ph->lastResiduals[1].first == r)
|
||||||
|
ph->lastResiduals[1].first=0;
|
||||||
|
|
||||||
|
|
||||||
|
if(r->host->frameID < r->target->frameID)
|
||||||
|
statistics_numForceDroppedResFwd++;
|
||||||
|
else
|
||||||
|
statistics_numForceDroppedResBwd++;
|
||||||
|
|
||||||
|
ef->dropResidual(r->efResidual);
|
||||||
|
deleteOut<PointFrameResidual>(ph->residuals,i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
std::vector<FrameHessian*> v;
|
||||||
|
v.push_back(frame);
|
||||||
|
for(IOWrap::Output3DWrapper* ow : outputWrapper)
|
||||||
|
ow->publishKeyframes(v, true, &Hcalib);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
frame->shell->marginalizedAt = frameHessians.back()->shell->id;
|
||||||
|
frame->shell->movedByOpt = frame->w2c_leftEps().norm();
|
||||||
|
|
||||||
|
deleteOutOrder<FrameHessian>(frameHessians, frame);
|
||||||
|
for(unsigned int i=0;i<frameHessians.size();i++)
|
||||||
|
frameHessians[i]->idx = i;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
setPrecalcValues();
|
||||||
|
ef->setAdjointsF(&Hcalib);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
209
src/FullSystem/FullSystemOptPoint.cpp
Normal file
209
src/FullSystem/FullSystemOptPoint.cpp
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* KFBuffer.cpp
|
||||||
|
*
|
||||||
|
* Created on: Jan 7, 2014
|
||||||
|
* Author: engelj
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "FullSystem/FullSystem.h"
|
||||||
|
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "util/globalFuncs.h"
|
||||||
|
#include <Eigen/LU>
|
||||||
|
#include <algorithm>
|
||||||
|
#include "IOWrapper/ImageDisplay.h"
|
||||||
|
#include "util/globalCalib.h"
|
||||||
|
|
||||||
|
#include <Eigen/SVD>
|
||||||
|
#include <Eigen/Eigenvalues>
|
||||||
|
#include "FullSystem/ImmaturePoint.h"
|
||||||
|
#include "math.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PointHessian* FullSystem::optimizeImmaturePoint(
|
||||||
|
ImmaturePoint* point, int minObs,
|
||||||
|
ImmaturePointTemporaryResidual* residuals)
|
||||||
|
{
|
||||||
|
int nres = 0;
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
if(fh != point->host)
|
||||||
|
{
|
||||||
|
residuals[nres].state_NewEnergy = residuals[nres].state_energy = 0;
|
||||||
|
residuals[nres].state_NewState = ResState::OUTLIER;
|
||||||
|
residuals[nres].state_state = ResState::IN;
|
||||||
|
residuals[nres].target = fh;
|
||||||
|
nres++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert(nres == ((int)frameHessians.size())-1);
|
||||||
|
|
||||||
|
bool print = false;//rand()%50==0;
|
||||||
|
|
||||||
|
float lastEnergy = 0;
|
||||||
|
float lastHdd=0;
|
||||||
|
float lastbd=0;
|
||||||
|
float currentIdepth=(point->idepth_max+point->idepth_min)*0.5f;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<nres;i++)
|
||||||
|
{
|
||||||
|
lastEnergy += point->linearizeResidual(&Hcalib, 1000, residuals+i,lastHdd, lastbd, currentIdepth);
|
||||||
|
residuals[i].state_state = residuals[i].state_NewState;
|
||||||
|
residuals[i].state_energy = residuals[i].state_NewEnergy;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!std::isfinite(lastEnergy) || lastHdd < setting_minIdepthH_act)
|
||||||
|
{
|
||||||
|
if(print)
|
||||||
|
printf("OptPoint: Not well-constrained (%d res, H=%.1f). E=%f. SKIP!\n",
|
||||||
|
nres, lastHdd, lastEnergy);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(print) printf("Activate point. %d residuals. H=%f. Initial Energy: %f. Initial Id=%f\n" ,
|
||||||
|
nres, lastHdd,lastEnergy,currentIdepth);
|
||||||
|
|
||||||
|
float lambda = 0.1;
|
||||||
|
for(int iteration=0;iteration<setting_GNItsOnPointActivation;iteration++)
|
||||||
|
{
|
||||||
|
float H = lastHdd;
|
||||||
|
H *= 1+lambda;
|
||||||
|
float step = (1.0/H) * lastbd;
|
||||||
|
float newIdepth = currentIdepth - step;
|
||||||
|
|
||||||
|
float newHdd=0; float newbd=0; float newEnergy=0;
|
||||||
|
for(int i=0;i<nres;i++)
|
||||||
|
newEnergy += point->linearizeResidual(&Hcalib, 1, residuals+i,newHdd, newbd, newIdepth);
|
||||||
|
|
||||||
|
if(!std::isfinite(lastEnergy) || newHdd < setting_minIdepthH_act)
|
||||||
|
{
|
||||||
|
if(print) printf("OptPoint: Not well-constrained (%d res, H=%.1f). E=%f. SKIP!\n",
|
||||||
|
nres,
|
||||||
|
newHdd,
|
||||||
|
lastEnergy);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(print) printf("%s %d (L %.2f) %s: %f -> %f (idepth %f)!\n",
|
||||||
|
(true || newEnergy < lastEnergy) ? "ACCEPT" : "REJECT",
|
||||||
|
iteration,
|
||||||
|
log10(lambda),
|
||||||
|
"",
|
||||||
|
lastEnergy, newEnergy, newIdepth);
|
||||||
|
|
||||||
|
if(newEnergy < lastEnergy)
|
||||||
|
{
|
||||||
|
currentIdepth = newIdepth;
|
||||||
|
lastHdd = newHdd;
|
||||||
|
lastbd = newbd;
|
||||||
|
lastEnergy = newEnergy;
|
||||||
|
for(int i=0;i<nres;i++)
|
||||||
|
{
|
||||||
|
residuals[i].state_state = residuals[i].state_NewState;
|
||||||
|
residuals[i].state_energy = residuals[i].state_NewEnergy;
|
||||||
|
}
|
||||||
|
|
||||||
|
lambda *= 0.5;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lambda *= 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(fabsf(step) < 0.0001*currentIdepth)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!std::isfinite(currentIdepth))
|
||||||
|
{
|
||||||
|
printf("MAJOR ERROR! point idepth is nan after initialization (%f).\n", currentIdepth);
|
||||||
|
return (PointHessian*)((long)(-1)); // yeah I'm like 99% sure this is OK on 32bit systems.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int numGoodRes=0;
|
||||||
|
for(int i=0;i<nres;i++)
|
||||||
|
if(residuals[i].state_state == ResState::IN) numGoodRes++;
|
||||||
|
|
||||||
|
if(numGoodRes < minObs)
|
||||||
|
{
|
||||||
|
if(print) printf("OptPoint: OUTLIER!\n");
|
||||||
|
return (PointHessian*)((long)(-1)); // yeah I'm like 99% sure this is OK on 32bit systems.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PointHessian* p = new PointHessian(point, &Hcalib);
|
||||||
|
if(!std::isfinite(p->energyTH)) {delete p; return (PointHessian*)((long)(-1));}
|
||||||
|
|
||||||
|
p->lastResiduals[0].first = 0;
|
||||||
|
p->lastResiduals[0].second = ResState::OOB;
|
||||||
|
p->lastResiduals[1].first = 0;
|
||||||
|
p->lastResiduals[1].second = ResState::OOB;
|
||||||
|
p->setIdepthZero(currentIdepth);
|
||||||
|
p->setIdepth(currentIdepth);
|
||||||
|
p->setPointStatus(PointHessian::ACTIVE);
|
||||||
|
|
||||||
|
for(int i=0;i<nres;i++)
|
||||||
|
if(residuals[i].state_state == ResState::IN)
|
||||||
|
{
|
||||||
|
PointFrameResidual* r = new PointFrameResidual(p, p->host, residuals[i].target);
|
||||||
|
r->state_NewEnergy = r->state_energy = 0;
|
||||||
|
r->state_NewState = ResState::OUTLIER;
|
||||||
|
r->setState(ResState::IN);
|
||||||
|
p->residuals.push_back(r);
|
||||||
|
|
||||||
|
if(r->target == frameHessians.back())
|
||||||
|
{
|
||||||
|
p->lastResiduals[0].first = r;
|
||||||
|
p->lastResiduals[0].second = ResState::IN;
|
||||||
|
}
|
||||||
|
else if(r->target == (frameHessians.size()<2 ? 0 : frameHessians[frameHessians.size()-2]))
|
||||||
|
{
|
||||||
|
p->lastResiduals[1].first = r;
|
||||||
|
p->lastResiduals[1].second = ResState::IN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(print) printf("point activated!\n");
|
||||||
|
|
||||||
|
statistics_numActivatedPoints++;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
714
src/FullSystem/FullSystemOptimize.cpp
Normal file
714
src/FullSystem/FullSystemOptimize.cpp
Normal file
@@ -0,0 +1,714 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "FullSystem/FullSystem.h"
|
||||||
|
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "util/globalFuncs.h"
|
||||||
|
#include <Eigen/LU>
|
||||||
|
#include <algorithm>
|
||||||
|
#include "IOWrapper/ImageDisplay.h"
|
||||||
|
#include "util/globalCalib.h"
|
||||||
|
#include <Eigen/SVD>
|
||||||
|
#include <Eigen/Eigenvalues>
|
||||||
|
#include "FullSystem/ResidualProjections.h"
|
||||||
|
|
||||||
|
#include "OptimizationBackend/EnergyFunctional.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctionalStructs.h"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void FullSystem::linearizeAll_Reductor(bool fixLinearization, std::vector<PointFrameResidual*>* toRemove, int min, int max, Vec10* stats, int tid)
|
||||||
|
{
|
||||||
|
for(int k=min;k<max;k++)
|
||||||
|
{
|
||||||
|
PointFrameResidual* r = activeResiduals[k];
|
||||||
|
(*stats)[0] += r->linearize(&Hcalib);
|
||||||
|
|
||||||
|
if(fixLinearization)
|
||||||
|
{
|
||||||
|
r->applyRes(true);
|
||||||
|
|
||||||
|
if(r->efResidual->isActive())
|
||||||
|
{
|
||||||
|
if(r->isNew)
|
||||||
|
{
|
||||||
|
PointHessian* p = r->point;
|
||||||
|
Vec3f ptp_inf = r->host->targetPrecalc[r->target->idx].PRE_KRKiTll * Vec3f(p->u,p->v, 1); // projected point assuming infinite depth.
|
||||||
|
Vec3f ptp = ptp_inf + r->host->targetPrecalc[r->target->idx].PRE_KtTll*p->idepth_scaled; // projected point with real depth.
|
||||||
|
float relBS = 0.01*((ptp_inf.head<2>() / ptp_inf[2])-(ptp.head<2>() / ptp[2])).norm(); // 0.01 = one pixel.
|
||||||
|
|
||||||
|
|
||||||
|
if(relBS > p->maxRelBaseline)
|
||||||
|
p->maxRelBaseline = relBS;
|
||||||
|
|
||||||
|
p->numGoodResiduals++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
toRemove[tid].push_back(activeResiduals[k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FullSystem::applyRes_Reductor(bool copyJacobians, int min, int max, Vec10* stats, int tid)
|
||||||
|
{
|
||||||
|
for(int k=min;k<max;k++)
|
||||||
|
activeResiduals[k]->applyRes(true);
|
||||||
|
}
|
||||||
|
void FullSystem::setNewFrameEnergyTH()
|
||||||
|
{
|
||||||
|
|
||||||
|
// collect all residuals and make decision on TH.
|
||||||
|
allResVec.clear();
|
||||||
|
allResVec.reserve(activeResiduals.size()*2);
|
||||||
|
FrameHessian* newFrame = frameHessians.back();
|
||||||
|
|
||||||
|
for(PointFrameResidual* r : activeResiduals)
|
||||||
|
if(r->state_NewEnergyWithOutlier >= 0 && r->target == newFrame)
|
||||||
|
{
|
||||||
|
allResVec.push_back(r->state_NewEnergyWithOutlier);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(allResVec.size()==0)
|
||||||
|
{
|
||||||
|
newFrame->frameEnergyTH = 12*12*patternNum;
|
||||||
|
return; // should never happen, but lets make sure.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int nthIdx = setting_frameEnergyTHN*allResVec.size();
|
||||||
|
|
||||||
|
assert(nthIdx < (int)allResVec.size());
|
||||||
|
assert(setting_frameEnergyTHN < 1);
|
||||||
|
|
||||||
|
std::nth_element(allResVec.begin(), allResVec.begin()+nthIdx, allResVec.end());
|
||||||
|
float nthElement = sqrtf(allResVec[nthIdx]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
newFrame->frameEnergyTH = nthElement*setting_frameEnergyTHFacMedian;
|
||||||
|
newFrame->frameEnergyTH = 26.0f*setting_frameEnergyTHConstWeight + newFrame->frameEnergyTH*(1-setting_frameEnergyTHConstWeight);
|
||||||
|
newFrame->frameEnergyTH = newFrame->frameEnergyTH*newFrame->frameEnergyTH;
|
||||||
|
newFrame->frameEnergyTH *= setting_overallEnergyTHWeight*setting_overallEnergyTHWeight;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// int good=0,bad=0;
|
||||||
|
// for(float f : allResVec) if(f<newFrame->frameEnergyTH) good++; else bad++;
|
||||||
|
// printf("EnergyTH: mean %f, median %f, result %f (in %d, out %d)! \n",
|
||||||
|
// meanElement, nthElement, sqrtf(newFrame->frameEnergyTH),
|
||||||
|
// good, bad);
|
||||||
|
}
|
||||||
|
Vec3 FullSystem::linearizeAll(bool fixLinearization)
|
||||||
|
{
|
||||||
|
double lastEnergyP = 0;
|
||||||
|
double lastEnergyR = 0;
|
||||||
|
double num = 0;
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<PointFrameResidual*> toRemove[NUM_THREADS];
|
||||||
|
for(int i=0;i<NUM_THREADS;i++) toRemove[i].clear();
|
||||||
|
|
||||||
|
if(multiThreading)
|
||||||
|
{
|
||||||
|
treadReduce.reduce(boost::bind(&FullSystem::linearizeAll_Reductor, this, fixLinearization, toRemove, _1, _2, _3, _4), 0, activeResiduals.size(), 0);
|
||||||
|
lastEnergyP = treadReduce.stats[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Vec10 stats;
|
||||||
|
linearizeAll_Reductor(fixLinearization, toRemove, 0,activeResiduals.size(),&stats,0);
|
||||||
|
lastEnergyP = stats[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
setNewFrameEnergyTH();
|
||||||
|
|
||||||
|
|
||||||
|
if(fixLinearization)
|
||||||
|
{
|
||||||
|
|
||||||
|
for(PointFrameResidual* r : activeResiduals)
|
||||||
|
{
|
||||||
|
PointHessian* ph = r->point;
|
||||||
|
if(ph->lastResiduals[0].first == r)
|
||||||
|
ph->lastResiduals[0].second = r->state_state;
|
||||||
|
else if(ph->lastResiduals[1].first == r)
|
||||||
|
ph->lastResiduals[1].second = r->state_state;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int nResRemoved=0;
|
||||||
|
for(int i=0;i<NUM_THREADS;i++)
|
||||||
|
{
|
||||||
|
for(PointFrameResidual* r : toRemove[i])
|
||||||
|
{
|
||||||
|
PointHessian* ph = r->point;
|
||||||
|
|
||||||
|
if(ph->lastResiduals[0].first == r)
|
||||||
|
ph->lastResiduals[0].first=0;
|
||||||
|
else if(ph->lastResiduals[1].first == r)
|
||||||
|
ph->lastResiduals[1].first=0;
|
||||||
|
|
||||||
|
for(unsigned int k=0; k<ph->residuals.size();k++)
|
||||||
|
if(ph->residuals[k] == r)
|
||||||
|
{
|
||||||
|
ef->dropResidual(r->efResidual);
|
||||||
|
deleteOut<PointFrameResidual>(ph->residuals,k);
|
||||||
|
nResRemoved++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//printf("FINAL LINEARIZATION: removed %d / %d residuals!\n", nResRemoved, (int)activeResiduals.size());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return Vec3(lastEnergyP, lastEnergyR, num);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// applies step to linearization point.
|
||||||
|
bool FullSystem::doStepFromBackup(float stepfacC,float stepfacT,float stepfacR,float stepfacA,float stepfacD)
|
||||||
|
{
|
||||||
|
// float meanStepC=0,meanStepP=0,meanStepD=0;
|
||||||
|
// meanStepC += Hcalib.step.norm();
|
||||||
|
|
||||||
|
Vec10 pstepfac;
|
||||||
|
pstepfac.segment<3>(0).setConstant(stepfacT);
|
||||||
|
pstepfac.segment<3>(3).setConstant(stepfacR);
|
||||||
|
pstepfac.segment<4>(6).setConstant(stepfacA);
|
||||||
|
|
||||||
|
|
||||||
|
float sumA=0, sumB=0, sumT=0, sumR=0, sumID=0, numID=0;
|
||||||
|
|
||||||
|
float sumNID=0;
|
||||||
|
|
||||||
|
if(setting_solverMode & SOLVER_MOMENTUM)
|
||||||
|
{
|
||||||
|
Hcalib.setValue(Hcalib.value_backup + Hcalib.step);
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
Vec10 step = fh->step;
|
||||||
|
step.head<6>() += 0.5f*(fh->step_backup.head<6>());
|
||||||
|
|
||||||
|
fh->setState(fh->state_backup + step);
|
||||||
|
sumA += step[6]*step[6];
|
||||||
|
sumB += step[7]*step[7];
|
||||||
|
sumT += step.segment<3>(0).squaredNorm();
|
||||||
|
sumR += step.segment<3>(3).squaredNorm();
|
||||||
|
|
||||||
|
for(PointHessian* ph : fh->pointHessians)
|
||||||
|
{
|
||||||
|
float step = ph->step+0.5f*(ph->step_backup);
|
||||||
|
ph->setIdepth(ph->idepth_backup + step);
|
||||||
|
sumID += step*step;
|
||||||
|
sumNID += fabsf(ph->idepth_backup);
|
||||||
|
numID++;
|
||||||
|
|
||||||
|
ph->setIdepthZero(ph->idepth_backup + step);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Hcalib.setValue(Hcalib.value_backup + stepfacC*Hcalib.step);
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
fh->setState(fh->state_backup + pstepfac.cwiseProduct(fh->step));
|
||||||
|
sumA += fh->step[6]*fh->step[6];
|
||||||
|
sumB += fh->step[7]*fh->step[7];
|
||||||
|
sumT += fh->step.segment<3>(0).squaredNorm();
|
||||||
|
sumR += fh->step.segment<3>(3).squaredNorm();
|
||||||
|
|
||||||
|
for(PointHessian* ph : fh->pointHessians)
|
||||||
|
{
|
||||||
|
ph->setIdepth(ph->idepth_backup + stepfacD*ph->step);
|
||||||
|
sumID += ph->step*ph->step;
|
||||||
|
sumNID += fabsf(ph->idepth_backup);
|
||||||
|
numID++;
|
||||||
|
|
||||||
|
ph->setIdepthZero(ph->idepth_backup + stepfacD*ph->step);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sumA /= frameHessians.size();
|
||||||
|
sumB /= frameHessians.size();
|
||||||
|
sumR /= frameHessians.size();
|
||||||
|
sumT /= frameHessians.size();
|
||||||
|
sumID /= numID;
|
||||||
|
sumNID /= numID;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(!setting_debugout_runquiet)
|
||||||
|
printf("STEPS: A %.1f; B %.1f; R %.1f; T %.1f. \t",
|
||||||
|
sqrtf(sumA) / (0.0005*setting_thOptIterations),
|
||||||
|
sqrtf(sumB) / (0.00005*setting_thOptIterations),
|
||||||
|
sqrtf(sumR) / (0.00005*setting_thOptIterations),
|
||||||
|
sqrtf(sumT)*sumNID / (0.00005*setting_thOptIterations));
|
||||||
|
|
||||||
|
|
||||||
|
EFDeltaValid=false;
|
||||||
|
setPrecalcValues();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return sqrtf(sumA) < 0.0005*setting_thOptIterations &&
|
||||||
|
sqrtf(sumB) < 0.00005*setting_thOptIterations &&
|
||||||
|
sqrtf(sumR) < 0.00005*setting_thOptIterations &&
|
||||||
|
sqrtf(sumT)*sumNID < 0.00005*setting_thOptIterations;
|
||||||
|
//
|
||||||
|
// printf("mean steps: %f %f %f!\n",
|
||||||
|
// meanStepC, meanStepP, meanStepD);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// sets linearization point.
|
||||||
|
void FullSystem::backupState(bool backupLastStep)
|
||||||
|
{
|
||||||
|
if(setting_solverMode & SOLVER_MOMENTUM)
|
||||||
|
{
|
||||||
|
if(backupLastStep)
|
||||||
|
{
|
||||||
|
Hcalib.step_backup = Hcalib.step;
|
||||||
|
Hcalib.value_backup = Hcalib.value;
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
fh->step_backup = fh->step;
|
||||||
|
fh->state_backup = fh->get_state();
|
||||||
|
for(PointHessian* ph : fh->pointHessians)
|
||||||
|
{
|
||||||
|
ph->idepth_backup = ph->idepth;
|
||||||
|
ph->step_backup = ph->step;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Hcalib.step_backup.setZero();
|
||||||
|
Hcalib.value_backup = Hcalib.value;
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
fh->step_backup.setZero();
|
||||||
|
fh->state_backup = fh->get_state();
|
||||||
|
for(PointHessian* ph : fh->pointHessians)
|
||||||
|
{
|
||||||
|
ph->idepth_backup = ph->idepth;
|
||||||
|
ph->step_backup=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Hcalib.value_backup = Hcalib.value;
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
fh->state_backup = fh->get_state();
|
||||||
|
for(PointHessian* ph : fh->pointHessians)
|
||||||
|
ph->idepth_backup = ph->idepth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// sets linearization point.
|
||||||
|
void FullSystem::loadSateBackup()
|
||||||
|
{
|
||||||
|
Hcalib.setValue(Hcalib.value_backup);
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
fh->setState(fh->state_backup);
|
||||||
|
for(PointHessian* ph : fh->pointHessians)
|
||||||
|
{
|
||||||
|
ph->setIdepth(ph->idepth_backup);
|
||||||
|
|
||||||
|
ph->setIdepthZero(ph->idepth_backup);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EFDeltaValid=false;
|
||||||
|
setPrecalcValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double FullSystem::calcMEnergy()
|
||||||
|
{
|
||||||
|
if(setting_forceAceptStep) return 0;
|
||||||
|
// calculate (x-x0)^T * [2b + H * (x-x0)] for everything saved in L.
|
||||||
|
//ef->makeIDX();
|
||||||
|
//ef->setDeltaF(&Hcalib);
|
||||||
|
return ef->calcMEnergyF();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FullSystem::printOptRes(const Vec3 &res, double resL, double resM, double resPrior, double LExact, float a, float b)
|
||||||
|
{
|
||||||
|
printf("A(%f)=(AV %.3f). Num: A(%'d) + M(%'d); ab %f %f!\n",
|
||||||
|
res[0],
|
||||||
|
sqrtf((float)(res[0] / (patternNum*ef->resInA))),
|
||||||
|
ef->resInA,
|
||||||
|
ef->resInM,
|
||||||
|
a,
|
||||||
|
b
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float FullSystem::optimize(int mnumOptIts)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(frameHessians.size() < 2) return 0;
|
||||||
|
if(frameHessians.size() < 3) mnumOptIts = 20;
|
||||||
|
if(frameHessians.size() < 4) mnumOptIts = 15;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// get statistics and active residuals.
|
||||||
|
|
||||||
|
activeResiduals.clear();
|
||||||
|
int numPoints = 0;
|
||||||
|
int numLRes = 0;
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
for(PointHessian* ph : fh->pointHessians)
|
||||||
|
{
|
||||||
|
for(PointFrameResidual* r : ph->residuals)
|
||||||
|
{
|
||||||
|
if(!r->efResidual->isLinearized)
|
||||||
|
{
|
||||||
|
activeResiduals.push_back(r);
|
||||||
|
r->resetOOB();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
numLRes++;
|
||||||
|
}
|
||||||
|
numPoints++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!setting_debugout_runquiet)
|
||||||
|
printf("OPTIMIZE %d pts, %d active res, %d lin res!\n",ef->nPoints,(int)activeResiduals.size(), numLRes);
|
||||||
|
|
||||||
|
|
||||||
|
Vec3 lastEnergy = linearizeAll(false);
|
||||||
|
double lastEnergyL = calcLEnergy();
|
||||||
|
double lastEnergyM = calcMEnergy();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(multiThreading)
|
||||||
|
treadReduce.reduce(boost::bind(&FullSystem::applyRes_Reductor, this, true, _1, _2, _3, _4), 0, activeResiduals.size(), 50);
|
||||||
|
else
|
||||||
|
applyRes_Reductor(true,0,activeResiduals.size(),0,0);
|
||||||
|
|
||||||
|
|
||||||
|
if(!setting_debugout_runquiet)
|
||||||
|
{
|
||||||
|
printf("Initial Error \t");
|
||||||
|
printOptRes(lastEnergy, lastEnergyL, lastEnergyM, 0, 0, frameHessians.back()->aff_g2l().a, frameHessians.back()->aff_g2l().b);
|
||||||
|
}
|
||||||
|
|
||||||
|
debugPlotTracking();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
double lambda = 1e-1;
|
||||||
|
float stepsize=1;
|
||||||
|
VecX previousX = VecX::Constant(CPARS+ 8*frameHessians.size(), NAN);
|
||||||
|
for(int iteration=0;iteration<mnumOptIts;iteration++)
|
||||||
|
{
|
||||||
|
// solve!
|
||||||
|
backupState(iteration!=0);
|
||||||
|
//solveSystemNew(0);
|
||||||
|
solveSystem(iteration, lambda);
|
||||||
|
double incDirChange = (1e-20 + previousX.dot(ef->lastX)) / (1e-20 + previousX.norm() * ef->lastX.norm());
|
||||||
|
previousX = ef->lastX;
|
||||||
|
|
||||||
|
|
||||||
|
if(std::isfinite(incDirChange) && (setting_solverMode & SOLVER_STEPMOMENTUM))
|
||||||
|
{
|
||||||
|
float newStepsize = exp(incDirChange*1.4);
|
||||||
|
if(incDirChange<0 && stepsize>1) stepsize=1;
|
||||||
|
|
||||||
|
stepsize = sqrtf(sqrtf(newStepsize*stepsize*stepsize*stepsize));
|
||||||
|
if(stepsize > 2) stepsize=2;
|
||||||
|
if(stepsize <0.25) stepsize=0.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool canbreak = doStepFromBackup(stepsize,stepsize,stepsize,stepsize,stepsize);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// eval new energy!
|
||||||
|
Vec3 newEnergy = linearizeAll(false);
|
||||||
|
double newEnergyL = calcLEnergy();
|
||||||
|
double newEnergyM = calcMEnergy();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(!setting_debugout_runquiet)
|
||||||
|
{
|
||||||
|
printf("%s %d (L %.2f, dir %.2f, ss %.1f): \t",
|
||||||
|
(newEnergy[0] + newEnergy[1] + newEnergyL + newEnergyM <
|
||||||
|
lastEnergy[0] + lastEnergy[1] + lastEnergyL + lastEnergyM) ? "ACCEPT" : "REJECT",
|
||||||
|
iteration,
|
||||||
|
log10(lambda),
|
||||||
|
incDirChange,
|
||||||
|
stepsize);
|
||||||
|
printOptRes(newEnergy, newEnergyL, newEnergyM , 0, 0, frameHessians.back()->aff_g2l().a, frameHessians.back()->aff_g2l().b);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(setting_forceAceptStep || (newEnergy[0] + newEnergy[1] + newEnergyL + newEnergyM <
|
||||||
|
lastEnergy[0] + lastEnergy[1] + lastEnergyL + lastEnergyM))
|
||||||
|
{
|
||||||
|
|
||||||
|
if(multiThreading)
|
||||||
|
treadReduce.reduce(boost::bind(&FullSystem::applyRes_Reductor, this, true, _1, _2, _3, _4), 0, activeResiduals.size(), 50);
|
||||||
|
else
|
||||||
|
applyRes_Reductor(true,0,activeResiduals.size(),0,0);
|
||||||
|
|
||||||
|
lastEnergy = newEnergy;
|
||||||
|
lastEnergyL = newEnergyL;
|
||||||
|
lastEnergyM = newEnergyM;
|
||||||
|
|
||||||
|
lambda *= 0.25;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
loadSateBackup();
|
||||||
|
lastEnergy = linearizeAll(false);
|
||||||
|
lastEnergyL = calcLEnergy();
|
||||||
|
lastEnergyM = calcMEnergy();
|
||||||
|
lambda *= 1e2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(canbreak && iteration >= setting_minOptIterations) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Vec10 newStateZero = Vec10::Zero();
|
||||||
|
newStateZero.segment<2>(6) = frameHessians.back()->get_state().segment<2>(6);
|
||||||
|
|
||||||
|
frameHessians.back()->setEvalPT(frameHessians.back()->PRE_worldToCam,
|
||||||
|
newStateZero);
|
||||||
|
EFDeltaValid=false;
|
||||||
|
EFAdjointsValid=false;
|
||||||
|
ef->setAdjointsF(&Hcalib);
|
||||||
|
setPrecalcValues();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
lastEnergy = linearizeAll(true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(!std::isfinite((double)lastEnergy[0]) || !std::isfinite((double)lastEnergy[1]) || !std::isfinite((double)lastEnergy[2]))
|
||||||
|
{
|
||||||
|
printf("KF Tracking failed: LOST!\n");
|
||||||
|
isLost=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
statistics_lastFineTrackRMSE = sqrtf((float)(lastEnergy[0] / (patternNum*ef->resInA)));
|
||||||
|
|
||||||
|
if(calibLog != 0)
|
||||||
|
{
|
||||||
|
(*calibLog) << Hcalib.value_scaled.transpose() <<
|
||||||
|
" " << frameHessians.back()->get_state_scaled().transpose() <<
|
||||||
|
" " << sqrtf((float)(lastEnergy[0] / (patternNum*ef->resInA))) <<
|
||||||
|
" " << ef->resInM << "\n";
|
||||||
|
calibLog->flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
boost::unique_lock<boost::mutex> crlock(shellPoseMutex);
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
fh->shell->camToWorld = fh->PRE_camToWorld;
|
||||||
|
fh->shell->aff_g2l = fh->aff_g2l();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
debugPlotTracking();
|
||||||
|
|
||||||
|
return sqrtf((float)(lastEnergy[0] / (patternNum*ef->resInA)));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void FullSystem::solveSystem(int iteration, double lambda)
|
||||||
|
{
|
||||||
|
ef->lastNullspaces_forLogging = getNullspaces(
|
||||||
|
ef->lastNullspaces_pose,
|
||||||
|
ef->lastNullspaces_scale,
|
||||||
|
ef->lastNullspaces_affA,
|
||||||
|
ef->lastNullspaces_affB);
|
||||||
|
|
||||||
|
ef->solveSystemF(iteration, lambda,&Hcalib);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
double FullSystem::calcLEnergy()
|
||||||
|
{
|
||||||
|
if(setting_forceAceptStep) return 0;
|
||||||
|
|
||||||
|
double Ef = ef->calcLEnergyF_MT();
|
||||||
|
return Ef;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FullSystem::removeOutliers()
|
||||||
|
{
|
||||||
|
int numPointsDropped=0;
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
for(unsigned int i=0;i<fh->pointHessians.size();i++)
|
||||||
|
{
|
||||||
|
PointHessian* ph = fh->pointHessians[i];
|
||||||
|
if(ph==0) continue;
|
||||||
|
|
||||||
|
if(ph->residuals.size() == 0)
|
||||||
|
{
|
||||||
|
fh->pointHessiansOut.push_back(ph);
|
||||||
|
ph->efPoint->stateFlag = EFPointStatus::PS_DROP;
|
||||||
|
fh->pointHessians[i] = fh->pointHessians.back();
|
||||||
|
fh->pointHessians.pop_back();
|
||||||
|
i--;
|
||||||
|
numPointsDropped++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ef->dropPointsF();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<VecX> FullSystem::getNullspaces(
|
||||||
|
std::vector<VecX> &nullspaces_pose,
|
||||||
|
std::vector<VecX> &nullspaces_scale,
|
||||||
|
std::vector<VecX> &nullspaces_affA,
|
||||||
|
std::vector<VecX> &nullspaces_affB)
|
||||||
|
{
|
||||||
|
nullspaces_pose.clear();
|
||||||
|
nullspaces_scale.clear();
|
||||||
|
nullspaces_affA.clear();
|
||||||
|
nullspaces_affB.clear();
|
||||||
|
|
||||||
|
|
||||||
|
int n=CPARS+frameHessians.size()*8;
|
||||||
|
std::vector<VecX> nullspaces_x0_pre;
|
||||||
|
for(int i=0;i<6;i++)
|
||||||
|
{
|
||||||
|
VecX nullspace_x0(n);
|
||||||
|
nullspace_x0.setZero();
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
nullspace_x0.segment<6>(CPARS+fh->idx*8) = fh->nullspaces_pose.col(i);
|
||||||
|
nullspace_x0.segment<3>(CPARS+fh->idx*8) *= SCALE_XI_TRANS_INVERSE;
|
||||||
|
nullspace_x0.segment<3>(CPARS+fh->idx*8+3) *= SCALE_XI_ROT_INVERSE;
|
||||||
|
}
|
||||||
|
nullspaces_x0_pre.push_back(nullspace_x0);
|
||||||
|
nullspaces_pose.push_back(nullspace_x0);
|
||||||
|
}
|
||||||
|
for(int i=0;i<2;i++)
|
||||||
|
{
|
||||||
|
VecX nullspace_x0(n);
|
||||||
|
nullspace_x0.setZero();
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
nullspace_x0.segment<2>(CPARS+fh->idx*8+6) = fh->nullspaces_affine.col(i).head<2>();
|
||||||
|
nullspace_x0[CPARS+fh->idx*8+6] *= SCALE_A_INVERSE;
|
||||||
|
nullspace_x0[CPARS+fh->idx*8+7] *= SCALE_B_INVERSE;
|
||||||
|
}
|
||||||
|
nullspaces_x0_pre.push_back(nullspace_x0);
|
||||||
|
if(i==0) nullspaces_affA.push_back(nullspace_x0);
|
||||||
|
if(i==1) nullspaces_affB.push_back(nullspace_x0);
|
||||||
|
}
|
||||||
|
|
||||||
|
VecX nullspace_x0(n);
|
||||||
|
nullspace_x0.setZero();
|
||||||
|
for(FrameHessian* fh : frameHessians)
|
||||||
|
{
|
||||||
|
nullspace_x0.segment<6>(CPARS+fh->idx*8) = fh->nullspaces_scale;
|
||||||
|
nullspace_x0.segment<3>(CPARS+fh->idx*8) *= SCALE_XI_TRANS_INVERSE;
|
||||||
|
nullspace_x0.segment<3>(CPARS+fh->idx*8+3) *= SCALE_XI_ROT_INVERSE;
|
||||||
|
}
|
||||||
|
nullspaces_x0_pre.push_back(nullspace_x0);
|
||||||
|
nullspaces_scale.push_back(nullspace_x0);
|
||||||
|
|
||||||
|
return nullspaces_x0_pre;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
226
src/FullSystem/HessianBlocks.cpp
Normal file
226
src/FullSystem/HessianBlocks.cpp
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
#include "util/FrameShell.h"
|
||||||
|
#include "FullSystem/ImmaturePoint.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctionalStructs.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
PointHessian::PointHessian(const ImmaturePoint* const rawPoint, CalibHessian* Hcalib)
|
||||||
|
{
|
||||||
|
instanceCounter++;
|
||||||
|
host = rawPoint->host;
|
||||||
|
hasDepthPrior=false;
|
||||||
|
|
||||||
|
idepth_hessian=0;
|
||||||
|
maxRelBaseline=0;
|
||||||
|
numGoodResiduals=0;
|
||||||
|
|
||||||
|
// set static values & initialization.
|
||||||
|
u = rawPoint->u;
|
||||||
|
v = rawPoint->v;
|
||||||
|
assert(std::isfinite(rawPoint->idepth_max));
|
||||||
|
//idepth_init = rawPoint->idepth_GT;
|
||||||
|
|
||||||
|
my_type = rawPoint->my_type;
|
||||||
|
|
||||||
|
setIdepthScaled((rawPoint->idepth_max + rawPoint->idepth_min)*0.5);
|
||||||
|
setPointStatus(PointHessian::INACTIVE);
|
||||||
|
|
||||||
|
int n = patternNum;
|
||||||
|
memcpy(color, rawPoint->color, sizeof(float)*n);
|
||||||
|
memcpy(weights, rawPoint->weights, sizeof(float)*n);
|
||||||
|
energyTH = rawPoint->energyTH;
|
||||||
|
|
||||||
|
efPoint=0;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PointHessian::release()
|
||||||
|
{
|
||||||
|
for(unsigned int i=0;i<residuals.size();i++) delete residuals[i];
|
||||||
|
residuals.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FrameHessian::setStateZero(const Vec10 &state_zero)
|
||||||
|
{
|
||||||
|
assert(state_zero.head<6>().squaredNorm() < 1e-20);
|
||||||
|
|
||||||
|
this->state_zero = state_zero;
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<6;i++)
|
||||||
|
{
|
||||||
|
Vec6 eps; eps.setZero(); eps[i] = 1e-3;
|
||||||
|
SE3 EepsP = Sophus::SE3::exp(eps);
|
||||||
|
SE3 EepsM = Sophus::SE3::exp(-eps);
|
||||||
|
SE3 w2c_leftEps_P_x0 = (get_worldToCam_evalPT() * EepsP) * get_worldToCam_evalPT().inverse();
|
||||||
|
SE3 w2c_leftEps_M_x0 = (get_worldToCam_evalPT() * EepsM) * get_worldToCam_evalPT().inverse();
|
||||||
|
nullspaces_pose.col(i) = (w2c_leftEps_P_x0.log() - w2c_leftEps_M_x0.log())/(2e-3);
|
||||||
|
}
|
||||||
|
//nullspaces_pose.topRows<3>() *= SCALE_XI_TRANS_INVERSE;
|
||||||
|
//nullspaces_pose.bottomRows<3>() *= SCALE_XI_ROT_INVERSE;
|
||||||
|
|
||||||
|
// scale change
|
||||||
|
SE3 w2c_leftEps_P_x0 = (get_worldToCam_evalPT());
|
||||||
|
w2c_leftEps_P_x0.translation() *= 1.00001;
|
||||||
|
w2c_leftEps_P_x0 = w2c_leftEps_P_x0 * get_worldToCam_evalPT().inverse();
|
||||||
|
SE3 w2c_leftEps_M_x0 = (get_worldToCam_evalPT());
|
||||||
|
w2c_leftEps_M_x0.translation() /= 1.00001;
|
||||||
|
w2c_leftEps_M_x0 = w2c_leftEps_M_x0 * get_worldToCam_evalPT().inverse();
|
||||||
|
nullspaces_scale = (w2c_leftEps_P_x0.log() - w2c_leftEps_M_x0.log())/(2e-3);
|
||||||
|
|
||||||
|
|
||||||
|
nullspaces_affine.setZero();
|
||||||
|
nullspaces_affine.topLeftCorner<2,1>() = Vec2(1,0);
|
||||||
|
assert(ab_exposure > 0);
|
||||||
|
nullspaces_affine.topRightCorner<2,1>() = Vec2(0, expf(aff_g2l_0().a)*ab_exposure);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void FrameHessian::release()
|
||||||
|
{
|
||||||
|
// DELETE POINT
|
||||||
|
// DELETE RESIDUAL
|
||||||
|
for(unsigned int i=0;i<pointHessians.size();i++) delete pointHessians[i];
|
||||||
|
for(unsigned int i=0;i<pointHessiansMarginalized.size();i++) delete pointHessiansMarginalized[i];
|
||||||
|
for(unsigned int i=0;i<pointHessiansOut.size();i++) delete pointHessiansOut[i];
|
||||||
|
for(unsigned int i=0;i<immaturePoints.size();i++) delete immaturePoints[i];
|
||||||
|
|
||||||
|
|
||||||
|
pointHessians.clear();
|
||||||
|
pointHessiansMarginalized.clear();
|
||||||
|
pointHessiansOut.clear();
|
||||||
|
immaturePoints.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FrameHessian::makeImages(float* color, CalibHessian* HCalib)
|
||||||
|
{
|
||||||
|
|
||||||
|
for(int i=0;i<pyrLevelsUsed;i++)
|
||||||
|
{
|
||||||
|
dIp[i] = new Eigen::Vector3f[wG[i]*hG[i]];
|
||||||
|
absSquaredGrad[i] = new float[wG[i]*hG[i]];
|
||||||
|
}
|
||||||
|
dI = dIp[0];
|
||||||
|
|
||||||
|
|
||||||
|
// make d0
|
||||||
|
int w=wG[0];
|
||||||
|
int h=hG[0];
|
||||||
|
for(int i=0;i<w*h;i++)
|
||||||
|
dI[i][0] = color[i];
|
||||||
|
|
||||||
|
for(int lvl=0; lvl<pyrLevelsUsed; lvl++)
|
||||||
|
{
|
||||||
|
int wl = wG[lvl], hl = hG[lvl];
|
||||||
|
Eigen::Vector3f* dI_l = dIp[lvl];
|
||||||
|
|
||||||
|
float* dabs_l = absSquaredGrad[lvl];
|
||||||
|
if(lvl>0)
|
||||||
|
{
|
||||||
|
int lvlm1 = lvl-1;
|
||||||
|
int wlm1 = wG[lvlm1];
|
||||||
|
Eigen::Vector3f* dI_lm = dIp[lvlm1];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for(int y=0;y<hl;y++)
|
||||||
|
for(int x=0;x<wl;x++)
|
||||||
|
{
|
||||||
|
dI_l[x + y*wl][0] = 0.25f * (dI_lm[2*x + 2*y*wlm1][0] +
|
||||||
|
dI_lm[2*x+1 + 2*y*wlm1][0] +
|
||||||
|
dI_lm[2*x + 2*y*wlm1+wlm1][0] +
|
||||||
|
dI_lm[2*x+1 + 2*y*wlm1+wlm1][0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int idx=wl;idx < wl*(hl-1);idx++)
|
||||||
|
{
|
||||||
|
float dx = 0.5f*(dI_l[idx+1][0] - dI_l[idx-1][0]);
|
||||||
|
float dy = 0.5f*(dI_l[idx+wl][0] - dI_l[idx-wl][0]);
|
||||||
|
|
||||||
|
|
||||||
|
if(!std::isfinite(dx)) dx=0;
|
||||||
|
if(!std::isfinite(dy)) dy=0;
|
||||||
|
|
||||||
|
dI_l[idx][1] = dx;
|
||||||
|
dI_l[idx][2] = dy;
|
||||||
|
|
||||||
|
|
||||||
|
dabs_l[idx] = dx*dx+dy*dy;
|
||||||
|
|
||||||
|
if(setting_gammaWeightsPixelSelect==1 && HCalib!=0)
|
||||||
|
{
|
||||||
|
float gw = HCalib->getBGradOnly((float)(dI_l[idx][0]));
|
||||||
|
dabs_l[idx] *= gw*gw; // convert to gradient of original color space (before removing response).
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrameFramePrecalc::set(FrameHessian* host, FrameHessian* target, CalibHessian* HCalib )
|
||||||
|
{
|
||||||
|
this->host = host;
|
||||||
|
this->target = target;
|
||||||
|
|
||||||
|
SE3 leftToLeft_0 = target->get_worldToCam_evalPT() * host->get_worldToCam_evalPT().inverse();
|
||||||
|
PRE_RTll_0 = (leftToLeft_0.rotationMatrix()).cast<float>();
|
||||||
|
PRE_tTll_0 = (leftToLeft_0.translation()).cast<float>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SE3 leftToLeft = target->PRE_worldToCam * host->PRE_camToWorld;
|
||||||
|
PRE_RTll = (leftToLeft.rotationMatrix()).cast<float>();
|
||||||
|
PRE_tTll = (leftToLeft.translation()).cast<float>();
|
||||||
|
distanceLL = leftToLeft.translation().norm();
|
||||||
|
|
||||||
|
|
||||||
|
Mat33f K = Mat33f::Zero();
|
||||||
|
K(0,0) = HCalib->fxl();
|
||||||
|
K(1,1) = HCalib->fyl();
|
||||||
|
K(0,2) = HCalib->cxl();
|
||||||
|
K(1,2) = HCalib->cyl();
|
||||||
|
K(2,2) = 1;
|
||||||
|
PRE_KRKiTll = K * PRE_RTll * K.inverse();
|
||||||
|
PRE_RKiTll = PRE_RTll * K.inverse();
|
||||||
|
PRE_KtTll = K * PRE_tTll;
|
||||||
|
|
||||||
|
|
||||||
|
PRE_aff_mode = AffLight::fromToVecExposure(host->ab_exposure, target->ab_exposure, host->aff_g2l(), target->aff_g2l()).cast<float>();
|
||||||
|
PRE_b0_mode = host->aff_g2l_0().b;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
505
src/FullSystem/HessianBlocks.h
Normal file
505
src/FullSystem/HessianBlocks.h
Normal file
@@ -0,0 +1,505 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#define MAX_ACTIVE_FRAMES 100
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/globalCalib.h"
|
||||||
|
#include "vector"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "FullSystem/Residuals.h"
|
||||||
|
#include "util/ImageAndExposure.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
inline Vec2 affFromTo(const Vec2 &from, const Vec2 &to) // contains affine parameters as XtoWorld.
|
||||||
|
{
|
||||||
|
return Vec2(from[0] / to[0], (from[1] - to[1]) / to[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct FrameHessian;
|
||||||
|
struct PointHessian;
|
||||||
|
|
||||||
|
class ImmaturePoint;
|
||||||
|
class FrameShell;
|
||||||
|
|
||||||
|
class EFFrame;
|
||||||
|
class EFPoint;
|
||||||
|
|
||||||
|
#define SCALE_IDEPTH 1.0f // scales internal value to idepth.
|
||||||
|
#define SCALE_XI_ROT 1.0f
|
||||||
|
#define SCALE_XI_TRANS 0.5f
|
||||||
|
#define SCALE_F 50.0f
|
||||||
|
#define SCALE_C 50.0f
|
||||||
|
#define SCALE_W 1.0f
|
||||||
|
#define SCALE_A 10.0f
|
||||||
|
#define SCALE_B 1000.0f
|
||||||
|
|
||||||
|
#define SCALE_IDEPTH_INVERSE (1.0f / SCALE_IDEPTH)
|
||||||
|
#define SCALE_XI_ROT_INVERSE (1.0f / SCALE_XI_ROT)
|
||||||
|
#define SCALE_XI_TRANS_INVERSE (1.0f / SCALE_XI_TRANS)
|
||||||
|
#define SCALE_F_INVERSE (1.0f / SCALE_F)
|
||||||
|
#define SCALE_C_INVERSE (1.0f / SCALE_C)
|
||||||
|
#define SCALE_W_INVERSE (1.0f / SCALE_W)
|
||||||
|
#define SCALE_A_INVERSE (1.0f / SCALE_A)
|
||||||
|
#define SCALE_B_INVERSE (1.0f / SCALE_B)
|
||||||
|
|
||||||
|
|
||||||
|
struct FrameFramePrecalc
|
||||||
|
{
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
// static values
|
||||||
|
static int instanceCounter;
|
||||||
|
FrameHessian* host; // defines row
|
||||||
|
FrameHessian* target; // defines column
|
||||||
|
|
||||||
|
// precalc values
|
||||||
|
Mat33f PRE_RTll;
|
||||||
|
Mat33f PRE_KRKiTll;
|
||||||
|
Mat33f PRE_RKiTll;
|
||||||
|
Mat33f PRE_RTll_0;
|
||||||
|
|
||||||
|
Vec2f PRE_aff_mode;
|
||||||
|
float PRE_b0_mode;
|
||||||
|
|
||||||
|
Vec3f PRE_tTll;
|
||||||
|
Vec3f PRE_KtTll;
|
||||||
|
Vec3f PRE_tTll_0;
|
||||||
|
|
||||||
|
float distanceLL;
|
||||||
|
|
||||||
|
|
||||||
|
inline ~FrameFramePrecalc() {}
|
||||||
|
inline FrameFramePrecalc() {host=target=0;}
|
||||||
|
void set(FrameHessian* host, FrameHessian* target, CalibHessian* HCalib);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct FrameHessian
|
||||||
|
{
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
EFFrame* efFrame;
|
||||||
|
|
||||||
|
// constant info & pre-calculated values
|
||||||
|
//DepthImageWrap* frame;
|
||||||
|
FrameShell* shell;
|
||||||
|
|
||||||
|
Eigen::Vector3f* dI; // trace, fine tracking. Used for direction select (not for gradient histograms etc.)
|
||||||
|
Eigen::Vector3f* dIp[PYR_LEVELS]; // coarse tracking / coarse initializer. NAN in [0] only.
|
||||||
|
float* absSquaredGrad[PYR_LEVELS]; // only used for pixel select (histograms etc.). no NAN.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int frameID; // incremental ID for keyframes only!
|
||||||
|
static int instanceCounter;
|
||||||
|
int idx;
|
||||||
|
|
||||||
|
// Photometric Calibration Stuff
|
||||||
|
float frameEnergyTH; // set dynamically depending on tracking residual
|
||||||
|
float ab_exposure;
|
||||||
|
|
||||||
|
bool flaggedForMarginalization;
|
||||||
|
|
||||||
|
std::vector<PointHessian*> pointHessians; // contains all ACTIVE points.
|
||||||
|
std::vector<PointHessian*> pointHessiansMarginalized; // contains all MARGINALIZED points (= fully marginalized, usually because point went OOB.)
|
||||||
|
std::vector<PointHessian*> pointHessiansOut; // contains all OUTLIER points (= discarded.).
|
||||||
|
std::vector<ImmaturePoint*> immaturePoints; // contains all OUTLIER points (= discarded.).
|
||||||
|
|
||||||
|
|
||||||
|
Mat66 nullspaces_pose;
|
||||||
|
Mat42 nullspaces_affine;
|
||||||
|
Vec6 nullspaces_scale;
|
||||||
|
|
||||||
|
// variable info.
|
||||||
|
SE3 worldToCam_evalPT;
|
||||||
|
Vec10 state_zero;
|
||||||
|
Vec10 state_scaled;
|
||||||
|
Vec10 state; // [0-5: worldToCam-leftEps. 6-7: a,b]
|
||||||
|
Vec10 step;
|
||||||
|
Vec10 step_backup;
|
||||||
|
Vec10 state_backup;
|
||||||
|
|
||||||
|
|
||||||
|
EIGEN_STRONG_INLINE const SE3 &get_worldToCam_evalPT() const {return worldToCam_evalPT;}
|
||||||
|
EIGEN_STRONG_INLINE const Vec10 &get_state_zero() const {return state_zero;}
|
||||||
|
EIGEN_STRONG_INLINE const Vec10 &get_state() const {return state;}
|
||||||
|
EIGEN_STRONG_INLINE const Vec10 &get_state_scaled() const {return state_scaled;}
|
||||||
|
EIGEN_STRONG_INLINE const Vec10 get_state_minus_stateZero() const {return get_state() - get_state_zero();}
|
||||||
|
|
||||||
|
|
||||||
|
// precalc values
|
||||||
|
SE3 PRE_worldToCam;
|
||||||
|
SE3 PRE_camToWorld;
|
||||||
|
std::vector<FrameFramePrecalc,Eigen::aligned_allocator<FrameFramePrecalc>> targetPrecalc;
|
||||||
|
MinimalImageB3* debugImage;
|
||||||
|
|
||||||
|
|
||||||
|
inline Vec6 w2c_leftEps() const {return get_state_scaled().head<6>();}
|
||||||
|
inline AffLight aff_g2l() const {return AffLight(get_state_scaled()[6], get_state_scaled()[7]);}
|
||||||
|
inline AffLight aff_g2l_0() const {return AffLight(get_state_zero()[6]*SCALE_A, get_state_zero()[7]*SCALE_B);}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void setStateZero(const Vec10 &state_zero);
|
||||||
|
inline void setState(const Vec10 &state)
|
||||||
|
{
|
||||||
|
|
||||||
|
this->state = state;
|
||||||
|
state_scaled.segment<3>(0) = SCALE_XI_TRANS * state.segment<3>(0);
|
||||||
|
state_scaled.segment<3>(3) = SCALE_XI_ROT * state.segment<3>(3);
|
||||||
|
state_scaled[6] = SCALE_A * state[6];
|
||||||
|
state_scaled[7] = SCALE_B * state[7];
|
||||||
|
state_scaled[8] = SCALE_A * state[8];
|
||||||
|
state_scaled[9] = SCALE_B * state[9];
|
||||||
|
|
||||||
|
PRE_worldToCam = SE3::exp(w2c_leftEps()) * get_worldToCam_evalPT();
|
||||||
|
PRE_camToWorld = PRE_worldToCam.inverse();
|
||||||
|
//setCurrentNullspace();
|
||||||
|
};
|
||||||
|
inline void setStateScaled(const Vec10 &state_scaled)
|
||||||
|
{
|
||||||
|
|
||||||
|
this->state_scaled = state_scaled;
|
||||||
|
state.segment<3>(0) = SCALE_XI_TRANS_INVERSE * state_scaled.segment<3>(0);
|
||||||
|
state.segment<3>(3) = SCALE_XI_ROT_INVERSE * state_scaled.segment<3>(3);
|
||||||
|
state[6] = SCALE_A_INVERSE * state_scaled[6];
|
||||||
|
state[7] = SCALE_B_INVERSE * state_scaled[7];
|
||||||
|
state[8] = SCALE_A_INVERSE * state_scaled[8];
|
||||||
|
state[9] = SCALE_B_INVERSE * state_scaled[9];
|
||||||
|
|
||||||
|
PRE_worldToCam = SE3::exp(w2c_leftEps()) * get_worldToCam_evalPT();
|
||||||
|
PRE_camToWorld = PRE_worldToCam.inverse();
|
||||||
|
//setCurrentNullspace();
|
||||||
|
};
|
||||||
|
inline void setEvalPT(const SE3 &worldToCam_evalPT, const Vec10 &state)
|
||||||
|
{
|
||||||
|
|
||||||
|
this->worldToCam_evalPT = worldToCam_evalPT;
|
||||||
|
setState(state);
|
||||||
|
setStateZero(state);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline void setEvalPT_scaled(const SE3 &worldToCam_evalPT, const AffLight &aff_g2l)
|
||||||
|
{
|
||||||
|
Vec10 initial_state = Vec10::Zero();
|
||||||
|
initial_state[6] = aff_g2l.a;
|
||||||
|
initial_state[7] = aff_g2l.b;
|
||||||
|
this->worldToCam_evalPT = worldToCam_evalPT;
|
||||||
|
setStateScaled(initial_state);
|
||||||
|
setStateZero(this->get_state());
|
||||||
|
};
|
||||||
|
|
||||||
|
void release();
|
||||||
|
|
||||||
|
inline ~FrameHessian()
|
||||||
|
{
|
||||||
|
assert(efFrame==0);
|
||||||
|
release(); instanceCounter--;
|
||||||
|
for(int i=0;i<pyrLevelsUsed;i++)
|
||||||
|
{
|
||||||
|
delete[] dIp[i];
|
||||||
|
delete[] absSquaredGrad[i];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(debugImage != 0) delete debugImage;
|
||||||
|
};
|
||||||
|
inline FrameHessian()
|
||||||
|
{
|
||||||
|
instanceCounter++;
|
||||||
|
flaggedForMarginalization=false;
|
||||||
|
frameID = -1;
|
||||||
|
efFrame = 0;
|
||||||
|
frameEnergyTH = 8*8*patternNum;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
debugImage=0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void makeImages(float* color, CalibHessian* HCalib);
|
||||||
|
|
||||||
|
inline Vec10 getPrior()
|
||||||
|
{
|
||||||
|
Vec10 p = Vec10::Zero();
|
||||||
|
if(frameID==0)
|
||||||
|
{
|
||||||
|
p.head<3>() = Vec3::Constant(setting_initialTransPrior);
|
||||||
|
p.segment<3>(3) = Vec3::Constant(setting_initialRotPrior);
|
||||||
|
if(setting_solverMode & SOLVER_REMOVE_POSEPRIOR) p.head<6>().setZero();
|
||||||
|
|
||||||
|
p[6] = setting_initialAffAPrior;
|
||||||
|
p[7] = setting_initialAffBPrior;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(setting_affineOptModeA < 0)
|
||||||
|
p[6] = setting_initialAffAPrior;
|
||||||
|
else
|
||||||
|
p[6] = setting_affineOptModeA;
|
||||||
|
|
||||||
|
if(setting_affineOptModeB < 0)
|
||||||
|
p[7] = setting_initialAffBPrior;
|
||||||
|
else
|
||||||
|
p[7] = setting_affineOptModeB;
|
||||||
|
}
|
||||||
|
p[8] = setting_initialAffAPrior;
|
||||||
|
p[9] = setting_initialAffBPrior;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Vec10 getPriorZero()
|
||||||
|
{
|
||||||
|
return Vec10::Zero();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CalibHessian
|
||||||
|
{
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
static int instanceCounter;
|
||||||
|
|
||||||
|
VecC value_zero;
|
||||||
|
VecC value_scaled;
|
||||||
|
VecCf value_scaledf;
|
||||||
|
VecCf value_scaledi;
|
||||||
|
VecC value;
|
||||||
|
VecC step;
|
||||||
|
VecC step_backup;
|
||||||
|
VecC value_backup;
|
||||||
|
VecC value_minus_value_zero;
|
||||||
|
|
||||||
|
inline ~CalibHessian() {instanceCounter--;}
|
||||||
|
inline CalibHessian()
|
||||||
|
{
|
||||||
|
|
||||||
|
VecC initial_value = VecC::Zero();
|
||||||
|
initial_value[0] = fxG[0];
|
||||||
|
initial_value[1] = fyG[0];
|
||||||
|
initial_value[2] = cxG[0];
|
||||||
|
initial_value[3] = cyG[0];
|
||||||
|
|
||||||
|
setValueScaled(initial_value);
|
||||||
|
value_zero = value;
|
||||||
|
value_minus_value_zero.setZero();
|
||||||
|
|
||||||
|
instanceCounter++;
|
||||||
|
for(int i=0;i<256;i++)
|
||||||
|
Binv[i] = B[i] = i; // set gamma function to identity
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// normal mode: use the optimized parameters everywhere!
|
||||||
|
inline float& fxl() {return value_scaledf[0];}
|
||||||
|
inline float& fyl() {return value_scaledf[1];}
|
||||||
|
inline float& cxl() {return value_scaledf[2];}
|
||||||
|
inline float& cyl() {return value_scaledf[3];}
|
||||||
|
inline float& fxli() {return value_scaledi[0];}
|
||||||
|
inline float& fyli() {return value_scaledi[1];}
|
||||||
|
inline float& cxli() {return value_scaledi[2];}
|
||||||
|
inline float& cyli() {return value_scaledi[3];}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline void setValue(const VecC &value)
|
||||||
|
{
|
||||||
|
// [0-3: Kl, 4-7: Kr, 8-12: l2r]
|
||||||
|
this->value = value;
|
||||||
|
value_scaled[0] = SCALE_F * value[0];
|
||||||
|
value_scaled[1] = SCALE_F * value[1];
|
||||||
|
value_scaled[2] = SCALE_C * value[2];
|
||||||
|
value_scaled[3] = SCALE_C * value[3];
|
||||||
|
|
||||||
|
this->value_scaledf = this->value_scaled.cast<float>();
|
||||||
|
this->value_scaledi[0] = 1.0f / this->value_scaledf[0];
|
||||||
|
this->value_scaledi[1] = 1.0f / this->value_scaledf[1];
|
||||||
|
this->value_scaledi[2] = - this->value_scaledf[2] / this->value_scaledf[0];
|
||||||
|
this->value_scaledi[3] = - this->value_scaledf[3] / this->value_scaledf[1];
|
||||||
|
this->value_minus_value_zero = this->value - this->value_zero;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void setValueScaled(const VecC &value_scaled)
|
||||||
|
{
|
||||||
|
this->value_scaled = value_scaled;
|
||||||
|
this->value_scaledf = this->value_scaled.cast<float>();
|
||||||
|
value[0] = SCALE_F_INVERSE * value_scaled[0];
|
||||||
|
value[1] = SCALE_F_INVERSE * value_scaled[1];
|
||||||
|
value[2] = SCALE_C_INVERSE * value_scaled[2];
|
||||||
|
value[3] = SCALE_C_INVERSE * value_scaled[3];
|
||||||
|
|
||||||
|
this->value_minus_value_zero = this->value - this->value_zero;
|
||||||
|
this->value_scaledi[0] = 1.0f / this->value_scaledf[0];
|
||||||
|
this->value_scaledi[1] = 1.0f / this->value_scaledf[1];
|
||||||
|
this->value_scaledi[2] = - this->value_scaledf[2] / this->value_scaledf[0];
|
||||||
|
this->value_scaledi[3] = - this->value_scaledf[3] / this->value_scaledf[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
float Binv[256];
|
||||||
|
float B[256];
|
||||||
|
|
||||||
|
|
||||||
|
EIGEN_STRONG_INLINE float getBGradOnly(float color)
|
||||||
|
{
|
||||||
|
int c = color+0.5f;
|
||||||
|
if(c<5) c=5;
|
||||||
|
if(c>250) c=250;
|
||||||
|
return B[c+1]-B[c];
|
||||||
|
}
|
||||||
|
|
||||||
|
EIGEN_STRONG_INLINE float getBInvGradOnly(float color)
|
||||||
|
{
|
||||||
|
int c = color+0.5f;
|
||||||
|
if(c<5) c=5;
|
||||||
|
if(c>250) c=250;
|
||||||
|
return Binv[c+1]-Binv[c];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// hessian component associated with one point.
|
||||||
|
struct PointHessian
|
||||||
|
{
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
static int instanceCounter;
|
||||||
|
EFPoint* efPoint;
|
||||||
|
|
||||||
|
// static values
|
||||||
|
float color[MAX_RES_PER_POINT]; // colors in host frame
|
||||||
|
float weights[MAX_RES_PER_POINT]; // host-weights for respective residuals.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
float u,v;
|
||||||
|
int idx;
|
||||||
|
float energyTH;
|
||||||
|
FrameHessian* host;
|
||||||
|
bool hasDepthPrior;
|
||||||
|
|
||||||
|
float my_type;
|
||||||
|
|
||||||
|
float idepth_scaled;
|
||||||
|
float idepth_zero_scaled;
|
||||||
|
float idepth_zero;
|
||||||
|
float idepth;
|
||||||
|
float step;
|
||||||
|
float step_backup;
|
||||||
|
float idepth_backup;
|
||||||
|
|
||||||
|
float nullspaces_scale;
|
||||||
|
float idepth_hessian;
|
||||||
|
float maxRelBaseline;
|
||||||
|
int numGoodResiduals;
|
||||||
|
|
||||||
|
enum PtStatus {ACTIVE=0, INACTIVE, OUTLIER, OOB, MARGINALIZED};
|
||||||
|
PtStatus status;
|
||||||
|
|
||||||
|
inline void setPointStatus(PtStatus s) {status=s;}
|
||||||
|
|
||||||
|
|
||||||
|
inline void setIdepth(float idepth) {
|
||||||
|
this->idepth = idepth;
|
||||||
|
this->idepth_scaled = SCALE_IDEPTH * idepth;
|
||||||
|
}
|
||||||
|
inline void setIdepthScaled(float idepth_scaled) {
|
||||||
|
this->idepth = SCALE_IDEPTH_INVERSE * idepth_scaled;
|
||||||
|
this->idepth_scaled = idepth_scaled;
|
||||||
|
}
|
||||||
|
inline void setIdepthZero(float idepth) {
|
||||||
|
idepth_zero = idepth;
|
||||||
|
idepth_zero_scaled = SCALE_IDEPTH * idepth;
|
||||||
|
nullspaces_scale = -(idepth*1.001 - idepth/1.001)*500;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<PointFrameResidual*> residuals; // only contains good residuals (not OOB and not OUTLIER). Arbitrary order.
|
||||||
|
std::pair<PointFrameResidual*, ResState> lastResiduals[2]; // contains information about residuals to the last two (!) frames. ([0] = latest, [1] = the one before).
|
||||||
|
|
||||||
|
|
||||||
|
void release();
|
||||||
|
PointHessian(const ImmaturePoint* const rawPoint, CalibHessian* Hcalib);
|
||||||
|
inline ~PointHessian() {assert(efPoint==0); release(); instanceCounter--;}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool isOOB(const std::vector<FrameHessian*>& toKeep, const std::vector<FrameHessian*>& toMarg) const
|
||||||
|
{
|
||||||
|
|
||||||
|
int visInToMarg = 0;
|
||||||
|
for(PointFrameResidual* r : residuals)
|
||||||
|
{
|
||||||
|
if(r->state_state != ResState::IN) continue;
|
||||||
|
for(FrameHessian* k : toMarg)
|
||||||
|
if(r->target == k) visInToMarg++;
|
||||||
|
}
|
||||||
|
if((int)residuals.size() >= setting_minGoodActiveResForMarg &&
|
||||||
|
numGoodResiduals > setting_minGoodResForMarg+10 &&
|
||||||
|
(int)residuals.size()-visInToMarg < setting_minGoodActiveResForMarg)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(lastResiduals[0].second == ResState::OOB) return true;
|
||||||
|
if(residuals.size() < 2) return false;
|
||||||
|
if(lastResiduals[0].second == ResState::OUTLIER && lastResiduals[1].second == ResState::OUTLIER) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool isInlierNew()
|
||||||
|
{
|
||||||
|
return (int)residuals.size() >= setting_minGoodActiveResForMarg
|
||||||
|
&& numGoodResiduals >= setting_minGoodResForMarg;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
547
src/FullSystem/ImmaturePoint.cpp
Normal file
547
src/FullSystem/ImmaturePoint.cpp
Normal file
@@ -0,0 +1,547 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "FullSystem/ImmaturePoint.h"
|
||||||
|
#include "util/FrameShell.h"
|
||||||
|
#include "FullSystem/ResidualProjections.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
ImmaturePoint::ImmaturePoint(int u_, int v_, FrameHessian* host_, float type, CalibHessian* HCalib)
|
||||||
|
: u(u_), v(v_), host(host_), my_type(type), idepth_min(0), idepth_max(NAN), lastTraceStatus(IPS_UNINITIALIZED)
|
||||||
|
{
|
||||||
|
|
||||||
|
gradH.setZero();
|
||||||
|
|
||||||
|
for(int idx=0;idx<patternNum;idx++)
|
||||||
|
{
|
||||||
|
int dx = patternP[idx][0];
|
||||||
|
int dy = patternP[idx][1];
|
||||||
|
|
||||||
|
Vec3f ptc = getInterpolatedElement33BiLin(host->dI, u+dx, v+dy,wG[0]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
color[idx] = ptc[0];
|
||||||
|
if(!std::isfinite(color[idx])) {energyTH=NAN; return;}
|
||||||
|
|
||||||
|
|
||||||
|
gradH += ptc.tail<2>() * ptc.tail<2>().transpose();
|
||||||
|
|
||||||
|
weights[idx] = sqrtf(setting_outlierTHSumComponent / (setting_outlierTHSumComponent + ptc.tail<2>().squaredNorm()));
|
||||||
|
}
|
||||||
|
|
||||||
|
energyTH = patternNum*setting_outlierTH;
|
||||||
|
energyTH *= setting_overallEnergyTHWeight*setting_overallEnergyTHWeight;
|
||||||
|
|
||||||
|
idepth_GT=0;
|
||||||
|
quality=10000;
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmaturePoint::~ImmaturePoint()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* returns
|
||||||
|
* * OOB -> point is optimized and marginalized
|
||||||
|
* * UPDATED -> point has been updated.
|
||||||
|
* * SKIP -> point has not been updated.
|
||||||
|
*/
|
||||||
|
ImmaturePointStatus ImmaturePoint::traceOn(FrameHessian* frame,const Mat33f &hostToFrame_KRKi, const Vec3f &hostToFrame_Kt, const Vec2f& hostToFrame_affine, CalibHessian* HCalib, bool debugPrint)
|
||||||
|
{
|
||||||
|
if(lastTraceStatus == ImmaturePointStatus::IPS_OOB) return lastTraceStatus;
|
||||||
|
|
||||||
|
|
||||||
|
debugPrint = false;//rand()%100==0;
|
||||||
|
float maxPixSearch = (wG[0]+hG[0])*setting_maxPixSearch;
|
||||||
|
|
||||||
|
if(debugPrint)
|
||||||
|
printf("trace pt (%.1f %.1f) from frame %d to %d. Range %f -> %f. t %f %f %f!\n",
|
||||||
|
u,v,
|
||||||
|
host->shell->id, frame->shell->id,
|
||||||
|
idepth_min, idepth_max,
|
||||||
|
hostToFrame_Kt[0],hostToFrame_Kt[1],hostToFrame_Kt[2]);
|
||||||
|
|
||||||
|
// const float stepsize = 1.0; // stepsize for initial discrete search.
|
||||||
|
// const int GNIterations = 3; // max # GN iterations
|
||||||
|
// const float GNThreshold = 0.1; // GN stop after this stepsize.
|
||||||
|
// const float extraSlackOnTH = 1.2; // for energy-based outlier check, be slightly more relaxed by this factor.
|
||||||
|
// const float slackInterval = 0.8; // if pixel-interval is smaller than this, leave it be.
|
||||||
|
// const float minImprovementFactor = 2; // if pixel-interval is smaller than this, leave it be.
|
||||||
|
// ============== project min and max. return if one of them is OOB ===================
|
||||||
|
Vec3f pr = hostToFrame_KRKi * Vec3f(u,v, 1);
|
||||||
|
Vec3f ptpMin = pr + hostToFrame_Kt*idepth_min;
|
||||||
|
float uMin = ptpMin[0] / ptpMin[2];
|
||||||
|
float vMin = ptpMin[1] / ptpMin[2];
|
||||||
|
|
||||||
|
if(!(uMin > 4 && vMin > 4 && uMin < wG[0]-5 && vMin < hG[0]-5))
|
||||||
|
{
|
||||||
|
if(debugPrint) printf("OOB uMin %f %f - %f %f %f (id %f-%f)!\n",
|
||||||
|
u,v,uMin, vMin, ptpMin[2], idepth_min, idepth_max);
|
||||||
|
lastTraceUV = Vec2f(-1,-1);
|
||||||
|
lastTracePixelInterval=0;
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_OOB;
|
||||||
|
}
|
||||||
|
|
||||||
|
float dist;
|
||||||
|
float uMax;
|
||||||
|
float vMax;
|
||||||
|
Vec3f ptpMax;
|
||||||
|
if(std::isfinite(idepth_max))
|
||||||
|
{
|
||||||
|
ptpMax = pr + hostToFrame_Kt*idepth_max;
|
||||||
|
uMax = ptpMax[0] / ptpMax[2];
|
||||||
|
vMax = ptpMax[1] / ptpMax[2];
|
||||||
|
|
||||||
|
|
||||||
|
if(!(uMax > 4 && vMax > 4 && uMax < wG[0]-5 && vMax < hG[0]-5))
|
||||||
|
{
|
||||||
|
if(debugPrint) printf("OOB uMax %f %f - %f %f!\n",u,v, uMax, vMax);
|
||||||
|
lastTraceUV = Vec2f(-1,-1);
|
||||||
|
lastTracePixelInterval=0;
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_OOB;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ============== check their distance. everything below 2px is OK (-> skip). ===================
|
||||||
|
dist = (uMin-uMax)*(uMin-uMax) + (vMin-vMax)*(vMin-vMax);
|
||||||
|
dist = sqrtf(dist);
|
||||||
|
if(dist < setting_trace_slackInterval)
|
||||||
|
{
|
||||||
|
if(debugPrint)
|
||||||
|
printf("TOO CERTAIN ALREADY (dist %f)!\n", dist);
|
||||||
|
|
||||||
|
lastTraceUV = Vec2f(uMax+uMin, vMax+vMin)*0.5;
|
||||||
|
lastTracePixelInterval=dist;
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_SKIPPED;
|
||||||
|
}
|
||||||
|
assert(dist>0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dist = maxPixSearch;
|
||||||
|
|
||||||
|
// project to arbitrary depth to get direction.
|
||||||
|
ptpMax = pr + hostToFrame_Kt*0.01;
|
||||||
|
uMax = ptpMax[0] / ptpMax[2];
|
||||||
|
vMax = ptpMax[1] / ptpMax[2];
|
||||||
|
|
||||||
|
// direction.
|
||||||
|
float dx = uMax-uMin;
|
||||||
|
float dy = vMax-vMin;
|
||||||
|
float d = 1.0f / sqrtf(dx*dx+dy*dy);
|
||||||
|
|
||||||
|
// set to [setting_maxPixSearch].
|
||||||
|
uMax = uMin + dist*dx*d;
|
||||||
|
vMax = vMin + dist*dy*d;
|
||||||
|
|
||||||
|
// may still be out!
|
||||||
|
if(!(uMax > 4 && vMax > 4 && uMax < wG[0]-5 && vMax < hG[0]-5))
|
||||||
|
{
|
||||||
|
if(debugPrint) printf("OOB uMax-coarse %f %f %f!\n", uMax, vMax, ptpMax[2]);
|
||||||
|
lastTraceUV = Vec2f(-1,-1);
|
||||||
|
lastTracePixelInterval=0;
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_OOB;
|
||||||
|
}
|
||||||
|
assert(dist>0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// set OOB if scale change too big.
|
||||||
|
if(!(idepth_min<0 || (ptpMin[2]>0.75 && ptpMin[2]<1.5)))
|
||||||
|
{
|
||||||
|
if(debugPrint) printf("OOB SCALE %f %f %f!\n", uMax, vMax, ptpMin[2]);
|
||||||
|
lastTraceUV = Vec2f(-1,-1);
|
||||||
|
lastTracePixelInterval=0;
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_OOB;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ============== compute error-bounds on result in pixel. if the new interval is not at least 1/2 of the old, SKIP ===================
|
||||||
|
float dx = setting_trace_stepsize*(uMax-uMin);
|
||||||
|
float dy = setting_trace_stepsize*(vMax-vMin);
|
||||||
|
|
||||||
|
float a = (Vec2f(dx,dy).transpose() * gradH * Vec2f(dx,dy));
|
||||||
|
float b = (Vec2f(dy,-dx).transpose() * gradH * Vec2f(dy,-dx));
|
||||||
|
float errorInPixel = 0.2f + 0.2f * (a+b) / a;
|
||||||
|
|
||||||
|
if(errorInPixel*setting_trace_minImprovementFactor > dist && std::isfinite(idepth_max))
|
||||||
|
{
|
||||||
|
if(debugPrint)
|
||||||
|
printf("NO SIGNIFICANT IMPROVMENT (%f)!\n", errorInPixel);
|
||||||
|
lastTraceUV = Vec2f(uMax+uMin, vMax+vMin)*0.5;
|
||||||
|
lastTracePixelInterval=dist;
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_BADCONDITION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(errorInPixel >10) errorInPixel=10;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ============== do the discrete search ===================
|
||||||
|
dx /= dist;
|
||||||
|
dy /= dist;
|
||||||
|
|
||||||
|
if(debugPrint)
|
||||||
|
printf("trace pt (%.1f %.1f) from frame %d to %d. Range %f (%.1f %.1f) -> %f (%.1f %.1f)! ErrorInPixel %.1f!\n",
|
||||||
|
u,v,
|
||||||
|
host->shell->id, frame->shell->id,
|
||||||
|
idepth_min, uMin, vMin,
|
||||||
|
idepth_max, uMax, vMax,
|
||||||
|
errorInPixel
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
if(dist>maxPixSearch)
|
||||||
|
{
|
||||||
|
uMax = uMin + maxPixSearch*dx;
|
||||||
|
vMax = vMin + maxPixSearch*dy;
|
||||||
|
dist = maxPixSearch;
|
||||||
|
}
|
||||||
|
|
||||||
|
int numSteps = 1.9999f + dist / setting_trace_stepsize;
|
||||||
|
Mat22f Rplane = hostToFrame_KRKi.topLeftCorner<2,2>();
|
||||||
|
|
||||||
|
float randShift = uMin*1000-floorf(uMin*1000);
|
||||||
|
float ptx = uMin-randShift*dx;
|
||||||
|
float pty = vMin-randShift*dy;
|
||||||
|
|
||||||
|
|
||||||
|
Vec2f rotatetPattern[MAX_RES_PER_POINT];
|
||||||
|
for(int idx=0;idx<patternNum;idx++)
|
||||||
|
rotatetPattern[idx] = Rplane * Vec2f(patternP[idx][0], patternP[idx][1]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(!std::isfinite(dx) || !std::isfinite(dy))
|
||||||
|
{
|
||||||
|
//printf("COUGHT INF / NAN dxdy (%f %f)!\n", dx, dx);
|
||||||
|
|
||||||
|
lastTracePixelInterval=0;
|
||||||
|
lastTraceUV = Vec2f(-1,-1);
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_OOB;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
float errors[100];
|
||||||
|
float bestU=0, bestV=0, bestEnergy=1e10;
|
||||||
|
int bestIdx=-1;
|
||||||
|
if(numSteps >= 100) numSteps = 99;
|
||||||
|
|
||||||
|
for(int i=0;i<numSteps;i++)
|
||||||
|
{
|
||||||
|
float energy=0;
|
||||||
|
for(int idx=0;idx<patternNum;idx++)
|
||||||
|
{
|
||||||
|
float hitColor = getInterpolatedElement31(frame->dI,
|
||||||
|
(float)(ptx+rotatetPattern[idx][0]),
|
||||||
|
(float)(pty+rotatetPattern[idx][1]),
|
||||||
|
wG[0]);
|
||||||
|
|
||||||
|
if(!std::isfinite(hitColor)) {energy+=1e5; continue;}
|
||||||
|
float residual = hitColor - (float)(hostToFrame_affine[0] * color[idx] + hostToFrame_affine[1]);
|
||||||
|
float hw = fabs(residual) < setting_huberTH ? 1 : setting_huberTH / fabs(residual);
|
||||||
|
energy += hw *residual*residual*(2-hw);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(debugPrint)
|
||||||
|
printf("step %.1f %.1f (id %f): energy = %f!\n",
|
||||||
|
ptx, pty, 0.0f, energy);
|
||||||
|
|
||||||
|
|
||||||
|
errors[i] = energy;
|
||||||
|
if(energy < bestEnergy)
|
||||||
|
{
|
||||||
|
bestU = ptx; bestV = pty; bestEnergy = energy; bestIdx = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptx+=dx;
|
||||||
|
pty+=dy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// find best score outside a +-2px radius.
|
||||||
|
float secondBest=1e10;
|
||||||
|
for(int i=0;i<numSteps;i++)
|
||||||
|
{
|
||||||
|
if((i < bestIdx-setting_minTraceTestRadius || i > bestIdx+setting_minTraceTestRadius) && errors[i] < secondBest)
|
||||||
|
secondBest = errors[i];
|
||||||
|
}
|
||||||
|
float newQuality = secondBest / bestEnergy;
|
||||||
|
if(newQuality < quality || numSteps > 10) quality = newQuality;
|
||||||
|
|
||||||
|
|
||||||
|
// ============== do GN optimization ===================
|
||||||
|
float uBak=bestU, vBak=bestV, gnstepsize=1, stepBack=0;
|
||||||
|
if(setting_trace_GNIterations>0) bestEnergy = 1e5;
|
||||||
|
int gnStepsGood=0, gnStepsBad=0;
|
||||||
|
for(int it=0;it<setting_trace_GNIterations;it++)
|
||||||
|
{
|
||||||
|
float H = 1, b=0, energy=0;
|
||||||
|
for(int idx=0;idx<patternNum;idx++)
|
||||||
|
{
|
||||||
|
Vec3f hitColor = getInterpolatedElement33(frame->dI,
|
||||||
|
(float)(bestU+rotatetPattern[idx][0]),
|
||||||
|
(float)(bestV+rotatetPattern[idx][1]),wG[0]);
|
||||||
|
|
||||||
|
if(!std::isfinite((float)hitColor[0])) {energy+=1e5; continue;}
|
||||||
|
float residual = hitColor[0] - (hostToFrame_affine[0] * color[idx] + hostToFrame_affine[1]);
|
||||||
|
float dResdDist = dx*hitColor[1] + dy*hitColor[2];
|
||||||
|
float hw = fabs(residual) < setting_huberTH ? 1 : setting_huberTH / fabs(residual);
|
||||||
|
|
||||||
|
H += hw*dResdDist*dResdDist;
|
||||||
|
b += hw*residual*dResdDist;
|
||||||
|
energy += weights[idx]*weights[idx]*hw *residual*residual*(2-hw);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(energy > bestEnergy)
|
||||||
|
{
|
||||||
|
gnStepsBad++;
|
||||||
|
|
||||||
|
// do a smaller step from old point.
|
||||||
|
stepBack*=0.5;
|
||||||
|
bestU = uBak + stepBack*dx;
|
||||||
|
bestV = vBak + stepBack*dy;
|
||||||
|
if(debugPrint)
|
||||||
|
printf("GN BACK %d: E %f, H %f, b %f. id-step %f. UV %f %f -> %f %f.\n",
|
||||||
|
it, energy, H, b, stepBack,
|
||||||
|
uBak, vBak, bestU, bestV);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gnStepsGood++;
|
||||||
|
|
||||||
|
float step = -gnstepsize*b/H;
|
||||||
|
if(step < -0.5) step = -0.5;
|
||||||
|
else if(step > 0.5) step=0.5;
|
||||||
|
|
||||||
|
if(!std::isfinite(step)) step=0;
|
||||||
|
|
||||||
|
uBak=bestU;
|
||||||
|
vBak=bestV;
|
||||||
|
stepBack=step;
|
||||||
|
|
||||||
|
bestU += step*dx;
|
||||||
|
bestV += step*dy;
|
||||||
|
bestEnergy = energy;
|
||||||
|
|
||||||
|
if(debugPrint)
|
||||||
|
printf("GN step %d: E %f, H %f, b %f. id-step %f. UV %f %f -> %f %f.\n",
|
||||||
|
it, energy, H, b, step,
|
||||||
|
uBak, vBak, bestU, bestV);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(fabsf(stepBack) < setting_trace_GNThreshold) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ============== detect energy-based outlier. ===================
|
||||||
|
// float absGrad0 = getInterpolatedElement(frame->absSquaredGrad[0],bestU, bestV, wG[0]);
|
||||||
|
// float absGrad1 = getInterpolatedElement(frame->absSquaredGrad[1],bestU*0.5-0.25, bestV*0.5-0.25, wG[1]);
|
||||||
|
// float absGrad2 = getInterpolatedElement(frame->absSquaredGrad[2],bestU*0.25-0.375, bestV*0.25-0.375, wG[2]);
|
||||||
|
if(!(bestEnergy < energyTH*setting_trace_extraSlackOnTH))
|
||||||
|
// || (absGrad0*areaGradientSlackFactor < host->frameGradTH
|
||||||
|
// && absGrad1*areaGradientSlackFactor < host->frameGradTH*0.75f
|
||||||
|
// && absGrad2*areaGradientSlackFactor < host->frameGradTH*0.50f))
|
||||||
|
{
|
||||||
|
if(debugPrint)
|
||||||
|
printf("OUTLIER!\n");
|
||||||
|
|
||||||
|
lastTracePixelInterval=0;
|
||||||
|
lastTraceUV = Vec2f(-1,-1);
|
||||||
|
if(lastTraceStatus == ImmaturePointStatus::IPS_OUTLIER)
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_OOB;
|
||||||
|
else
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_OUTLIER;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ============== set new interval ===================
|
||||||
|
if(dx*dx>dy*dy)
|
||||||
|
{
|
||||||
|
idepth_min = (pr[2]*(bestU-errorInPixel*dx) - pr[0]) / (hostToFrame_Kt[0] - hostToFrame_Kt[2]*(bestU-errorInPixel*dx));
|
||||||
|
idepth_max = (pr[2]*(bestU+errorInPixel*dx) - pr[0]) / (hostToFrame_Kt[0] - hostToFrame_Kt[2]*(bestU+errorInPixel*dx));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
idepth_min = (pr[2]*(bestV-errorInPixel*dy) - pr[1]) / (hostToFrame_Kt[1] - hostToFrame_Kt[2]*(bestV-errorInPixel*dy));
|
||||||
|
idepth_max = (pr[2]*(bestV+errorInPixel*dy) - pr[1]) / (hostToFrame_Kt[1] - hostToFrame_Kt[2]*(bestV+errorInPixel*dy));
|
||||||
|
}
|
||||||
|
if(idepth_min > idepth_max) std::swap<float>(idepth_min, idepth_max);
|
||||||
|
|
||||||
|
|
||||||
|
if(!std::isfinite(idepth_min) || !std::isfinite(idepth_max) || (idepth_max<0))
|
||||||
|
{
|
||||||
|
//printf("COUGHT INF / NAN minmax depth (%f %f)!\n", idepth_min, idepth_max);
|
||||||
|
|
||||||
|
lastTracePixelInterval=0;
|
||||||
|
lastTraceUV = Vec2f(-1,-1);
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_OUTLIER;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastTracePixelInterval=2*errorInPixel;
|
||||||
|
lastTraceUV = Vec2f(bestU, bestV);
|
||||||
|
return lastTraceStatus = ImmaturePointStatus::IPS_GOOD;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float ImmaturePoint::getdPixdd(
|
||||||
|
CalibHessian * HCalib,
|
||||||
|
ImmaturePointTemporaryResidual* tmpRes,
|
||||||
|
float idepth)
|
||||||
|
{
|
||||||
|
FrameFramePrecalc* precalc = &(host->targetPrecalc[tmpRes->target->idx]);
|
||||||
|
const Vec3f &PRE_tTll = precalc->PRE_tTll;
|
||||||
|
float drescale, u=0, v=0, new_idepth;
|
||||||
|
float Ku, Kv;
|
||||||
|
Vec3f KliP;
|
||||||
|
|
||||||
|
projectPoint(this->u,this->v, idepth, 0, 0,HCalib,
|
||||||
|
precalc->PRE_RTll,PRE_tTll, drescale, u, v, Ku, Kv, KliP, new_idepth);
|
||||||
|
|
||||||
|
float dxdd = (PRE_tTll[0]-PRE_tTll[2]*u)*HCalib->fxl();
|
||||||
|
float dydd = (PRE_tTll[1]-PRE_tTll[2]*v)*HCalib->fyl();
|
||||||
|
return drescale*sqrtf(dxdd*dxdd + dydd*dydd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float ImmaturePoint::calcResidual(
|
||||||
|
CalibHessian * HCalib, const float outlierTHSlack,
|
||||||
|
ImmaturePointTemporaryResidual* tmpRes,
|
||||||
|
float idepth)
|
||||||
|
{
|
||||||
|
FrameFramePrecalc* precalc = &(host->targetPrecalc[tmpRes->target->idx]);
|
||||||
|
|
||||||
|
float energyLeft=0;
|
||||||
|
const Eigen::Vector3f* dIl = tmpRes->target->dI;
|
||||||
|
const Mat33f &PRE_KRKiTll = precalc->PRE_KRKiTll;
|
||||||
|
const Vec3f &PRE_KtTll = precalc->PRE_KtTll;
|
||||||
|
Vec2f affLL = precalc->PRE_aff_mode;
|
||||||
|
|
||||||
|
for(int idx=0;idx<patternNum;idx++)
|
||||||
|
{
|
||||||
|
float Ku, Kv;
|
||||||
|
if(!projectPoint(this->u+patternP[idx][0], this->v+patternP[idx][1], idepth, PRE_KRKiTll, PRE_KtTll, Ku, Kv))
|
||||||
|
{return 1e10;}
|
||||||
|
|
||||||
|
Vec3f hitColor = (getInterpolatedElement33(dIl, Ku, Kv, wG[0]));
|
||||||
|
if(!std::isfinite((float)hitColor[0])) {return 1e10;}
|
||||||
|
//if(benchmarkSpecialOption==5) hitColor = (getInterpolatedElement13BiCub(tmpRes->target->I, Ku, Kv, wG[0]));
|
||||||
|
|
||||||
|
float residual = hitColor[0] - (affLL[0] * color[idx] + affLL[1]);
|
||||||
|
|
||||||
|
float hw = fabsf(residual) < setting_huberTH ? 1 : setting_huberTH / fabsf(residual);
|
||||||
|
energyLeft += weights[idx]*weights[idx]*hw *residual*residual*(2-hw);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(energyLeft > energyTH*outlierTHSlack)
|
||||||
|
{
|
||||||
|
energyLeft = energyTH*outlierTHSlack;
|
||||||
|
}
|
||||||
|
return energyLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
double ImmaturePoint::linearizeResidual(
|
||||||
|
CalibHessian * HCalib, const float outlierTHSlack,
|
||||||
|
ImmaturePointTemporaryResidual* tmpRes,
|
||||||
|
float &Hdd, float &bd,
|
||||||
|
float idepth)
|
||||||
|
{
|
||||||
|
if(tmpRes->state_state == ResState::OOB)
|
||||||
|
{ tmpRes->state_NewState = ResState::OOB; return tmpRes->state_energy; }
|
||||||
|
|
||||||
|
FrameFramePrecalc* precalc = &(host->targetPrecalc[tmpRes->target->idx]);
|
||||||
|
|
||||||
|
// check OOB due to scale angle change.
|
||||||
|
|
||||||
|
float energyLeft=0;
|
||||||
|
const Eigen::Vector3f* dIl = tmpRes->target->dI;
|
||||||
|
const Mat33f &PRE_RTll = precalc->PRE_RTll;
|
||||||
|
const Vec3f &PRE_tTll = precalc->PRE_tTll;
|
||||||
|
//const float * const Il = tmpRes->target->I;
|
||||||
|
|
||||||
|
Vec2f affLL = precalc->PRE_aff_mode;
|
||||||
|
|
||||||
|
for(int idx=0;idx<patternNum;idx++)
|
||||||
|
{
|
||||||
|
int dx = patternP[idx][0];
|
||||||
|
int dy = patternP[idx][1];
|
||||||
|
|
||||||
|
float drescale, u, v, new_idepth;
|
||||||
|
float Ku, Kv;
|
||||||
|
Vec3f KliP;
|
||||||
|
|
||||||
|
if(!projectPoint(this->u,this->v, idepth, dx, dy,HCalib,
|
||||||
|
PRE_RTll,PRE_tTll, drescale, u, v, Ku, Kv, KliP, new_idepth))
|
||||||
|
{tmpRes->state_NewState = ResState::OOB; return tmpRes->state_energy;}
|
||||||
|
|
||||||
|
|
||||||
|
Vec3f hitColor = (getInterpolatedElement33(dIl, Ku, Kv, wG[0]));
|
||||||
|
|
||||||
|
if(!std::isfinite((float)hitColor[0])) {tmpRes->state_NewState = ResState::OOB; return tmpRes->state_energy;}
|
||||||
|
float residual = hitColor[0] - (affLL[0] * color[idx] + affLL[1]);
|
||||||
|
|
||||||
|
float hw = fabsf(residual) < setting_huberTH ? 1 : setting_huberTH / fabsf(residual);
|
||||||
|
energyLeft += weights[idx]*weights[idx]*hw *residual*residual*(2-hw);
|
||||||
|
|
||||||
|
// depth derivatives.
|
||||||
|
float dxInterp = hitColor[1]*HCalib->fxl();
|
||||||
|
float dyInterp = hitColor[2]*HCalib->fyl();
|
||||||
|
float d_idepth = derive_idepth(PRE_tTll, u, v, dx, dy, dxInterp, dyInterp, drescale);
|
||||||
|
|
||||||
|
hw *= weights[idx]*weights[idx];
|
||||||
|
|
||||||
|
Hdd += (hw*d_idepth)*d_idepth;
|
||||||
|
bd += (hw*residual)*d_idepth;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(energyLeft > energyTH*outlierTHSlack)
|
||||||
|
{
|
||||||
|
energyLeft = energyTH*outlierTHSlack;
|
||||||
|
tmpRes->state_NewState = ResState::OUTLIER;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmpRes->state_NewState = ResState::IN;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpRes->state_NewEnergy = energyLeft;
|
||||||
|
return energyLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
111
src/FullSystem/ImmaturePoint.h
Normal file
111
src/FullSystem/ImmaturePoint.h
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
struct ImmaturePointTemporaryResidual
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ResState state_state;
|
||||||
|
double state_energy;
|
||||||
|
ResState state_NewState;
|
||||||
|
double state_NewEnergy;
|
||||||
|
FrameHessian* target;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum ImmaturePointStatus {
|
||||||
|
IPS_GOOD=0, // traced well and good
|
||||||
|
IPS_OOB, // OOB: end tracking & marginalize!
|
||||||
|
IPS_OUTLIER, // energy too high: if happens again: outlier!
|
||||||
|
IPS_SKIPPED, // traced well and good (but not actually traced).
|
||||||
|
IPS_BADCONDITION, // not traced because of bad condition.
|
||||||
|
IPS_UNINITIALIZED}; // not even traced once.
|
||||||
|
|
||||||
|
|
||||||
|
class ImmaturePoint
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
// static values
|
||||||
|
float color[MAX_RES_PER_POINT];
|
||||||
|
float weights[MAX_RES_PER_POINT];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Mat22f gradH;
|
||||||
|
Vec2f gradH_ev;
|
||||||
|
Mat22f gradH_eig;
|
||||||
|
float energyTH;
|
||||||
|
float u,v;
|
||||||
|
FrameHessian* host;
|
||||||
|
int idxInImmaturePoints;
|
||||||
|
|
||||||
|
float quality;
|
||||||
|
|
||||||
|
float my_type;
|
||||||
|
|
||||||
|
float idepth_min;
|
||||||
|
float idepth_max;
|
||||||
|
ImmaturePoint(int u_, int v_, FrameHessian* host_, float type, CalibHessian* HCalib);
|
||||||
|
~ImmaturePoint();
|
||||||
|
|
||||||
|
ImmaturePointStatus traceOn(FrameHessian* frame, const Mat33f &hostToFrame_KRKi, const Vec3f &hostToFrame_Kt, const Vec2f &hostToFrame_affine, CalibHessian* HCalib, bool debugPrint=false);
|
||||||
|
|
||||||
|
ImmaturePointStatus lastTraceStatus;
|
||||||
|
Vec2f lastTraceUV;
|
||||||
|
float lastTracePixelInterval;
|
||||||
|
|
||||||
|
float idepth_GT;
|
||||||
|
|
||||||
|
double linearizeResidual(
|
||||||
|
CalibHessian * HCalib, const float outlierTHSlack,
|
||||||
|
ImmaturePointTemporaryResidual* tmpRes,
|
||||||
|
float &Hdd, float &bd,
|
||||||
|
float idepth);
|
||||||
|
float getdPixdd(
|
||||||
|
CalibHessian * HCalib,
|
||||||
|
ImmaturePointTemporaryResidual* tmpRes,
|
||||||
|
float idepth);
|
||||||
|
|
||||||
|
float calcResidual(
|
||||||
|
CalibHessian * HCalib, const float outlierTHSlack,
|
||||||
|
ImmaturePointTemporaryResidual* tmpRes,
|
||||||
|
float idepth);
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
256
src/FullSystem/PixelSelector.h
Normal file
256
src/FullSystem/PixelSelector.h
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
const float minUseGrad_pixsel = 10;
|
||||||
|
|
||||||
|
|
||||||
|
template<int pot>
|
||||||
|
inline int gridMaxSelection(Eigen::Vector3f* grads, bool* map_out, int w, int h, float THFac)
|
||||||
|
{
|
||||||
|
|
||||||
|
memset(map_out, 0, sizeof(bool)*w*h);
|
||||||
|
|
||||||
|
int numGood = 0;
|
||||||
|
for(int y=1;y<h-pot;y+=pot)
|
||||||
|
{
|
||||||
|
for(int x=1;x<w-pot;x+=pot)
|
||||||
|
{
|
||||||
|
int bestXXID = -1;
|
||||||
|
int bestYYID = -1;
|
||||||
|
int bestXYID = -1;
|
||||||
|
int bestYXID = -1;
|
||||||
|
|
||||||
|
float bestXX=0, bestYY=0, bestXY=0, bestYX=0;
|
||||||
|
|
||||||
|
Eigen::Vector3f* grads0 = grads+x+y*w;
|
||||||
|
for(int dx=0;dx<pot;dx++)
|
||||||
|
for(int dy=0;dy<pot;dy++)
|
||||||
|
{
|
||||||
|
int idx = dx+dy*w;
|
||||||
|
Eigen::Vector3f g=grads0[idx];
|
||||||
|
float sqgd = g.tail<2>().squaredNorm();
|
||||||
|
float TH = THFac*minUseGrad_pixsel * (0.75f);
|
||||||
|
|
||||||
|
if(sqgd > TH*TH)
|
||||||
|
{
|
||||||
|
float agx = fabs((float)g[1]);
|
||||||
|
if(agx > bestXX) {bestXX=agx; bestXXID=idx;}
|
||||||
|
|
||||||
|
float agy = fabs((float)g[2]);
|
||||||
|
if(agy > bestYY) {bestYY=agy; bestYYID=idx;}
|
||||||
|
|
||||||
|
float gxpy = fabs((float)(g[1]-g[2]));
|
||||||
|
if(gxpy > bestXY) {bestXY=gxpy; bestXYID=idx;}
|
||||||
|
|
||||||
|
float gxmy = fabs((float)(g[1]+g[2]));
|
||||||
|
if(gxmy > bestYX) {bestYX=gxmy; bestYXID=idx;}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool* map0 = map_out+x+y*w;
|
||||||
|
|
||||||
|
if(bestXXID>=0)
|
||||||
|
{
|
||||||
|
if(!map0[bestXXID])
|
||||||
|
numGood++;
|
||||||
|
map0[bestXXID] = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
if(bestYYID>=0)
|
||||||
|
{
|
||||||
|
if(!map0[bestYYID])
|
||||||
|
numGood++;
|
||||||
|
map0[bestYYID] = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
if(bestXYID>=0)
|
||||||
|
{
|
||||||
|
if(!map0[bestXYID])
|
||||||
|
numGood++;
|
||||||
|
map0[bestXYID] = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
if(bestYXID>=0)
|
||||||
|
{
|
||||||
|
if(!map0[bestYXID])
|
||||||
|
numGood++;
|
||||||
|
map0[bestYXID] = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return numGood;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline int gridMaxSelection(Eigen::Vector3f* grads, bool* map_out, int w, int h, int pot, float THFac)
|
||||||
|
{
|
||||||
|
|
||||||
|
memset(map_out, 0, sizeof(bool)*w*h);
|
||||||
|
|
||||||
|
int numGood = 0;
|
||||||
|
for(int y=1;y<h-pot;y+=pot)
|
||||||
|
{
|
||||||
|
for(int x=1;x<w-pot;x+=pot)
|
||||||
|
{
|
||||||
|
int bestXXID = -1;
|
||||||
|
int bestYYID = -1;
|
||||||
|
int bestXYID = -1;
|
||||||
|
int bestYXID = -1;
|
||||||
|
|
||||||
|
float bestXX=0, bestYY=0, bestXY=0, bestYX=0;
|
||||||
|
|
||||||
|
Eigen::Vector3f* grads0 = grads+x+y*w;
|
||||||
|
for(int dx=0;dx<pot;dx++)
|
||||||
|
for(int dy=0;dy<pot;dy++)
|
||||||
|
{
|
||||||
|
int idx = dx+dy*w;
|
||||||
|
Eigen::Vector3f g=grads0[idx];
|
||||||
|
float sqgd = g.tail<2>().squaredNorm();
|
||||||
|
float TH = THFac*minUseGrad_pixsel * (0.75f);
|
||||||
|
|
||||||
|
if(sqgd > TH*TH)
|
||||||
|
{
|
||||||
|
float agx = fabs((float)g[1]);
|
||||||
|
if(agx > bestXX) {bestXX=agx; bestXXID=idx;}
|
||||||
|
|
||||||
|
float agy = fabs((float)g[2]);
|
||||||
|
if(agy > bestYY) {bestYY=agy; bestYYID=idx;}
|
||||||
|
|
||||||
|
float gxpy = fabs((float)(g[1]-g[2]));
|
||||||
|
if(gxpy > bestXY) {bestXY=gxpy; bestXYID=idx;}
|
||||||
|
|
||||||
|
float gxmy = fabs((float)(g[1]+g[2]));
|
||||||
|
if(gxmy > bestYX) {bestYX=gxmy; bestYXID=idx;}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool* map0 = map_out+x+y*w;
|
||||||
|
|
||||||
|
if(bestXXID>=0)
|
||||||
|
{
|
||||||
|
if(!map0[bestXXID])
|
||||||
|
numGood++;
|
||||||
|
map0[bestXXID] = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
if(bestYYID>=0)
|
||||||
|
{
|
||||||
|
if(!map0[bestYYID])
|
||||||
|
numGood++;
|
||||||
|
map0[bestYYID] = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
if(bestXYID>=0)
|
||||||
|
{
|
||||||
|
if(!map0[bestXYID])
|
||||||
|
numGood++;
|
||||||
|
map0[bestXYID] = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
if(bestYXID>=0)
|
||||||
|
{
|
||||||
|
if(!map0[bestYXID])
|
||||||
|
numGood++;
|
||||||
|
map0[bestYXID] = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return numGood;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline int makePixelStatus(Eigen::Vector3f* grads, bool* map, int w, int h, float desiredDensity, int recsLeft=5, float THFac = 1)
|
||||||
|
{
|
||||||
|
if(sparsityFactor < 1) sparsityFactor = 1;
|
||||||
|
|
||||||
|
int numGoodPoints;
|
||||||
|
|
||||||
|
|
||||||
|
if(sparsityFactor==1) numGoodPoints = gridMaxSelection<1>(grads, map, w, h, THFac);
|
||||||
|
else if(sparsityFactor==2) numGoodPoints = gridMaxSelection<2>(grads, map, w, h, THFac);
|
||||||
|
else if(sparsityFactor==3) numGoodPoints = gridMaxSelection<3>(grads, map, w, h, THFac);
|
||||||
|
else if(sparsityFactor==4) numGoodPoints = gridMaxSelection<4>(grads, map, w, h, THFac);
|
||||||
|
else if(sparsityFactor==5) numGoodPoints = gridMaxSelection<5>(grads, map, w, h, THFac);
|
||||||
|
else if(sparsityFactor==6) numGoodPoints = gridMaxSelection<6>(grads, map, w, h, THFac);
|
||||||
|
else if(sparsityFactor==7) numGoodPoints = gridMaxSelection<7>(grads, map, w, h, THFac);
|
||||||
|
else if(sparsityFactor==8) numGoodPoints = gridMaxSelection<8>(grads, map, w, h, THFac);
|
||||||
|
else if(sparsityFactor==9) numGoodPoints = gridMaxSelection<9>(grads, map, w, h, THFac);
|
||||||
|
else if(sparsityFactor==10) numGoodPoints = gridMaxSelection<10>(grads, map, w, h, THFac);
|
||||||
|
else if(sparsityFactor==11) numGoodPoints = gridMaxSelection<11>(grads, map, w, h, THFac);
|
||||||
|
else numGoodPoints = gridMaxSelection(grads, map, w, h, sparsityFactor, THFac);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* #points is approximately proportional to sparsityFactor^2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
float quotia = numGoodPoints / (float)(desiredDensity);
|
||||||
|
|
||||||
|
int newSparsity = (sparsityFactor * sqrtf(quotia))+0.7f;
|
||||||
|
|
||||||
|
|
||||||
|
if(newSparsity < 1) newSparsity=1;
|
||||||
|
|
||||||
|
|
||||||
|
float oldTHFac = THFac;
|
||||||
|
if(newSparsity==1 && sparsityFactor==1) THFac = 0.5;
|
||||||
|
|
||||||
|
|
||||||
|
if((abs(newSparsity-sparsityFactor) < 1 && THFac==oldTHFac) ||
|
||||||
|
( quotia > 0.8 && 1.0f / quotia > 0.8) ||
|
||||||
|
recsLeft == 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
// printf(" \n");
|
||||||
|
//all good
|
||||||
|
sparsityFactor = newSparsity;
|
||||||
|
return numGoodPoints;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// printf(" -> re-evaluate! \n");
|
||||||
|
// re-evaluate.
|
||||||
|
sparsityFactor = newSparsity;
|
||||||
|
return makePixelStatus(grads, map, w,h, desiredDensity, recsLeft-1, THFac);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
442
src/FullSystem/PixelSelector2.cpp
Normal file
442
src/FullSystem/PixelSelector2.cpp
Normal file
@@ -0,0 +1,442 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "FullSystem/PixelSelector2.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "IOWrapper/ImageDisplay.h"
|
||||||
|
#include "util/globalCalib.h"
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
#include "util/globalFuncs.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
PixelSelector::PixelSelector(int w, int h)
|
||||||
|
{
|
||||||
|
randomPattern = new unsigned char[w*h];
|
||||||
|
std::srand(3141592); // want to be deterministic.
|
||||||
|
for(int i=0;i<w*h;i++) randomPattern[i] = rand() & 0xFF;
|
||||||
|
|
||||||
|
currentPotential=3;
|
||||||
|
|
||||||
|
|
||||||
|
gradHist = new int[100*(1+w/32)*(1+h/32)];
|
||||||
|
ths = new float[(w/32)*(h/32)+100];
|
||||||
|
thsSmoothed = new float[(w/32)*(h/32)+100];
|
||||||
|
|
||||||
|
allowFast=false;
|
||||||
|
gradHistFrame=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
PixelSelector::~PixelSelector()
|
||||||
|
{
|
||||||
|
delete[] randomPattern;
|
||||||
|
delete[] gradHist;
|
||||||
|
delete[] ths;
|
||||||
|
delete[] thsSmoothed;
|
||||||
|
}
|
||||||
|
|
||||||
|
int computeHistQuantil(int* hist, float below)
|
||||||
|
{
|
||||||
|
int th = hist[0]*below+0.5f;
|
||||||
|
for(int i=0;i<90;i++)
|
||||||
|
{
|
||||||
|
th -= hist[i+1];
|
||||||
|
if(th<0) return i;
|
||||||
|
}
|
||||||
|
return 90;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PixelSelector::makeHists(const FrameHessian* const fh)
|
||||||
|
{
|
||||||
|
gradHistFrame = fh;
|
||||||
|
float * mapmax0 = fh->absSquaredGrad[0];
|
||||||
|
|
||||||
|
int w = wG[0];
|
||||||
|
int h = hG[0];
|
||||||
|
|
||||||
|
int w32 = w/32;
|
||||||
|
int h32 = h/32;
|
||||||
|
thsStep = w32;
|
||||||
|
|
||||||
|
for(int y=0;y<h32;y++)
|
||||||
|
for(int x=0;x<w32;x++)
|
||||||
|
{
|
||||||
|
float* map0 = mapmax0+32*x+32*y*w;
|
||||||
|
int* hist0 = gradHist;// + 50*(x+y*w32);
|
||||||
|
memset(hist0,0,sizeof(int)*50);
|
||||||
|
|
||||||
|
for(int j=0;j<32;j++) for(int i=0;i<32;i++)
|
||||||
|
{
|
||||||
|
int it = i+32*x;
|
||||||
|
int jt = j+32*y;
|
||||||
|
if(it>w-2 || jt>h-2 || it<1 || jt<1) continue;
|
||||||
|
int g = sqrtf(map0[i+j*w]);
|
||||||
|
if(g>48) g=48;
|
||||||
|
hist0[g+1]++;
|
||||||
|
hist0[0]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ths[x+y*w32] = computeHistQuantil(hist0,setting_minGradHistCut) + setting_minGradHistAdd;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int y=0;y<h32;y++)
|
||||||
|
for(int x=0;x<w32;x++)
|
||||||
|
{
|
||||||
|
float sum=0,num=0;
|
||||||
|
if(x>0)
|
||||||
|
{
|
||||||
|
if(y>0) {num++; sum+=ths[x-1+(y-1)*w32];}
|
||||||
|
if(y<h32-1) {num++; sum+=ths[x-1+(y+1)*w32];}
|
||||||
|
num++; sum+=ths[x-1+(y)*w32];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(x<w32-1)
|
||||||
|
{
|
||||||
|
if(y>0) {num++; sum+=ths[x+1+(y-1)*w32];}
|
||||||
|
if(y<h32-1) {num++; sum+=ths[x+1+(y+1)*w32];}
|
||||||
|
num++; sum+=ths[x+1+(y)*w32];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(y>0) {num++; sum+=ths[x+(y-1)*w32];}
|
||||||
|
if(y<h32-1) {num++; sum+=ths[x+(y+1)*w32];}
|
||||||
|
num++; sum+=ths[x+y*w32];
|
||||||
|
|
||||||
|
thsSmoothed[x+y*w32] = (sum/num) * (sum/num);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
int PixelSelector::makeMaps(
|
||||||
|
const FrameHessian* const fh,
|
||||||
|
float* map_out, float density, int recursionsLeft, bool plot, float thFactor)
|
||||||
|
{
|
||||||
|
float numHave=0;
|
||||||
|
float numWant=density;
|
||||||
|
float quotia;
|
||||||
|
int idealPotential = currentPotential;
|
||||||
|
|
||||||
|
|
||||||
|
// if(setting_pixelSelectionUseFast>0 && allowFast)
|
||||||
|
// {
|
||||||
|
// memset(map_out, 0, sizeof(float)*wG[0]*hG[0]);
|
||||||
|
// std::vector<cv::KeyPoint> pts;
|
||||||
|
// cv::Mat img8u(hG[0],wG[0],CV_8U);
|
||||||
|
// for(int i=0;i<wG[0]*hG[0];i++)
|
||||||
|
// {
|
||||||
|
// float v = fh->dI[i][0]*0.8;
|
||||||
|
// img8u.at<uchar>(i) = (!std::isfinite(v) || v>255) ? 255 : v;
|
||||||
|
// }
|
||||||
|
// cv::FAST(img8u, pts, setting_pixelSelectionUseFast, true);
|
||||||
|
// for(unsigned int i=0;i<pts.size();i++)
|
||||||
|
// {
|
||||||
|
// int x = pts[i].pt.x+0.5;
|
||||||
|
// int y = pts[i].pt.y+0.5;
|
||||||
|
// map_out[x+y*wG[0]]=1;
|
||||||
|
// numHave++;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// printf("FAST selection: got %f / %f!\n", numHave, numWant);
|
||||||
|
// quotia = numWant / numHave;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// the number of selected pixels behaves approximately as
|
||||||
|
// K / (pot+1)^2, where K is a scene-dependent constant.
|
||||||
|
// we will allow sub-selecting pixels by up to a quotia of 0.25, otherwise we will re-select.
|
||||||
|
|
||||||
|
if(fh != gradHistFrame) makeHists(fh);
|
||||||
|
|
||||||
|
// select!
|
||||||
|
Eigen::Vector3i n = this->select(fh, map_out,currentPotential, thFactor);
|
||||||
|
|
||||||
|
// sub-select!
|
||||||
|
numHave = n[0]+n[1]+n[2];
|
||||||
|
quotia = numWant / numHave;
|
||||||
|
|
||||||
|
// by default we want to over-sample by 40% just to be sure.
|
||||||
|
float K = numHave * (currentPotential+1) * (currentPotential+1);
|
||||||
|
idealPotential = sqrtf(K/numWant)-1; // round down.
|
||||||
|
if(idealPotential<1) idealPotential=1;
|
||||||
|
|
||||||
|
if( recursionsLeft>0 && quotia > 1.25 && currentPotential>1)
|
||||||
|
{
|
||||||
|
//re-sample to get more points!
|
||||||
|
// potential needs to be smaller
|
||||||
|
if(idealPotential>=currentPotential)
|
||||||
|
idealPotential = currentPotential-1;
|
||||||
|
|
||||||
|
// printf("PixelSelector: have %.2f%%, need %.2f%%. RESAMPLE with pot %d -> %d.\n",
|
||||||
|
// 100*numHave/(float)(wG[0]*hG[0]),
|
||||||
|
// 100*numWant/(float)(wG[0]*hG[0]),
|
||||||
|
// currentPotential,
|
||||||
|
// idealPotential);
|
||||||
|
currentPotential = idealPotential;
|
||||||
|
return makeMaps(fh,map_out, density, recursionsLeft-1, plot,thFactor);
|
||||||
|
}
|
||||||
|
else if(recursionsLeft>0 && quotia < 0.25)
|
||||||
|
{
|
||||||
|
// re-sample to get less points!
|
||||||
|
|
||||||
|
if(idealPotential<=currentPotential)
|
||||||
|
idealPotential = currentPotential+1;
|
||||||
|
|
||||||
|
// printf("PixelSelector: have %.2f%%, need %.2f%%. RESAMPLE with pot %d -> %d.\n",
|
||||||
|
// 100*numHave/(float)(wG[0]*hG[0]),
|
||||||
|
// 100*numWant/(float)(wG[0]*hG[0]),
|
||||||
|
// currentPotential,
|
||||||
|
// idealPotential);
|
||||||
|
currentPotential = idealPotential;
|
||||||
|
return makeMaps(fh,map_out, density, recursionsLeft-1, plot,thFactor);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int numHaveSub = numHave;
|
||||||
|
if(quotia < 0.95)
|
||||||
|
{
|
||||||
|
int wh=wG[0]*hG[0];
|
||||||
|
int rn=0;
|
||||||
|
unsigned char charTH = 255*quotia;
|
||||||
|
for(int i=0;i<wh;i++)
|
||||||
|
{
|
||||||
|
if(map_out[i] != 0)
|
||||||
|
{
|
||||||
|
if(randomPattern[rn] > charTH )
|
||||||
|
{
|
||||||
|
map_out[i]=0;
|
||||||
|
numHaveSub--;
|
||||||
|
}
|
||||||
|
rn++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// printf("PixelSelector: have %.2f%%, need %.2f%%. KEEPCURR with pot %d -> %d. Subsampled to %.2f%%\n",
|
||||||
|
// 100*numHave/(float)(wG[0]*hG[0]),
|
||||||
|
// 100*numWant/(float)(wG[0]*hG[0]),
|
||||||
|
// currentPotential,
|
||||||
|
// idealPotential,
|
||||||
|
// 100*numHaveSub/(float)(wG[0]*hG[0]));
|
||||||
|
currentPotential = idealPotential;
|
||||||
|
|
||||||
|
|
||||||
|
if(plot)
|
||||||
|
{
|
||||||
|
int w = wG[0];
|
||||||
|
int h = hG[0];
|
||||||
|
|
||||||
|
|
||||||
|
MinimalImageB3 img(w,h);
|
||||||
|
|
||||||
|
for(int i=0;i<w*h;i++)
|
||||||
|
{
|
||||||
|
float c = fh->dI[i][0]*0.7;
|
||||||
|
if(c>255) c=255;
|
||||||
|
img.at(i) = Vec3b(c,c,c);
|
||||||
|
}
|
||||||
|
IOWrap::displayImage("Selector Image", &img);
|
||||||
|
|
||||||
|
for(int y=0; y<h;y++)
|
||||||
|
for(int x=0;x<w;x++)
|
||||||
|
{
|
||||||
|
int i=x+y*w;
|
||||||
|
if(map_out[i] == 1)
|
||||||
|
img.setPixelCirc(x,y,Vec3b(0,255,0));
|
||||||
|
else if(map_out[i] == 2)
|
||||||
|
img.setPixelCirc(x,y,Vec3b(255,0,0));
|
||||||
|
else if(map_out[i] == 4)
|
||||||
|
img.setPixelCirc(x,y,Vec3b(0,0,255));
|
||||||
|
}
|
||||||
|
IOWrap::displayImage("Selector Pixels", &img);
|
||||||
|
}
|
||||||
|
|
||||||
|
return numHaveSub;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Eigen::Vector3i PixelSelector::select(const FrameHessian* const fh,
|
||||||
|
float* map_out, int pot, float thFactor)
|
||||||
|
{
|
||||||
|
|
||||||
|
Eigen::Vector3f const * const map0 = fh->dI;
|
||||||
|
|
||||||
|
float * mapmax0 = fh->absSquaredGrad[0];
|
||||||
|
float * mapmax1 = fh->absSquaredGrad[1];
|
||||||
|
float * mapmax2 = fh->absSquaredGrad[2];
|
||||||
|
|
||||||
|
|
||||||
|
int w = wG[0];
|
||||||
|
int w1 = wG[1];
|
||||||
|
int w2 = wG[2];
|
||||||
|
int h = hG[0];
|
||||||
|
|
||||||
|
|
||||||
|
const Vec2f directions[16] = {
|
||||||
|
Vec2f(0, 1.0000),
|
||||||
|
Vec2f(0.3827, 0.9239),
|
||||||
|
Vec2f(0.1951, 0.9808),
|
||||||
|
Vec2f(0.9239, 0.3827),
|
||||||
|
Vec2f(0.7071, 0.7071),
|
||||||
|
Vec2f(0.3827, -0.9239),
|
||||||
|
Vec2f(0.8315, 0.5556),
|
||||||
|
Vec2f(0.8315, -0.5556),
|
||||||
|
Vec2f(0.5556, -0.8315),
|
||||||
|
Vec2f(0.9808, 0.1951),
|
||||||
|
Vec2f(0.9239, -0.3827),
|
||||||
|
Vec2f(0.7071, -0.7071),
|
||||||
|
Vec2f(0.5556, 0.8315),
|
||||||
|
Vec2f(0.9808, -0.1951),
|
||||||
|
Vec2f(1.0000, 0.0000),
|
||||||
|
Vec2f(0.1951, -0.9808)};
|
||||||
|
|
||||||
|
memset(map_out,0,w*h*sizeof(PixelSelectorStatus));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
float dw1 = setting_gradDownweightPerLevel;
|
||||||
|
float dw2 = dw1*dw1;
|
||||||
|
|
||||||
|
|
||||||
|
int n3=0, n2=0, n4=0;
|
||||||
|
for(int y4=0;y4<h;y4+=(4*pot)) for(int x4=0;x4<w;x4+=(4*pot))
|
||||||
|
{
|
||||||
|
int my3 = std::min((4*pot), h-y4);
|
||||||
|
int mx3 = std::min((4*pot), w-x4);
|
||||||
|
int bestIdx4=-1; float bestVal4=0;
|
||||||
|
Vec2f dir4 = directions[randomPattern[n2] & 0xF];
|
||||||
|
for(int y3=0;y3<my3;y3+=(2*pot)) for(int x3=0;x3<mx3;x3+=(2*pot))
|
||||||
|
{
|
||||||
|
int x34 = x3+x4;
|
||||||
|
int y34 = y3+y4;
|
||||||
|
int my2 = std::min((2*pot), h-y34);
|
||||||
|
int mx2 = std::min((2*pot), w-x34);
|
||||||
|
int bestIdx3=-1; float bestVal3=0;
|
||||||
|
Vec2f dir3 = directions[randomPattern[n2] & 0xF];
|
||||||
|
for(int y2=0;y2<my2;y2+=pot) for(int x2=0;x2<mx2;x2+=pot)
|
||||||
|
{
|
||||||
|
int x234 = x2+x34;
|
||||||
|
int y234 = y2+y34;
|
||||||
|
int my1 = std::min(pot, h-y234);
|
||||||
|
int mx1 = std::min(pot, w-x234);
|
||||||
|
int bestIdx2=-1; float bestVal2=0;
|
||||||
|
Vec2f dir2 = directions[randomPattern[n2] & 0xF];
|
||||||
|
for(int y1=0;y1<my1;y1+=1) for(int x1=0;x1<mx1;x1+=1)
|
||||||
|
{
|
||||||
|
assert(x1+x234 < w);
|
||||||
|
assert(y1+y234 < h);
|
||||||
|
int idx = x1+x234 + w*(y1+y234);
|
||||||
|
int xf = x1+x234;
|
||||||
|
int yf = y1+y234;
|
||||||
|
|
||||||
|
if(xf<4 || xf>=w-5 || yf<4 || yf>h-4) continue;
|
||||||
|
|
||||||
|
|
||||||
|
float pixelTH0 = thsSmoothed[(xf>>5) + (yf>>5) * thsStep];
|
||||||
|
float pixelTH1 = pixelTH0*dw1;
|
||||||
|
float pixelTH2 = pixelTH1*dw2;
|
||||||
|
|
||||||
|
|
||||||
|
float ag0 = mapmax0[idx];
|
||||||
|
if(ag0 > pixelTH0*thFactor)
|
||||||
|
{
|
||||||
|
Vec2f ag0d = map0[idx].tail<2>();
|
||||||
|
float dirNorm = fabsf((float)(ag0d.dot(dir2)));
|
||||||
|
if(!setting_selectDirectionDistribution) dirNorm = ag0;
|
||||||
|
|
||||||
|
if(dirNorm > bestVal2)
|
||||||
|
{ bestVal2 = dirNorm; bestIdx2 = idx; bestIdx3 = -2; bestIdx4 = -2;}
|
||||||
|
}
|
||||||
|
if(bestIdx3==-2) continue;
|
||||||
|
|
||||||
|
float ag1 = mapmax1[(int)(xf*0.5f+0.25f) + (int)(yf*0.5f+0.25f)*w1];
|
||||||
|
if(ag1 > pixelTH1*thFactor)
|
||||||
|
{
|
||||||
|
Vec2f ag0d = map0[idx].tail<2>();
|
||||||
|
float dirNorm = fabsf((float)(ag0d.dot(dir3)));
|
||||||
|
if(!setting_selectDirectionDistribution) dirNorm = ag1;
|
||||||
|
|
||||||
|
if(dirNorm > bestVal3)
|
||||||
|
{ bestVal3 = dirNorm; bestIdx3 = idx; bestIdx4 = -2;}
|
||||||
|
}
|
||||||
|
if(bestIdx4==-2) continue;
|
||||||
|
|
||||||
|
float ag2 = mapmax2[(int)(xf*0.25f+0.125) + (int)(yf*0.25f+0.125)*w2];
|
||||||
|
if(ag2 > pixelTH2*thFactor)
|
||||||
|
{
|
||||||
|
Vec2f ag0d = map0[idx].tail<2>();
|
||||||
|
float dirNorm = fabsf((float)(ag0d.dot(dir4)));
|
||||||
|
if(!setting_selectDirectionDistribution) dirNorm = ag2;
|
||||||
|
|
||||||
|
if(dirNorm > bestVal4)
|
||||||
|
{ bestVal4 = dirNorm; bestIdx4 = idx; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(bestIdx2>0)
|
||||||
|
{
|
||||||
|
map_out[bestIdx2] = 1;
|
||||||
|
bestVal3 = 1e10;
|
||||||
|
n2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(bestIdx3>0)
|
||||||
|
{
|
||||||
|
map_out[bestIdx3] = 2;
|
||||||
|
bestVal4 = 1e10;
|
||||||
|
n3++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(bestIdx4>0)
|
||||||
|
{
|
||||||
|
map_out[bestIdx4] = 4;
|
||||||
|
n4++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return Eigen::Vector3i(n2,n3,n4);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
72
src/FullSystem/PixelSelector2.h
Normal file
72
src/FullSystem/PixelSelector2.h
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
enum PixelSelectorStatus {PIXSEL_VOID=0, PIXSEL_1, PIXSEL_2, PIXSEL_3};
|
||||||
|
|
||||||
|
|
||||||
|
class FrameHessian;
|
||||||
|
|
||||||
|
class PixelSelector
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
int makeMaps(
|
||||||
|
const FrameHessian* const fh,
|
||||||
|
float* map_out, float density, int recursionsLeft=1, bool plot=false, float thFactor=1);
|
||||||
|
|
||||||
|
PixelSelector(int w, int h);
|
||||||
|
~PixelSelector();
|
||||||
|
int currentPotential;
|
||||||
|
|
||||||
|
|
||||||
|
bool allowFast;
|
||||||
|
void makeHists(const FrameHessian* const fh);
|
||||||
|
private:
|
||||||
|
|
||||||
|
Eigen::Vector3i select(const FrameHessian* const fh,
|
||||||
|
float* map_out, int pot, float thFactor=1);
|
||||||
|
|
||||||
|
|
||||||
|
unsigned char* randomPattern;
|
||||||
|
|
||||||
|
|
||||||
|
int* gradHist;
|
||||||
|
float* ths;
|
||||||
|
float* thsSmoothed;
|
||||||
|
int thsStep;
|
||||||
|
const FrameHessian* gradHistFrame;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
93
src/FullSystem/ResidualProjections.h
Normal file
93
src/FullSystem/ResidualProjections.h
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "FullSystem/FullSystem.h"
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
#include "util/settings.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
EIGEN_STRONG_INLINE float derive_idepth(
|
||||||
|
const Vec3f &t, const float &u, const float &v,
|
||||||
|
const int &dx, const int &dy, const float &dxInterp,
|
||||||
|
const float &dyInterp, const float &drescale)
|
||||||
|
{
|
||||||
|
return (dxInterp*drescale * (t[0]-t[2]*u)
|
||||||
|
+ dyInterp*drescale * (t[1]-t[2]*v))*SCALE_IDEPTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EIGEN_STRONG_INLINE bool projectPoint(
|
||||||
|
const float &u_pt,const float &v_pt,
|
||||||
|
const float &idepth,
|
||||||
|
const Mat33f &KRKi, const Vec3f &Kt,
|
||||||
|
float &Ku, float &Kv)
|
||||||
|
{
|
||||||
|
Vec3f ptp = KRKi * Vec3f(u_pt,v_pt, 1) + Kt*idepth;
|
||||||
|
Ku = ptp[0] / ptp[2];
|
||||||
|
Kv = ptp[1] / ptp[2];
|
||||||
|
return Ku>1.1f && Kv>1.1f && Ku<wM3G && Kv<hM3G;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EIGEN_STRONG_INLINE bool projectPoint(
|
||||||
|
const float &u_pt,const float &v_pt,
|
||||||
|
const float &idepth,
|
||||||
|
const int &dx, const int &dy,
|
||||||
|
CalibHessian* const &HCalib,
|
||||||
|
const Mat33f &R, const Vec3f &t,
|
||||||
|
float &drescale, float &u, float &v,
|
||||||
|
float &Ku, float &Kv, Vec3f &KliP, float &new_idepth)
|
||||||
|
{
|
||||||
|
KliP = Vec3f(
|
||||||
|
(u_pt+dx-HCalib->cxl())*HCalib->fxli(),
|
||||||
|
(v_pt+dy-HCalib->cyl())*HCalib->fyli(),
|
||||||
|
1);
|
||||||
|
|
||||||
|
Vec3f ptp = R * KliP + t*idepth;
|
||||||
|
drescale = 1.0f/ptp[2];
|
||||||
|
new_idepth = idepth*drescale;
|
||||||
|
|
||||||
|
if(!(drescale>0)) return false;
|
||||||
|
|
||||||
|
u = ptp[0] * drescale;
|
||||||
|
v = ptp[1] * drescale;
|
||||||
|
Ku = u*HCalib->fxl() + HCalib->cxl();
|
||||||
|
Kv = v*HCalib->fyl() + HCalib->cyl();
|
||||||
|
|
||||||
|
return Ku>1.1f && Kv>1.1f && Ku<wM3G && Kv<hM3G;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
329
src/FullSystem/Residuals.cpp
Normal file
329
src/FullSystem/Residuals.cpp
Normal file
@@ -0,0 +1,329 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* KFBuffer.cpp
|
||||||
|
*
|
||||||
|
* Created on: Jan 7, 2014
|
||||||
|
* Author: engelj
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "FullSystem/FullSystem.h"
|
||||||
|
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "util/globalFuncs.h"
|
||||||
|
#include <Eigen/LU>
|
||||||
|
#include <algorithm>
|
||||||
|
#include "IOWrapper/ImageDisplay.h"
|
||||||
|
#include "util/globalCalib.h"
|
||||||
|
#include <Eigen/SVD>
|
||||||
|
#include <Eigen/Eigenvalues>
|
||||||
|
|
||||||
|
#include "FullSystem/ResidualProjections.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctional.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctionalStructs.h"
|
||||||
|
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
int PointFrameResidual::instanceCounter = 0;
|
||||||
|
|
||||||
|
|
||||||
|
long runningResID=0;
|
||||||
|
|
||||||
|
|
||||||
|
PointFrameResidual::PointFrameResidual(){assert(false); instanceCounter++;}
|
||||||
|
|
||||||
|
PointFrameResidual::~PointFrameResidual(){assert(efResidual==0); instanceCounter--; delete J;}
|
||||||
|
|
||||||
|
PointFrameResidual::PointFrameResidual(PointHessian* point_, FrameHessian* host_, FrameHessian* target_) :
|
||||||
|
point(point_),
|
||||||
|
host(host_),
|
||||||
|
target(target_)
|
||||||
|
{
|
||||||
|
efResidual=0;
|
||||||
|
instanceCounter++;
|
||||||
|
resetOOB();
|
||||||
|
J = new RawResidualJacobian();
|
||||||
|
assert(((long)J)%16==0);
|
||||||
|
|
||||||
|
isNew=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
double PointFrameResidual::linearize(CalibHessian* HCalib)
|
||||||
|
{
|
||||||
|
state_NewEnergyWithOutlier=-1;
|
||||||
|
|
||||||
|
if(state_state == ResState::OOB)
|
||||||
|
{ state_NewState = ResState::OOB; return state_energy; }
|
||||||
|
|
||||||
|
FrameFramePrecalc* precalc = &(host->targetPrecalc[target->idx]);
|
||||||
|
float energyLeft=0;
|
||||||
|
const Eigen::Vector3f* dIl = target->dI;
|
||||||
|
//const float* const Il = target->I;
|
||||||
|
const Mat33f &PRE_KRKiTll = precalc->PRE_KRKiTll;
|
||||||
|
const Vec3f &PRE_KtTll = precalc->PRE_KtTll;
|
||||||
|
const Mat33f &PRE_RTll_0 = precalc->PRE_RTll_0;
|
||||||
|
const Vec3f &PRE_tTll_0 = precalc->PRE_tTll_0;
|
||||||
|
const float * const color = point->color;
|
||||||
|
const float * const weights = point->weights;
|
||||||
|
|
||||||
|
Vec2f affLL = precalc->PRE_aff_mode;
|
||||||
|
float b0 = precalc->PRE_b0_mode;
|
||||||
|
|
||||||
|
|
||||||
|
Vec6f d_xi_x, d_xi_y;
|
||||||
|
Vec4f d_C_x, d_C_y;
|
||||||
|
float d_d_x, d_d_y;
|
||||||
|
{
|
||||||
|
float drescale, u, v, new_idepth;
|
||||||
|
float Ku, Kv;
|
||||||
|
Vec3f KliP;
|
||||||
|
|
||||||
|
if(!projectPoint(point->u, point->v, point->idepth_zero_scaled, 0, 0,HCalib,
|
||||||
|
PRE_RTll_0,PRE_tTll_0, drescale, u, v, Ku, Kv, KliP, new_idepth))
|
||||||
|
{ state_NewState = ResState::OOB; return state_energy; }
|
||||||
|
|
||||||
|
centerProjectedTo = Vec3f(Ku, Kv, new_idepth);
|
||||||
|
|
||||||
|
|
||||||
|
// diff d_idepth
|
||||||
|
d_d_x = drescale * (PRE_tTll_0[0]-PRE_tTll_0[2]*u)*SCALE_IDEPTH*HCalib->fxl();
|
||||||
|
d_d_y = drescale * (PRE_tTll_0[1]-PRE_tTll_0[2]*v)*SCALE_IDEPTH*HCalib->fyl();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// diff calib
|
||||||
|
d_C_x[2] = drescale*(PRE_RTll_0(2,0)*u-PRE_RTll_0(0,0));
|
||||||
|
d_C_x[3] = HCalib->fxl() * drescale*(PRE_RTll_0(2,1)*u-PRE_RTll_0(0,1)) * HCalib->fyli();
|
||||||
|
d_C_x[0] = KliP[0]*d_C_x[2];
|
||||||
|
d_C_x[1] = KliP[1]*d_C_x[3];
|
||||||
|
|
||||||
|
d_C_y[2] = HCalib->fyl() * drescale*(PRE_RTll_0(2,0)*v-PRE_RTll_0(1,0)) * HCalib->fxli();
|
||||||
|
d_C_y[3] = drescale*(PRE_RTll_0(2,1)*v-PRE_RTll_0(1,1));
|
||||||
|
d_C_y[0] = KliP[0]*d_C_y[2];
|
||||||
|
d_C_y[1] = KliP[1]*d_C_y[3];
|
||||||
|
|
||||||
|
d_C_x[0] = (d_C_x[0]+u)*SCALE_F;
|
||||||
|
d_C_x[1] *= SCALE_F;
|
||||||
|
d_C_x[2] = (d_C_x[2]+1)*SCALE_C;
|
||||||
|
d_C_x[3] *= SCALE_C;
|
||||||
|
|
||||||
|
d_C_y[0] *= SCALE_F;
|
||||||
|
d_C_y[1] = (d_C_y[1]+v)*SCALE_F;
|
||||||
|
d_C_y[2] *= SCALE_C;
|
||||||
|
d_C_y[3] = (d_C_y[3]+1)*SCALE_C;
|
||||||
|
|
||||||
|
|
||||||
|
d_xi_x[0] = new_idepth*HCalib->fxl();
|
||||||
|
d_xi_x[1] = 0;
|
||||||
|
d_xi_x[2] = -new_idepth*u*HCalib->fxl();
|
||||||
|
d_xi_x[3] = -u*v*HCalib->fxl();
|
||||||
|
d_xi_x[4] = (1+u*u)*HCalib->fxl();
|
||||||
|
d_xi_x[5] = -v*HCalib->fxl();
|
||||||
|
|
||||||
|
d_xi_y[0] = 0;
|
||||||
|
d_xi_y[1] = new_idepth*HCalib->fyl();
|
||||||
|
d_xi_y[2] = -new_idepth*v*HCalib->fyl();
|
||||||
|
d_xi_y[3] = -(1+v*v)*HCalib->fyl();
|
||||||
|
d_xi_y[4] = u*v*HCalib->fyl();
|
||||||
|
d_xi_y[5] = u*HCalib->fyl();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
J->Jpdxi[0] = d_xi_x;
|
||||||
|
J->Jpdxi[1] = d_xi_y;
|
||||||
|
|
||||||
|
J->Jpdc[0] = d_C_x;
|
||||||
|
J->Jpdc[1] = d_C_y;
|
||||||
|
|
||||||
|
J->Jpdd[0] = d_d_x;
|
||||||
|
J->Jpdd[1] = d_d_y;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
float JIdxJIdx_00=0, JIdxJIdx_11=0, JIdxJIdx_10=0;
|
||||||
|
float JabJIdx_00=0, JabJIdx_01=0, JabJIdx_10=0, JabJIdx_11=0;
|
||||||
|
float JabJab_00=0, JabJab_01=0, JabJab_11=0;
|
||||||
|
|
||||||
|
float wJI2_sum = 0;
|
||||||
|
|
||||||
|
for(int idx=0;idx<patternNum;idx++)
|
||||||
|
{
|
||||||
|
float Ku, Kv;
|
||||||
|
if(!projectPoint(point->u+patternP[idx][0], point->v+patternP[idx][1], point->idepth_scaled, PRE_KRKiTll, PRE_KtTll, Ku, Kv))
|
||||||
|
{ state_NewState = ResState::OOB; return state_energy; }
|
||||||
|
|
||||||
|
projectedTo[idx][0] = Ku;
|
||||||
|
projectedTo[idx][1] = Kv;
|
||||||
|
|
||||||
|
|
||||||
|
Vec3f hitColor = (getInterpolatedElement33(dIl, Ku, Kv, wG[0]));
|
||||||
|
float residual = hitColor[0] - (float)(affLL[0] * color[idx] + affLL[1]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
float drdA = (color[idx]-b0);
|
||||||
|
if(!std::isfinite((float)hitColor[0]))
|
||||||
|
{ state_NewState = ResState::OOB; return state_energy; }
|
||||||
|
|
||||||
|
|
||||||
|
float w = sqrtf(setting_outlierTHSumComponent / (setting_outlierTHSumComponent + hitColor.tail<2>().squaredNorm()));
|
||||||
|
w = 0.5f*(w + weights[idx]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
float hw = fabsf(residual) < setting_huberTH ? 1 : setting_huberTH / fabsf(residual);
|
||||||
|
energyLeft += w*w*hw *residual*residual*(2-hw);
|
||||||
|
|
||||||
|
{
|
||||||
|
if(hw < 1) hw = sqrtf(hw);
|
||||||
|
hw = hw*w;
|
||||||
|
|
||||||
|
hitColor[1]*=hw;
|
||||||
|
hitColor[2]*=hw;
|
||||||
|
|
||||||
|
J->resF[idx] = residual*hw;
|
||||||
|
|
||||||
|
J->JIdx[0][idx] = hitColor[1];
|
||||||
|
J->JIdx[1][idx] = hitColor[2];
|
||||||
|
J->JabF[0][idx] = drdA*hw;
|
||||||
|
J->JabF[1][idx] = hw;
|
||||||
|
|
||||||
|
JIdxJIdx_00+=hitColor[1]*hitColor[1];
|
||||||
|
JIdxJIdx_11+=hitColor[2]*hitColor[2];
|
||||||
|
JIdxJIdx_10+=hitColor[1]*hitColor[2];
|
||||||
|
|
||||||
|
JabJIdx_00+= drdA*hw * hitColor[1];
|
||||||
|
JabJIdx_01+= drdA*hw * hitColor[2];
|
||||||
|
JabJIdx_10+= hw * hitColor[1];
|
||||||
|
JabJIdx_11+= hw * hitColor[2];
|
||||||
|
|
||||||
|
JabJab_00+= drdA*drdA*hw*hw;
|
||||||
|
JabJab_01+= drdA*hw*hw;
|
||||||
|
JabJab_11+= hw*hw;
|
||||||
|
|
||||||
|
|
||||||
|
wJI2_sum += hw*hw*(hitColor[1]*hitColor[1]+hitColor[2]*hitColor[2]);
|
||||||
|
|
||||||
|
if(setting_affineOptModeA < 0) J->JabF[0][idx]=0;
|
||||||
|
if(setting_affineOptModeB < 0) J->JabF[1][idx]=0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
J->JIdx2(0,0) = JIdxJIdx_00;
|
||||||
|
J->JIdx2(0,1) = JIdxJIdx_10;
|
||||||
|
J->JIdx2(1,0) = JIdxJIdx_10;
|
||||||
|
J->JIdx2(1,1) = JIdxJIdx_11;
|
||||||
|
J->JabJIdx(0,0) = JabJIdx_00;
|
||||||
|
J->JabJIdx(0,1) = JabJIdx_01;
|
||||||
|
J->JabJIdx(1,0) = JabJIdx_10;
|
||||||
|
J->JabJIdx(1,1) = JabJIdx_11;
|
||||||
|
J->Jab2(0,0) = JabJab_00;
|
||||||
|
J->Jab2(0,1) = JabJab_01;
|
||||||
|
J->Jab2(1,0) = JabJab_01;
|
||||||
|
J->Jab2(1,1) = JabJab_11;
|
||||||
|
|
||||||
|
state_NewEnergyWithOutlier = energyLeft;
|
||||||
|
|
||||||
|
if(energyLeft > std::max<float>(host->frameEnergyTH, target->frameEnergyTH) || wJI2_sum < 2)
|
||||||
|
{
|
||||||
|
energyLeft = std::max<float>(host->frameEnergyTH, target->frameEnergyTH);
|
||||||
|
state_NewState = ResState::OUTLIER;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
state_NewState = ResState::IN;
|
||||||
|
}
|
||||||
|
|
||||||
|
state_NewEnergy = energyLeft;
|
||||||
|
return energyLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void PointFrameResidual::debugPlot()
|
||||||
|
{
|
||||||
|
if(state_state==ResState::OOB) return;
|
||||||
|
Vec3b cT = Vec3b(0,0,0);
|
||||||
|
|
||||||
|
if(freeDebugParam5==0)
|
||||||
|
{
|
||||||
|
float rT = 20*sqrt(state_energy/9);
|
||||||
|
if(rT<0) rT=0; if(rT>255)rT=255;
|
||||||
|
cT = Vec3b(0,255-rT,rT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(state_state == ResState::IN) cT = Vec3b(255,0,0);
|
||||||
|
else if(state_state == ResState::OOB) cT = Vec3b(255,255,0);
|
||||||
|
else if(state_state == ResState::OUTLIER) cT = Vec3b(0,0,255);
|
||||||
|
else cT = Vec3b(255,255,255);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=0;i<patternNum;i++)
|
||||||
|
{
|
||||||
|
if((projectedTo[i][0] > 2 && projectedTo[i][1] > 2 && projectedTo[i][0] < wG[0]-3 && projectedTo[i][1] < hG[0]-3 ))
|
||||||
|
target->debugImage->setPixel1((float)projectedTo[i][0], (float)projectedTo[i][1],cT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void PointFrameResidual::applyRes(bool copyJacobians)
|
||||||
|
{
|
||||||
|
if(copyJacobians)
|
||||||
|
{
|
||||||
|
if(state_state == ResState::OOB)
|
||||||
|
{
|
||||||
|
assert(!efResidual->isActiveAndIsGoodNEW);
|
||||||
|
return; // can never go back from OOB
|
||||||
|
}
|
||||||
|
if(state_NewState == ResState::IN)// && )
|
||||||
|
{
|
||||||
|
efResidual->isActiveAndIsGoodNEW=true;
|
||||||
|
efResidual->takeDataF();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
efResidual->isActiveAndIsGoodNEW=false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setState(state_NewState);
|
||||||
|
state_energy = state_NewEnergy;
|
||||||
|
}
|
||||||
|
}
|
||||||
106
src/FullSystem/Residuals.h
Normal file
106
src/FullSystem/Residuals.h
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/globalCalib.h"
|
||||||
|
#include "vector"
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include "util/globalFuncs.h"
|
||||||
|
#include "OptimizationBackend/RawResidualJacobian.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
class PointHessian;
|
||||||
|
class FrameHessian;
|
||||||
|
class CalibHessian;
|
||||||
|
|
||||||
|
class EFResidual;
|
||||||
|
|
||||||
|
|
||||||
|
enum ResLocation {ACTIVE=0, LINEARIZED, MARGINALIZED, NONE};
|
||||||
|
enum ResState {IN=0, OOB, OUTLIER};
|
||||||
|
|
||||||
|
struct FullJacRowT
|
||||||
|
{
|
||||||
|
Eigen::Vector2f projectedTo[MAX_RES_PER_POINT];
|
||||||
|
};
|
||||||
|
|
||||||
|
class PointFrameResidual
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
|
||||||
|
|
||||||
|
EFResidual* efResidual;
|
||||||
|
|
||||||
|
static int instanceCounter;
|
||||||
|
|
||||||
|
|
||||||
|
ResState state_state;
|
||||||
|
double state_energy;
|
||||||
|
ResState state_NewState;
|
||||||
|
double state_NewEnergy;
|
||||||
|
double state_NewEnergyWithOutlier;
|
||||||
|
|
||||||
|
|
||||||
|
void setState(ResState s) {state_state = s;}
|
||||||
|
|
||||||
|
|
||||||
|
PointHessian* point;
|
||||||
|
FrameHessian* host;
|
||||||
|
FrameHessian* target;
|
||||||
|
RawResidualJacobian* J;
|
||||||
|
|
||||||
|
|
||||||
|
bool isNew;
|
||||||
|
|
||||||
|
|
||||||
|
Eigen::Vector2f projectedTo[MAX_RES_PER_POINT];
|
||||||
|
Vec3f centerProjectedTo;
|
||||||
|
|
||||||
|
~PointFrameResidual();
|
||||||
|
PointFrameResidual();
|
||||||
|
PointFrameResidual(PointHessian* point_, FrameHessian* host_, FrameHessian* target_);
|
||||||
|
double linearize(CalibHessian* HCalib);
|
||||||
|
|
||||||
|
|
||||||
|
void resetOOB()
|
||||||
|
{
|
||||||
|
state_NewEnergy = state_energy = 0;
|
||||||
|
state_NewState = ResState::OUTLIER;
|
||||||
|
|
||||||
|
setState(ResState::IN);
|
||||||
|
};
|
||||||
|
void applyRes( bool copyJacobians);
|
||||||
|
|
||||||
|
void debugPlot();
|
||||||
|
|
||||||
|
void printRows(std::vector<VecX> &v, VecX &r, int nFrames, int nPoints, int M, int res);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
55
src/IOWrapper/ImageDisplay.h
Normal file
55
src/IOWrapper/ImageDisplay.h
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <vector>
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "util/MinimalImage.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
|
||||||
|
void displayImage(const char* windowName, const MinimalImageB* img, bool autoSize = false);
|
||||||
|
void displayImage(const char* windowName, const MinimalImageB3* img, bool autoSize = false);
|
||||||
|
void displayImage(const char* windowName, const MinimalImageF* img, bool autoSize = false);
|
||||||
|
void displayImage(const char* windowName, const MinimalImageF3* img, bool autoSize = false);
|
||||||
|
void displayImage(const char* windowName, const MinimalImageB16* img, bool autoSize = false);
|
||||||
|
|
||||||
|
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageB*> images, int cc=0, int rc=0);
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageB3*> images, int cc=0, int rc=0);
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageF*> images, int cc=0, int rc=0);
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageF3*> images, int cc=0, int rc=0);
|
||||||
|
|
||||||
|
int waitKey(int milliseconds);
|
||||||
|
void closeAllWindows();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
50
src/IOWrapper/ImageDisplay_dummy.cpp
Normal file
50
src/IOWrapper/ImageDisplay_dummy.cpp
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "IOWrapper/ImageDisplay.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
void displayImage(const char* windowName, const MinimalImageB* img, bool autoSize) {};
|
||||||
|
void displayImage(const char* windowName, const MinimalImageB3* img, bool autoSize) {};
|
||||||
|
void displayImage(const char* windowName, const MinimalImageF* img, bool autoSize) {};
|
||||||
|
void displayImage(const char* windowName, const MinimalImageF3* img, bool autoSize) {};
|
||||||
|
void displayImage(const char* windowName, const MinimalImageB16* img, bool autoSize) {};
|
||||||
|
|
||||||
|
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageB*> images, int cc, int rc) {};
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageB3*> images, int cc, int rc) {};
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageF*> images, int cc, int rc) {};
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageF3*> images, int cc, int rc) {};
|
||||||
|
|
||||||
|
int waitKey(int milliseconds) {return 0;};
|
||||||
|
void closeAllWindows() {};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
48
src/IOWrapper/ImageRW.h
Normal file
48
src/IOWrapper/ImageRW.h
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "util/MinimalImage.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
|
||||||
|
MinimalImageB* readImageBW_8U(std::string filename);
|
||||||
|
MinimalImageB3* readImageRGB_8U(std::string filename);
|
||||||
|
MinimalImage<unsigned short>* readImageBW_16U(std::string filename);
|
||||||
|
|
||||||
|
|
||||||
|
MinimalImageB* readStreamBW_8U(char* data, int numBytes);
|
||||||
|
|
||||||
|
void writeImage(std::string filename, MinimalImageB* img);
|
||||||
|
void writeImage(std::string filename, MinimalImageB3* img);
|
||||||
|
void writeImage(std::string filename, MinimalImageF* img);
|
||||||
|
void writeImage(std::string filename, MinimalImageF3* img);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
46
src/IOWrapper/ImageRW_dummy.cpp
Normal file
46
src/IOWrapper/ImageRW_dummy.cpp
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "IOWrapper/ImageRW.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
|
||||||
|
MinimalImageB* readImageBW_8U(std::string filename) {printf("not implemented. bye!\n"); return 0;};
|
||||||
|
MinimalImageB3* readImageRGB_8U(std::string filename) {printf("not implemented. bye!\n"); return 0;};
|
||||||
|
MinimalImage<unsigned short>* readImageBW_16U(std::string filename) {printf("not implemented. bye!\n"); return 0;};
|
||||||
|
MinimalImageB* readStreamBW_8U(char* data, int numBytes) {printf("not implemented. bye!\n"); return 0;};
|
||||||
|
void writeImage(std::string filename, MinimalImageB* img) {};
|
||||||
|
void writeImage(std::string filename, MinimalImageB3* img) {};
|
||||||
|
void writeImage(std::string filename, MinimalImageF* img) {};
|
||||||
|
void writeImage(std::string filename, MinimalImageF3* img) {};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
197
src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp
Normal file
197
src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "IOWrapper/ImageDisplay.h"
|
||||||
|
|
||||||
|
#include <opencv2/highgui/highgui.hpp>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <unordered_set>
|
||||||
|
|
||||||
|
#include <boost/thread.hpp>
|
||||||
|
|
||||||
|
#include "util/settings.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
|
||||||
|
std::unordered_set<std::string> openWindows;
|
||||||
|
boost::mutex openCVdisplayMutex;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void displayImage(const char* windowName, const cv::Mat& image, bool autoSize)
|
||||||
|
{
|
||||||
|
if(disableAllDisplay) return;
|
||||||
|
|
||||||
|
boost::unique_lock<boost::mutex> lock(openCVdisplayMutex);
|
||||||
|
if(!autoSize)
|
||||||
|
{
|
||||||
|
if(openWindows.find(windowName) == openWindows.end())
|
||||||
|
{
|
||||||
|
cv::namedWindow(windowName, cv::WINDOW_NORMAL);
|
||||||
|
cv::resizeWindow(windowName, image.cols, image.rows);
|
||||||
|
openWindows.insert(windowName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cv::imshow(windowName, image);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<cv::Mat*> images, int cc, int rc)
|
||||||
|
{
|
||||||
|
if(disableAllDisplay) return;
|
||||||
|
if(images.size() == 0) return;
|
||||||
|
|
||||||
|
// get dimensions.
|
||||||
|
int w = images[0]->cols;
|
||||||
|
int h = images[0]->rows;
|
||||||
|
|
||||||
|
int num = std::max((int)setting_maxFrames, (int)images.size());
|
||||||
|
|
||||||
|
// get optimal dimensions.
|
||||||
|
int bestCC = 0;
|
||||||
|
float bestLoss = 1e10;
|
||||||
|
for(int cc=1;cc<10;cc++)
|
||||||
|
{
|
||||||
|
int ww = w * cc;
|
||||||
|
int hh = h * ((num+cc-1)/cc);
|
||||||
|
|
||||||
|
|
||||||
|
float wLoss = ww/16.0f;
|
||||||
|
float hLoss = hh/10.0f;
|
||||||
|
float loss = std::max(wLoss, hLoss);
|
||||||
|
|
||||||
|
if(loss < bestLoss)
|
||||||
|
{
|
||||||
|
bestLoss = loss;
|
||||||
|
bestCC = cc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int bestRC = ((num+bestCC-1)/bestCC);
|
||||||
|
if(cc != 0)
|
||||||
|
{
|
||||||
|
bestCC = cc;
|
||||||
|
bestRC= rc;
|
||||||
|
}
|
||||||
|
cv::Mat stitch = cv::Mat(bestRC*h, bestCC*w, images[0]->type());
|
||||||
|
stitch.setTo(0);
|
||||||
|
for(int i=0;i<(int)images.size() && i < bestCC*bestRC;i++)
|
||||||
|
{
|
||||||
|
int c = i%bestCC;
|
||||||
|
int r = i/bestCC;
|
||||||
|
|
||||||
|
cv::Mat roi = stitch(cv::Rect(c*w, r*h, w,h));
|
||||||
|
images[i]->copyTo(roi);
|
||||||
|
}
|
||||||
|
displayImage(windowName, stitch, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void displayImage(const char* windowName, const MinimalImageB* img, bool autoSize)
|
||||||
|
{
|
||||||
|
displayImage(windowName, cv::Mat(img->h, img->w, CV_8U, img->data), autoSize);
|
||||||
|
}
|
||||||
|
void displayImage(const char* windowName, const MinimalImageB3* img, bool autoSize)
|
||||||
|
{
|
||||||
|
displayImage(windowName, cv::Mat(img->h, img->w, CV_8UC3, img->data), autoSize);
|
||||||
|
}
|
||||||
|
void displayImage(const char* windowName, const MinimalImageF* img, bool autoSize)
|
||||||
|
{
|
||||||
|
displayImage(windowName, cv::Mat(img->h, img->w, CV_32F, img->data)*(1/254.0f), autoSize);
|
||||||
|
}
|
||||||
|
void displayImage(const char* windowName, const MinimalImageF3* img, bool autoSize)
|
||||||
|
{
|
||||||
|
displayImage(windowName, cv::Mat(img->h, img->w, CV_32FC3, img->data)*(1/254.0f), autoSize);
|
||||||
|
}
|
||||||
|
void displayImage(const char* windowName, const MinimalImageB16* img, bool autoSize)
|
||||||
|
{
|
||||||
|
displayImage(windowName, cv::Mat(img->h, img->w, CV_16U, img->data), autoSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageB*> images, int cc, int rc)
|
||||||
|
{
|
||||||
|
std::vector<cv::Mat*> imagesCV;
|
||||||
|
for(size_t i=0; i < images.size();i++)
|
||||||
|
imagesCV.push_back(new cv::Mat(images[i]->h, images[i]->w, CV_8U, images[i]->data));
|
||||||
|
displayImageStitch(windowName, imagesCV, cc, rc);
|
||||||
|
for(size_t i=0; i < images.size();i++)
|
||||||
|
delete imagesCV[i];
|
||||||
|
}
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageB3*> images, int cc, int rc)
|
||||||
|
{
|
||||||
|
std::vector<cv::Mat*> imagesCV;
|
||||||
|
for(size_t i=0; i < images.size();i++)
|
||||||
|
imagesCV.push_back(new cv::Mat(images[i]->h, images[i]->w, CV_8UC3, images[i]->data));
|
||||||
|
displayImageStitch(windowName, imagesCV, cc, rc);
|
||||||
|
for(size_t i=0; i < images.size();i++)
|
||||||
|
delete imagesCV[i];
|
||||||
|
}
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageF*> images, int cc, int rc)
|
||||||
|
{
|
||||||
|
std::vector<cv::Mat*> imagesCV;
|
||||||
|
for(size_t i=0; i < images.size();i++)
|
||||||
|
imagesCV.push_back(new cv::Mat(images[i]->h, images[i]->w, CV_32F, images[i]->data));
|
||||||
|
displayImageStitch(windowName, imagesCV, cc, rc);
|
||||||
|
for(size_t i=0; i < images.size();i++)
|
||||||
|
delete imagesCV[i];
|
||||||
|
}
|
||||||
|
void displayImageStitch(const char* windowName, const std::vector<MinimalImageF3*> images, int cc, int rc)
|
||||||
|
{
|
||||||
|
std::vector<cv::Mat*> imagesCV;
|
||||||
|
for(size_t i=0; i < images.size();i++)
|
||||||
|
imagesCV.push_back(new cv::Mat(images[i]->h, images[i]->w, CV_32FC3, images[i]->data));
|
||||||
|
displayImageStitch(windowName, imagesCV, cc, rc);
|
||||||
|
for(size_t i=0; i < images.size();i++)
|
||||||
|
delete imagesCV[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int waitKey(int milliseconds)
|
||||||
|
{
|
||||||
|
if(disableAllDisplay) return 0;
|
||||||
|
|
||||||
|
boost::unique_lock<boost::mutex> lock(openCVdisplayMutex);
|
||||||
|
return cv::waitKey(milliseconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
void closeAllWindows()
|
||||||
|
{
|
||||||
|
if(disableAllDisplay) return;
|
||||||
|
boost::unique_lock<boost::mutex> lock(openCVdisplayMutex);
|
||||||
|
cv::destroyAllWindows();
|
||||||
|
openWindows.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
128
src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp
Normal file
128
src/IOWrapper/OpenCV/ImageRW_OpenCV.cpp
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "IOWrapper/ImageRW.h"
|
||||||
|
#include <opencv2/highgui/highgui.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
MinimalImageB* readImageBW_8U(std::string filename)
|
||||||
|
{
|
||||||
|
cv::Mat m = cv::imread(filename, CV_LOAD_IMAGE_GRAYSCALE);
|
||||||
|
if(m.rows*m.cols==0)
|
||||||
|
{
|
||||||
|
printf("cv::imread could not read image %s! this may segfault. \n", filename.c_str());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(m.type() != CV_8U)
|
||||||
|
{
|
||||||
|
printf("cv::imread did something strange! this may segfault. \n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
MinimalImageB* img = new MinimalImageB(m.cols, m.rows);
|
||||||
|
memcpy(img->data, m.data, m.rows*m.cols);
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
MinimalImageB3* readImageRGB_8U(std::string filename)
|
||||||
|
{
|
||||||
|
cv::Mat m = cv::imread(filename, CV_LOAD_IMAGE_COLOR);
|
||||||
|
if(m.rows*m.cols==0)
|
||||||
|
{
|
||||||
|
printf("cv::imread could not read image %s! this may segfault. \n", filename.c_str());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(m.type() != CV_8UC3)
|
||||||
|
{
|
||||||
|
printf("cv::imread did something strange! this may segfault. \n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
MinimalImageB3* img = new MinimalImageB3(m.cols, m.rows);
|
||||||
|
memcpy(img->data, m.data, 3*m.rows*m.cols);
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
MinimalImage<unsigned short>* readImageBW_16U(std::string filename)
|
||||||
|
{
|
||||||
|
cv::Mat m = cv::imread(filename, CV_LOAD_IMAGE_UNCHANGED);
|
||||||
|
if(m.rows*m.cols==0)
|
||||||
|
{
|
||||||
|
printf("cv::imread could not read image %s! this may segfault. \n", filename.c_str());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(m.type() != CV_16U)
|
||||||
|
{
|
||||||
|
printf("readImageBW_16U called on image that is not a 16bit grayscale image. this may segfault. \n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
MinimalImage<unsigned short>* img = new MinimalImage<unsigned short>(m.cols, m.rows);
|
||||||
|
memcpy(img->data, m.data, 2*m.rows*m.cols);
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
MinimalImageB* readStreamBW_8U(char* data, int numBytes)
|
||||||
|
{
|
||||||
|
cv::Mat m = cv::imdecode(cv::Mat(numBytes,1,CV_8U, data), CV_LOAD_IMAGE_GRAYSCALE);
|
||||||
|
if(m.rows*m.cols==0)
|
||||||
|
{
|
||||||
|
printf("cv::imdecode could not read stream (%d bytes)! this may segfault. \n", numBytes);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(m.type() != CV_8U)
|
||||||
|
{
|
||||||
|
printf("cv::imdecode did something strange! this may segfault. \n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
MinimalImageB* img = new MinimalImageB(m.cols, m.rows);
|
||||||
|
memcpy(img->data, m.data, m.rows*m.cols);
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void writeImage(std::string filename, MinimalImageB* img)
|
||||||
|
{
|
||||||
|
cv::imwrite(filename, cv::Mat(img->h, img->w, CV_8U, img->data));
|
||||||
|
}
|
||||||
|
void writeImage(std::string filename, MinimalImageB3* img)
|
||||||
|
{
|
||||||
|
cv::imwrite(filename, cv::Mat(img->h, img->w, CV_8UC3, img->data));
|
||||||
|
}
|
||||||
|
void writeImage(std::string filename, MinimalImageF* img)
|
||||||
|
{
|
||||||
|
cv::imwrite(filename, cv::Mat(img->h, img->w, CV_32F, img->data));
|
||||||
|
}
|
||||||
|
void writeImage(std::string filename, MinimalImageF3* img)
|
||||||
|
{
|
||||||
|
cv::imwrite(filename, cv::Mat(img->h, img->w, CV_32FC3, img->data));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
209
src/IOWrapper/Output3DWrapper.h
Normal file
209
src/IOWrapper/Output3DWrapper.h
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "util/MinimalImage.h"
|
||||||
|
#include "map"
|
||||||
|
|
||||||
|
namespace cv {
|
||||||
|
class Mat;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
class FrameHessian;
|
||||||
|
class CalibHessian;
|
||||||
|
class FrameShell;
|
||||||
|
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
|
||||||
|
/* ======================= Some typical usecases: ===============
|
||||||
|
*
|
||||||
|
* (1) always get the pose of the most recent frame:
|
||||||
|
* -> Implement [publishCamPose].
|
||||||
|
*
|
||||||
|
* (2) always get the depthmap of the most recent keyframe
|
||||||
|
* -> Implement [pushDepthImageFloat] (use inverse depth in [image], and pose / frame information from [KF]).
|
||||||
|
*
|
||||||
|
* (3) accumulate final model
|
||||||
|
* -> Implement [publishKeyframes] (skip for final!=false), and accumulate frames.
|
||||||
|
*
|
||||||
|
* (4) get evolving model in real-time
|
||||||
|
* -> Implement [publishKeyframes] (update all frames for final==false).
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* ==================== How to use the structs: ===================
|
||||||
|
* [FrameShell]: minimal struct kept for each frame ever tracked.
|
||||||
|
* ->camToWorld = camera to world transformation
|
||||||
|
* ->poseValid = false if [camToWorld] is invalid (only happens for frames during initialization).
|
||||||
|
* ->trackingRef = Shell of the frame this frame was tracked on.
|
||||||
|
* ->id = ID of that frame, starting with 0 for the very first frame.
|
||||||
|
*
|
||||||
|
* ->incoming_id = ID passed into [addActiveFrame( ImageAndExposure* image, int id )].
|
||||||
|
* ->timestamp = timestamp passed into [addActiveFrame( ImageAndExposure* image, int id )] as image.timestamp.
|
||||||
|
*
|
||||||
|
* [FrameHessian]
|
||||||
|
* ->immaturePoints: contains points that have not been "activated" (they do however have a depth initialization).
|
||||||
|
* ->pointHessians: contains active points.
|
||||||
|
* ->pointHessiansMarginalized: contains marginalized points.
|
||||||
|
* ->pointHessiansOut: contains outlier points.
|
||||||
|
*
|
||||||
|
* ->frameID: incremental ID for keyframes only.
|
||||||
|
* ->shell: corresponding [FrameShell] struct.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* [CalibHessian]
|
||||||
|
* ->fxl(), fyl(), cxl(), cyl(): get optimized, most recent (pinhole) camera intrinsics.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* [PointHessian]
|
||||||
|
* ->u,v: pixel-coordinates of point.
|
||||||
|
* ->idepth_scaled: inverse depth of point.
|
||||||
|
* DO NOT USE [idepth], since it may be scaled with [SCALE_IDEPTH] ... however that is currently set to 1 so never mind.
|
||||||
|
* ->host: pointer to host-frame of point.
|
||||||
|
* ->status: current status of point (ACTIVE=0, INACTIVE, OUTLIER, OOB, MARGINALIZED)
|
||||||
|
* ->numGoodResiduals: number of non-outlier residuals supporting this point (approximate).
|
||||||
|
* ->maxRelBaseline: value roughly proportional to the relative baseline this point was observed with (0 = no baseline).
|
||||||
|
* points for which this value is low are badly contrained.
|
||||||
|
* ->idepth_hessian: hessian value (inverse variance) of inverse depth.
|
||||||
|
*
|
||||||
|
* [ImmaturePoint]
|
||||||
|
* ->u,v: pixel-coordinates of point.
|
||||||
|
* ->idepth_min, idepth_max: the initialization sais that the inverse depth of this point is very likely
|
||||||
|
* between these two thresholds (their mean being the best guess)
|
||||||
|
* ->host: pointer to host-frame of point.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Output3DWrapper
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Output3DWrapper() {}
|
||||||
|
virtual ~Output3DWrapper() {}
|
||||||
|
|
||||||
|
|
||||||
|
/* Usage:
|
||||||
|
* Called once after each new Keyframe is inserted & optimized.
|
||||||
|
* [connectivity] contains for each frame-frame pair the number of [0] active residuals in between them,
|
||||||
|
* and [1] the number of marginalized reisduals between them.
|
||||||
|
* frame-frame pairs are encoded as HASH_IDX = [(int)hostFrameKFID << 32 + (int)targetFrameKFID].
|
||||||
|
* the [***frameKFID] used for hashing correspond to the [FrameHessian]->frameID.
|
||||||
|
*
|
||||||
|
* Calling:
|
||||||
|
* Always called, no overhead if not used.
|
||||||
|
*/
|
||||||
|
virtual void publishGraph(const std::map<uint64_t,Eigen::Vector2i, std::less<uint64_t>, Eigen::aligned_allocator<std::pair<const uint64_t, Eigen::Vector2i> > > &connectivity) {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Usage:
|
||||||
|
* Called after each new Keyframe is inserted & optimized, with all keyframes that were part of the active window during
|
||||||
|
* that optimization in [frames] (with final=false). Use to access the new frame pose and points.
|
||||||
|
* Also called just before a frame is marginalized (with final=true) with only that frame in [frames]; at that point,
|
||||||
|
* no further updates will ever occur to it's optimized values (pose & idepth values of it's points).
|
||||||
|
*
|
||||||
|
* If you want always all most recent values for all frames, just use the [final=false] calls.
|
||||||
|
* If you only want to get the final model, but don't care about it being delay-free, only use the
|
||||||
|
* [final=true] calls, to save compute.
|
||||||
|
*
|
||||||
|
* Calling:
|
||||||
|
* Always called, negligible overhead if not used.
|
||||||
|
*/
|
||||||
|
virtual void publishKeyframes(std::vector<FrameHessian*> &frames, bool final, CalibHessian* HCalib) {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Usage:
|
||||||
|
* Called once for each tracked frame, with the real-time, low-delay frame pose.
|
||||||
|
*
|
||||||
|
* Calling:
|
||||||
|
* Always called, no overhead if not used.
|
||||||
|
*/
|
||||||
|
virtual void publishCamPose(FrameShell* frame, CalibHessian* HCalib) {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Usage:
|
||||||
|
* Called once for each new frame, before it is tracked (i.e., it doesn't have a pose yet).
|
||||||
|
*
|
||||||
|
* Calling:
|
||||||
|
* Always called, no overhead if not used.
|
||||||
|
*/
|
||||||
|
virtual void pushLiveFrame(FrameHessian* image) {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* called once after a new keyframe is created, with the color-coded, forward-warped inverse depthmap for that keyframe,
|
||||||
|
* which is used for initial alignment of future frames. Meant for visualization.
|
||||||
|
*
|
||||||
|
* Calling:
|
||||||
|
* Needs to prepare the depth image, so it is only called if [needPushDepthImage()] returned true.
|
||||||
|
*/
|
||||||
|
virtual void pushDepthImage(MinimalImageB3* image) {}
|
||||||
|
virtual bool needPushDepthImage() {return false;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Usage:
|
||||||
|
* called once after a new keyframe is created, with the forward-warped inverse depthmap for that keyframe.
|
||||||
|
* (<= 0 for pixels without inv. depth value, >0 for pixels with inv. depth value)
|
||||||
|
*
|
||||||
|
* Calling:
|
||||||
|
* Always called, almost no overhead if not used.
|
||||||
|
*/
|
||||||
|
virtual void pushDepthImageFloat(MinimalImageF* image, FrameHessian* KF ) {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* call on finish */
|
||||||
|
virtual void join() {}
|
||||||
|
|
||||||
|
/* call on reset */
|
||||||
|
virtual void reset() {}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
158
src/IOWrapper/OutputWrapper/SampleOutputWrapper.h
Normal file
158
src/IOWrapper/OutputWrapper/SampleOutputWrapper.h
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "boost/thread.hpp"
|
||||||
|
#include "util/MinimalImage.h"
|
||||||
|
#include "IOWrapper/Output3DWrapper.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
#include "util/FrameShell.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
class FrameHessian;
|
||||||
|
class CalibHessian;
|
||||||
|
class FrameShell;
|
||||||
|
|
||||||
|
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
|
||||||
|
class SampleOutputWrapper : public Output3DWrapper
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline SampleOutputWrapper()
|
||||||
|
{
|
||||||
|
printf("OUT: Created SampleOutputWrapper\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~SampleOutputWrapper()
|
||||||
|
{
|
||||||
|
printf("OUT: Destroyed SampleOutputWrapper\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void publishGraph(const std::map<uint64_t, Eigen::Vector2i, std::less<uint64_t>, Eigen::aligned_allocator<std::pair<const uint64_t, Eigen::Vector2i>>> &connectivity) override
|
||||||
|
{
|
||||||
|
printf("OUT: got graph with %d edges\n", (int)connectivity.size());
|
||||||
|
|
||||||
|
int maxWrite = 5;
|
||||||
|
|
||||||
|
for(const std::pair<uint64_t,Eigen::Vector2i> &p : connectivity)
|
||||||
|
{
|
||||||
|
int idHost = p.first>>32;
|
||||||
|
int idTarget = p.first & ((uint64_t)0xFFFFFFFF);
|
||||||
|
printf("OUT: Example Edge %d -> %d has %d active and %d marg residuals\n", idHost, idTarget, p.second[0], p.second[1]);
|
||||||
|
maxWrite--;
|
||||||
|
if(maxWrite==0) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
virtual void publishKeyframes( std::vector<FrameHessian*> &frames, bool final, CalibHessian* HCalib) override
|
||||||
|
{
|
||||||
|
for(FrameHessian* f : frames)
|
||||||
|
{
|
||||||
|
printf("OUT: KF %d (%s) (id %d, tme %f): %d active, %d marginalized, %d immature points. CameraToWorld:\n",
|
||||||
|
f->frameID,
|
||||||
|
final ? "final" : "non-final",
|
||||||
|
f->shell->incoming_id,
|
||||||
|
f->shell->timestamp,
|
||||||
|
(int)f->pointHessians.size(), (int)f->pointHessiansMarginalized.size(), (int)f->immaturePoints.size());
|
||||||
|
std::cout << f->shell->camToWorld.matrix3x4() << "\n";
|
||||||
|
|
||||||
|
|
||||||
|
int maxWrite = 5;
|
||||||
|
for(PointHessian* p : f->pointHessians)
|
||||||
|
{
|
||||||
|
printf("OUT: Example Point x=%.1f, y=%.1f, idepth=%f, idepth std.dev. %f, %d inlier-residuals\n",
|
||||||
|
p->u, p->v, p->idepth_scaled, sqrt(1.0f / p->idepth_hessian), p->numGoodResiduals );
|
||||||
|
maxWrite--;
|
||||||
|
if(maxWrite==0) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void publishCamPose(FrameShell* frame, CalibHessian* HCalib) override
|
||||||
|
{
|
||||||
|
printf("OUT: Current Frame %d (time %f, internal ID %d). CameraToWorld:\n",
|
||||||
|
frame->incoming_id,
|
||||||
|
frame->timestamp,
|
||||||
|
frame->id);
|
||||||
|
std::cout << frame->camToWorld.matrix3x4() << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
virtual void pushLiveFrame(FrameHessian* image) override
|
||||||
|
{
|
||||||
|
// can be used to get the raw image / intensity pyramid.
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void pushDepthImage(MinimalImageB3* image) override
|
||||||
|
{
|
||||||
|
// can be used to get the raw image with depth overlay.
|
||||||
|
}
|
||||||
|
virtual bool needPushDepthImage() override
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void pushDepthImageFloat(MinimalImageF* image, FrameHessian* KF ) override
|
||||||
|
{
|
||||||
|
printf("OUT: Predicted depth for KF %d (id %d, time %f, internal frame-ID %d). CameraToWorld:\n",
|
||||||
|
KF->frameID,
|
||||||
|
KF->shell->incoming_id,
|
||||||
|
KF->shell->timestamp,
|
||||||
|
KF->shell->id);
|
||||||
|
std::cout << KF->shell->camToWorld.matrix3x4() << "\n";
|
||||||
|
|
||||||
|
int maxWrite = 5;
|
||||||
|
for(int y=0;y<image->h;y++)
|
||||||
|
{
|
||||||
|
for(int x=0;x<image->w;x++)
|
||||||
|
{
|
||||||
|
if(image->at(x,y) <= 0) continue;
|
||||||
|
|
||||||
|
printf("OUT: Example Idepth at pixel (%d,%d): %f.\n", x,y,image->at(x,y));
|
||||||
|
maxWrite--;
|
||||||
|
if(maxWrite==0) break;
|
||||||
|
}
|
||||||
|
if(maxWrite==0) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
403
src/IOWrapper/Pangolin/KeyFrameDisplay.cpp
Normal file
403
src/IOWrapper/Pangolin/KeyFrameDisplay.cpp
Normal file
@@ -0,0 +1,403 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "util/settings.h"
|
||||||
|
|
||||||
|
//#include <GL/glx.h>
|
||||||
|
//#include <GL/gl.h>
|
||||||
|
//#include <GL/glu.h>
|
||||||
|
|
||||||
|
#include <pangolin/pangolin.h>
|
||||||
|
#include "KeyFrameDisplay.h"
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
#include "FullSystem/ImmaturePoint.h"
|
||||||
|
#include "util/FrameShell.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
KeyFrameDisplay::KeyFrameDisplay()
|
||||||
|
{
|
||||||
|
originalInputSparse = 0;
|
||||||
|
numSparseBufferSize=0;
|
||||||
|
numSparsePoints=0;
|
||||||
|
|
||||||
|
id = 0;
|
||||||
|
active= true;
|
||||||
|
camToWorld = SE3();
|
||||||
|
|
||||||
|
needRefresh=true;
|
||||||
|
|
||||||
|
my_scaledTH =1e10;
|
||||||
|
my_absTH = 1e10;
|
||||||
|
my_displayMode = 1;
|
||||||
|
my_minRelBS = 0;
|
||||||
|
my_sparsifyFactor = 1;
|
||||||
|
|
||||||
|
numGLBufferPoints=0;
|
||||||
|
bufferValid = false;
|
||||||
|
}
|
||||||
|
void KeyFrameDisplay::setFromF(FrameShell* frame, CalibHessian* HCalib)
|
||||||
|
{
|
||||||
|
id = frame->id;
|
||||||
|
fx = HCalib->fxl();
|
||||||
|
fy = HCalib->fyl();
|
||||||
|
cx = HCalib->cxl();
|
||||||
|
cy = HCalib->cyl();
|
||||||
|
width = wG[0];
|
||||||
|
height = hG[0];
|
||||||
|
fxi = 1/fx;
|
||||||
|
fyi = 1/fy;
|
||||||
|
cxi = -cx / fx;
|
||||||
|
cyi = -cy / fy;
|
||||||
|
camToWorld = frame->camToWorld;
|
||||||
|
needRefresh=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeyFrameDisplay::setFromKF(FrameHessian* fh, CalibHessian* HCalib)
|
||||||
|
{
|
||||||
|
setFromF(fh->shell, HCalib);
|
||||||
|
|
||||||
|
// add all traces, inlier and outlier points.
|
||||||
|
int npoints = fh->immaturePoints.size() +
|
||||||
|
fh->pointHessians.size() +
|
||||||
|
fh->pointHessiansMarginalized.size() +
|
||||||
|
fh->pointHessiansOut.size();
|
||||||
|
|
||||||
|
if(numSparseBufferSize < npoints)
|
||||||
|
{
|
||||||
|
if(originalInputSparse != 0) delete originalInputSparse;
|
||||||
|
numSparseBufferSize = npoints+100;
|
||||||
|
originalInputSparse = new InputPointSparse<MAX_RES_PER_POINT>[numSparseBufferSize];
|
||||||
|
}
|
||||||
|
|
||||||
|
InputPointSparse<MAX_RES_PER_POINT>* pc = originalInputSparse;
|
||||||
|
numSparsePoints=0;
|
||||||
|
for(ImmaturePoint* p : fh->immaturePoints)
|
||||||
|
{
|
||||||
|
for(int i=0;i<patternNum;i++)
|
||||||
|
pc[numSparsePoints].color[i] = p->color[i];
|
||||||
|
|
||||||
|
pc[numSparsePoints].u = p->u;
|
||||||
|
pc[numSparsePoints].v = p->v;
|
||||||
|
pc[numSparsePoints].idpeth = (p->idepth_max+p->idepth_min)*0.5f;
|
||||||
|
pc[numSparsePoints].idepth_hessian = 1000;
|
||||||
|
pc[numSparsePoints].relObsBaseline = 0;
|
||||||
|
pc[numSparsePoints].numGoodRes = 1;
|
||||||
|
pc[numSparsePoints].status = 0;
|
||||||
|
numSparsePoints++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(PointHessian* p : fh->pointHessians)
|
||||||
|
{
|
||||||
|
for(int i=0;i<patternNum;i++)
|
||||||
|
pc[numSparsePoints].color[i] = p->color[i];
|
||||||
|
pc[numSparsePoints].u = p->u;
|
||||||
|
pc[numSparsePoints].v = p->v;
|
||||||
|
pc[numSparsePoints].idpeth = p->idepth_scaled;
|
||||||
|
pc[numSparsePoints].relObsBaseline = p->maxRelBaseline;
|
||||||
|
pc[numSparsePoints].idepth_hessian = p->idepth_hessian;
|
||||||
|
pc[numSparsePoints].numGoodRes = 0;
|
||||||
|
pc[numSparsePoints].status=1;
|
||||||
|
|
||||||
|
numSparsePoints++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(PointHessian* p : fh->pointHessiansMarginalized)
|
||||||
|
{
|
||||||
|
for(int i=0;i<patternNum;i++)
|
||||||
|
pc[numSparsePoints].color[i] = p->color[i];
|
||||||
|
pc[numSparsePoints].u = p->u;
|
||||||
|
pc[numSparsePoints].v = p->v;
|
||||||
|
pc[numSparsePoints].idpeth = p->idepth_scaled;
|
||||||
|
pc[numSparsePoints].relObsBaseline = p->maxRelBaseline;
|
||||||
|
pc[numSparsePoints].idepth_hessian = p->idepth_hessian;
|
||||||
|
pc[numSparsePoints].numGoodRes = 0;
|
||||||
|
pc[numSparsePoints].status=2;
|
||||||
|
numSparsePoints++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(PointHessian* p : fh->pointHessiansOut)
|
||||||
|
{
|
||||||
|
for(int i=0;i<patternNum;i++)
|
||||||
|
pc[numSparsePoints].color[i] = p->color[i];
|
||||||
|
pc[numSparsePoints].u = p->u;
|
||||||
|
pc[numSparsePoints].v = p->v;
|
||||||
|
pc[numSparsePoints].idpeth = p->idepth_scaled;
|
||||||
|
pc[numSparsePoints].relObsBaseline = p->maxRelBaseline;
|
||||||
|
pc[numSparsePoints].idepth_hessian = p->idepth_hessian;
|
||||||
|
pc[numSparsePoints].numGoodRes = 0;
|
||||||
|
pc[numSparsePoints].status=3;
|
||||||
|
numSparsePoints++;
|
||||||
|
}
|
||||||
|
assert(numSparsePoints <= npoints);
|
||||||
|
|
||||||
|
camToWorld = fh->PRE_camToWorld;
|
||||||
|
needRefresh=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
KeyFrameDisplay::~KeyFrameDisplay()
|
||||||
|
{
|
||||||
|
if(originalInputSparse != 0)
|
||||||
|
delete[] originalInputSparse;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KeyFrameDisplay::refreshPC(bool canRefresh, float scaledTH, float absTH, int mode, float minBS, int sparsity)
|
||||||
|
{
|
||||||
|
if(canRefresh)
|
||||||
|
{
|
||||||
|
needRefresh = needRefresh ||
|
||||||
|
my_scaledTH != scaledTH ||
|
||||||
|
my_absTH != absTH ||
|
||||||
|
my_displayMode != mode ||
|
||||||
|
my_minRelBS != minBS ||
|
||||||
|
my_sparsifyFactor != sparsity;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!needRefresh) return false;
|
||||||
|
needRefresh=false;
|
||||||
|
|
||||||
|
my_scaledTH = scaledTH;
|
||||||
|
my_absTH = absTH;
|
||||||
|
my_displayMode = mode;
|
||||||
|
my_minRelBS = minBS;
|
||||||
|
my_sparsifyFactor = sparsity;
|
||||||
|
|
||||||
|
|
||||||
|
// if there are no vertices, done!
|
||||||
|
if(numSparsePoints == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// make data
|
||||||
|
Vec3f* tmpVertexBuffer = new Vec3f[numSparsePoints*patternNum];
|
||||||
|
Vec3b* tmpColorBuffer = new Vec3b[numSparsePoints*patternNum];
|
||||||
|
int vertexBufferNumPoints=0;
|
||||||
|
|
||||||
|
for(int i=0;i<numSparsePoints;i++)
|
||||||
|
{
|
||||||
|
/* display modes:
|
||||||
|
* my_displayMode==0 - all pts, color-coded
|
||||||
|
* my_displayMode==1 - normal points
|
||||||
|
* my_displayMode==2 - active only
|
||||||
|
* my_displayMode==3 - nothing
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(my_displayMode==1 && originalInputSparse[i].status != 1 && originalInputSparse[i].status!= 2) continue;
|
||||||
|
if(my_displayMode==2 && originalInputSparse[i].status != 1) continue;
|
||||||
|
if(my_displayMode>2) continue;
|
||||||
|
|
||||||
|
if(originalInputSparse[i].idpeth < 0) continue;
|
||||||
|
|
||||||
|
|
||||||
|
float depth = 1.0f / originalInputSparse[i].idpeth;
|
||||||
|
float depth4 = depth*depth; depth4*= depth4;
|
||||||
|
float var = (1.0f / (originalInputSparse[i].idepth_hessian+0.01));
|
||||||
|
|
||||||
|
if(var * depth4 > my_scaledTH)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(var > my_absTH)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(originalInputSparse[i].relObsBaseline < my_minRelBS)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
for(int pnt=0;pnt<patternNum;pnt++)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(my_sparsifyFactor > 1 && rand()%my_sparsifyFactor != 0) continue;
|
||||||
|
int dx = patternP[pnt][0];
|
||||||
|
int dy = patternP[pnt][1];
|
||||||
|
|
||||||
|
tmpVertexBuffer[vertexBufferNumPoints][0] = ((originalInputSparse[i].u+dx)*fxi + cxi) * depth;
|
||||||
|
tmpVertexBuffer[vertexBufferNumPoints][1] = ((originalInputSparse[i].v+dy)*fyi + cyi) * depth;
|
||||||
|
tmpVertexBuffer[vertexBufferNumPoints][2] = depth*(1 + 2*fxi * (rand()/(float)RAND_MAX-0.5f));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(my_displayMode==0)
|
||||||
|
{
|
||||||
|
if(originalInputSparse[i].status==0)
|
||||||
|
{
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][0] = 0;
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][1] = 255;
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][2] = 255;
|
||||||
|
}
|
||||||
|
else if(originalInputSparse[i].status==1)
|
||||||
|
{
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][0] = 0;
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][1] = 255;
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][2] = 0;
|
||||||
|
}
|
||||||
|
else if(originalInputSparse[i].status==2)
|
||||||
|
{
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][0] = 0;
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][1] = 0;
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][2] = 255;
|
||||||
|
}
|
||||||
|
else if(originalInputSparse[i].status==3)
|
||||||
|
{
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][0] = 255;
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][1] = 0;
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][2] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][0] = 255;
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][1] = 255;
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][2] = 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][0] = originalInputSparse[i].color[pnt];
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][1] = originalInputSparse[i].color[pnt];
|
||||||
|
tmpColorBuffer[vertexBufferNumPoints][2] = originalInputSparse[i].color[pnt];
|
||||||
|
}
|
||||||
|
vertexBufferNumPoints++;
|
||||||
|
|
||||||
|
|
||||||
|
assert(vertexBufferNumPoints <= numSparsePoints*patternNum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(vertexBufferNumPoints==0)
|
||||||
|
{
|
||||||
|
delete[] tmpColorBuffer;
|
||||||
|
delete[] tmpVertexBuffer;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
numGLBufferGoodPoints = vertexBufferNumPoints;
|
||||||
|
if(numGLBufferGoodPoints > numGLBufferPoints)
|
||||||
|
{
|
||||||
|
numGLBufferPoints = vertexBufferNumPoints*1.3;
|
||||||
|
vertexBuffer.Reinitialise(pangolin::GlArrayBuffer, numGLBufferPoints, GL_FLOAT, 3, GL_DYNAMIC_DRAW );
|
||||||
|
colorBuffer.Reinitialise(pangolin::GlArrayBuffer, numGLBufferPoints, GL_UNSIGNED_BYTE, 3, GL_DYNAMIC_DRAW );
|
||||||
|
}
|
||||||
|
vertexBuffer.Upload(tmpVertexBuffer, sizeof(float)*3*numGLBufferGoodPoints, 0);
|
||||||
|
colorBuffer.Upload(tmpColorBuffer, sizeof(unsigned char)*3*numGLBufferGoodPoints, 0);
|
||||||
|
bufferValid=true;
|
||||||
|
delete[] tmpColorBuffer;
|
||||||
|
delete[] tmpVertexBuffer;
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void KeyFrameDisplay::drawCam(float lineWidth, float* color, float sizeFactor)
|
||||||
|
{
|
||||||
|
if(width == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
float sz=sizeFactor;
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
|
||||||
|
Sophus::Matrix4f m = camToWorld.matrix().cast<float>();
|
||||||
|
glMultMatrixf((GLfloat*)m.data());
|
||||||
|
|
||||||
|
if(color == 0)
|
||||||
|
{
|
||||||
|
glColor3f(1,0,0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
glColor3f(color[0],color[1],color[2]);
|
||||||
|
|
||||||
|
glLineWidth(lineWidth);
|
||||||
|
glBegin(GL_LINES);
|
||||||
|
glVertex3f(0,0,0);
|
||||||
|
glVertex3f(sz*(0-cx)/fx,sz*(0-cy)/fy,sz);
|
||||||
|
glVertex3f(0,0,0);
|
||||||
|
glVertex3f(sz*(0-cx)/fx,sz*(height-1-cy)/fy,sz);
|
||||||
|
glVertex3f(0,0,0);
|
||||||
|
glVertex3f(sz*(width-1-cx)/fx,sz*(height-1-cy)/fy,sz);
|
||||||
|
glVertex3f(0,0,0);
|
||||||
|
glVertex3f(sz*(width-1-cx)/fx,sz*(0-cy)/fy,sz);
|
||||||
|
|
||||||
|
glVertex3f(sz*(width-1-cx)/fx,sz*(0-cy)/fy,sz);
|
||||||
|
glVertex3f(sz*(width-1-cx)/fx,sz*(height-1-cy)/fy,sz);
|
||||||
|
|
||||||
|
glVertex3f(sz*(width-1-cx)/fx,sz*(height-1-cy)/fy,sz);
|
||||||
|
glVertex3f(sz*(0-cx)/fx,sz*(height-1-cy)/fy,sz);
|
||||||
|
|
||||||
|
glVertex3f(sz*(0-cx)/fx,sz*(height-1-cy)/fy,sz);
|
||||||
|
glVertex3f(sz*(0-cx)/fx,sz*(0-cy)/fy,sz);
|
||||||
|
|
||||||
|
glVertex3f(sz*(0-cx)/fx,sz*(0-cy)/fy,sz);
|
||||||
|
glVertex3f(sz*(width-1-cx)/fx,sz*(0-cy)/fy,sz);
|
||||||
|
|
||||||
|
glEnd();
|
||||||
|
glPopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void KeyFrameDisplay::drawPC(float pointSize)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(!bufferValid || numGLBufferGoodPoints==0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
|
||||||
|
Sophus::Matrix4f m = camToWorld.matrix().cast<float>();
|
||||||
|
glMultMatrixf((GLfloat*)m.data());
|
||||||
|
|
||||||
|
glPointSize(pointSize);
|
||||||
|
|
||||||
|
|
||||||
|
colorBuffer.Bind();
|
||||||
|
glColorPointer(colorBuffer.count_per_element, colorBuffer.datatype, 0, 0);
|
||||||
|
glEnableClientState(GL_COLOR_ARRAY);
|
||||||
|
|
||||||
|
vertexBuffer.Bind();
|
||||||
|
glVertexPointer(vertexBuffer.count_per_element, vertexBuffer.datatype, 0, 0);
|
||||||
|
glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
|
glDrawArrays(GL_POINTS, 0, numGLBufferGoodPoints);
|
||||||
|
glDisableClientState(GL_VERTEX_ARRAY);
|
||||||
|
vertexBuffer.Unbind();
|
||||||
|
|
||||||
|
glDisableClientState(GL_COLOR_ARRAY);
|
||||||
|
colorBuffer.Unbind();
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
123
src/IOWrapper/Pangolin/KeyFrameDisplay.h
Normal file
123
src/IOWrapper/Pangolin/KeyFrameDisplay.h
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#undef Success
|
||||||
|
#include <Eigen/Core>
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include <pangolin/pangolin.h>
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
class CalibHessian;
|
||||||
|
class FrameHessian;
|
||||||
|
class FrameShell;
|
||||||
|
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
|
||||||
|
template<int ppp>
|
||||||
|
struct InputPointSparse
|
||||||
|
{
|
||||||
|
float u;
|
||||||
|
float v;
|
||||||
|
float idpeth;
|
||||||
|
float idepth_hessian;
|
||||||
|
float relObsBaseline;
|
||||||
|
int numGoodRes;
|
||||||
|
unsigned char color[ppp];
|
||||||
|
unsigned char status;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MyVertex
|
||||||
|
{
|
||||||
|
float point[3];
|
||||||
|
unsigned char color[4];
|
||||||
|
};
|
||||||
|
|
||||||
|
// stores a pointcloud associated to a Keyframe.
|
||||||
|
class KeyFrameDisplay
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
KeyFrameDisplay();
|
||||||
|
~KeyFrameDisplay();
|
||||||
|
|
||||||
|
// copies points from KF over to internal buffer,
|
||||||
|
// keeping some additional information so we can render it differently.
|
||||||
|
void setFromKF(FrameHessian* fh, CalibHessian* HCalib);
|
||||||
|
|
||||||
|
// copies points from KF over to internal buffer,
|
||||||
|
// keeping some additional information so we can render it differently.
|
||||||
|
void setFromF(FrameShell* fs, CalibHessian* HCalib);
|
||||||
|
|
||||||
|
// copies & filters internal data to GL buffer for rendering. if nothing to do: does nothing.
|
||||||
|
bool refreshPC(bool canRefresh, float scaledTH, float absTH, int mode, float minBS, int sparsity);
|
||||||
|
|
||||||
|
// renders cam & pointcloud.
|
||||||
|
void drawCam(float lineWidth = 1, float* color = 0, float sizeFactor=1);
|
||||||
|
void drawPC(float pointSize);
|
||||||
|
|
||||||
|
int id;
|
||||||
|
bool active;
|
||||||
|
SE3 camToWorld;
|
||||||
|
|
||||||
|
inline bool operator < (const KeyFrameDisplay& other) const
|
||||||
|
{
|
||||||
|
return (id < other.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
float fx,fy,cx,cy;
|
||||||
|
float fxi,fyi,cxi,cyi;
|
||||||
|
int width, height;
|
||||||
|
|
||||||
|
float my_scaledTH, my_absTH, my_scale;
|
||||||
|
int my_sparsifyFactor;
|
||||||
|
int my_displayMode;
|
||||||
|
float my_minRelBS;
|
||||||
|
bool needRefresh;
|
||||||
|
|
||||||
|
|
||||||
|
int numSparsePoints;
|
||||||
|
int numSparseBufferSize;
|
||||||
|
InputPointSparse<MAX_RES_PER_POINT>* originalInputSparse;
|
||||||
|
|
||||||
|
|
||||||
|
bool bufferValid;
|
||||||
|
int numGLBufferPoints;
|
||||||
|
int numGLBufferGoodPoints;
|
||||||
|
pangolin::GlBuffer vertexBuffer;
|
||||||
|
pangolin::GlBuffer colorBuffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
767
src/IOWrapper/Pangolin/PangolinDSOViewer.cpp
Normal file
767
src/IOWrapper/Pangolin/PangolinDSOViewer.cpp
Normal file
@@ -0,0 +1,767 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "PangolinDSOViewer.h"
|
||||||
|
#include "KeyFrameDisplay.h"
|
||||||
|
|
||||||
|
#include "util/settings.h"
|
||||||
|
#include "util/globalCalib.h"
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
#include "FullSystem/FullSystem.h"
|
||||||
|
#include "FullSystem/ImmaturePoint.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
bool isRotationMatrix(const cv::Mat &R)
|
||||||
|
{
|
||||||
|
cv::Mat Rt;
|
||||||
|
cv::transpose(R, Rt);
|
||||||
|
cv::Mat shouldBeIdentity = Rt * R;
|
||||||
|
cv::Mat I = cv::Mat::eye(3,3, shouldBeIdentity.type());
|
||||||
|
|
||||||
|
return cv::norm(I, shouldBeIdentity) < 1e-6;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Eigen::Vector3d rot2rvec(Eigen::Matrix<double, 3, 3>& Mat, bool changeAngleSign){
|
||||||
|
// Continue the convertion here.
|
||||||
|
// Convert from matrix to axis-angle representation.
|
||||||
|
double angle = acos( (Mat.trace() - 1) / 2 );
|
||||||
|
Eigen::Vector3d vec = {Mat(2, 1) - Mat(1, 2), Mat(0, 2) - Mat(2, 0), Mat(1, 0) - Mat(0, 1)};
|
||||||
|
// The unit vector
|
||||||
|
Eigen::Vector3d axis = {( 1.0 / 2.0 * sin(angle) ) * vec(0), ( 1.0 / 2.0 * sin(angle) ) * vec(1), ( 1.0 / 2.0 * sin(angle) ) * vec(2)};
|
||||||
|
Eigen::Vector3d rvec;
|
||||||
|
if (changeAngleSign){
|
||||||
|
rvec = -angle * axis;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
rvec = angle * axis;
|
||||||
|
}
|
||||||
|
return rvec;
|
||||||
|
};
|
||||||
|
|
||||||
|
void drawLine(int x, int y, int z){
|
||||||
|
glLineWidth(10);
|
||||||
|
glBegin(GL_LINES);
|
||||||
|
glVertex3f((float)x,(float)y,(float)z);
|
||||||
|
glVertex3f((float)x,(float)y,(float)z+1);
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawCube(float x, float y, float z){
|
||||||
|
glColor3f(0, 1, 0);
|
||||||
|
glLineWidth(5);
|
||||||
|
// glColor3ui(133, 247, 208);
|
||||||
|
glBegin(GL_LINES);
|
||||||
|
|
||||||
|
// Bottom
|
||||||
|
// glColor3ui(133, 247, 208);
|
||||||
|
glVertex3f(x, y, z);
|
||||||
|
glVertex3f(x, y+1, z);
|
||||||
|
|
||||||
|
// glColor3ui(253, 59, 86);
|
||||||
|
glVertex3f(x, y, z);
|
||||||
|
glVertex3f(x+1, y, z);
|
||||||
|
|
||||||
|
// glColor3ui(147, 175, 215);
|
||||||
|
glVertex3f(x, y+1, z);
|
||||||
|
glVertex3f(x+1, y+1, z);
|
||||||
|
|
||||||
|
// glColor3ui(80, 209, 168);
|
||||||
|
glVertex3f(x+1, y, z);
|
||||||
|
glVertex3f(x+1, y+1, z);
|
||||||
|
|
||||||
|
// Top
|
||||||
|
// glColor3ui(154, 13, 88);
|
||||||
|
glVertex3f(x, y, z+1);
|
||||||
|
glVertex3f(x, y+1, z+1);
|
||||||
|
|
||||||
|
// glColor3ui(253, 59, 86);
|
||||||
|
glVertex3f(x, y, z+1);
|
||||||
|
glVertex3f(x+1, y, z+1);
|
||||||
|
|
||||||
|
// glColor3ui(5, 26, 72);
|
||||||
|
glVertex3f(x, y+1, z+1);
|
||||||
|
glVertex3f(x+1, y+1, z+1);
|
||||||
|
|
||||||
|
// glColor3ui(72, 182, 8);
|
||||||
|
glVertex3f(x+1, y, z+1);
|
||||||
|
glVertex3f(x+1, y+1, z+1);
|
||||||
|
|
||||||
|
// Sides
|
||||||
|
// glColor3ui(28, 122, 71);
|
||||||
|
glVertex3f(x, y, z);
|
||||||
|
glVertex3f(x, y, z+1);
|
||||||
|
|
||||||
|
// glColor3ui(244, 207, 185);
|
||||||
|
glVertex3f(x, y+1, z);
|
||||||
|
glVertex3f(x, y+1, z+1);
|
||||||
|
|
||||||
|
// glColor3ui(88, 153, 225);
|
||||||
|
glVertex3f(x+1, y, z);
|
||||||
|
glVertex3f(x+1, y, z+1);
|
||||||
|
|
||||||
|
// glColor3ui(184, 151, 253);
|
||||||
|
glVertex3f(x+1, y+1, z);
|
||||||
|
glVertex3f(x+1, y+1, z+1);
|
||||||
|
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
PangolinDSOViewer::PangolinDSOViewer(int w, int h, bool startRunThread)
|
||||||
|
{
|
||||||
|
this->w = w;
|
||||||
|
this->h = h;
|
||||||
|
running=true;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
boost::unique_lock<boost::mutex> lk(openImagesMutex);
|
||||||
|
internalVideoImg = new MinimalImageB3(w,h);
|
||||||
|
internalKFImg = new MinimalImageB3(w,h);
|
||||||
|
internalResImg = new MinimalImageB3(w,h);
|
||||||
|
videoImgChanged=kfImgChanged=resImgChanged=true;
|
||||||
|
|
||||||
|
internalVideoImg->setBlack();
|
||||||
|
internalKFImg->setBlack();
|
||||||
|
internalResImg->setBlack();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
currentCam = new KeyFrameDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
needReset = false;
|
||||||
|
|
||||||
|
|
||||||
|
if(startRunThread)
|
||||||
|
runThread = boost::thread(&PangolinDSOViewer::run, this);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PangolinDSOViewer::~PangolinDSOViewer()
|
||||||
|
{
|
||||||
|
close();
|
||||||
|
runThread.join();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PangolinDSOViewer::run()
|
||||||
|
{
|
||||||
|
printf("START PANGOLIN!\n");
|
||||||
|
|
||||||
|
pangolin::CreateWindowAndBind("Main",2*w,2*h);
|
||||||
|
const int UI_WIDTH = 180;
|
||||||
|
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
// 3D visualization
|
||||||
|
pangolin::OpenGlRenderState Visualization3D_camera(
|
||||||
|
pangolin::ProjectionMatrix(w,h,400,400,w/2,h/2,0.1,1000),
|
||||||
|
pangolin::ModelViewLookAt(-0,-5,-10, 0,0,0, pangolin::AxisNegY)
|
||||||
|
);
|
||||||
|
|
||||||
|
pangolin::View& Visualization3D_display = pangolin::CreateDisplay()
|
||||||
|
.SetBounds(0.0, 1.0, pangolin::Attach::Pix(UI_WIDTH), 1.0, -w/(float)h)
|
||||||
|
.SetHandler(new pangolin::Handler3D(Visualization3D_camera));
|
||||||
|
|
||||||
|
|
||||||
|
// 3 images
|
||||||
|
pangolin::View& d_kfDepth = pangolin::Display("imgKFDepth")
|
||||||
|
.SetAspect(w/(float)h);
|
||||||
|
|
||||||
|
pangolin::View& d_video = pangolin::Display("imgVideo")
|
||||||
|
.SetAspect(w/(float)h);
|
||||||
|
|
||||||
|
pangolin::View& d_residual = pangolin::Display("imgResidual")
|
||||||
|
.SetAspect(w/(float)h);
|
||||||
|
|
||||||
|
pangolin::GlTexture texKFDepth(w,h,GL_RGB,false,0,GL_RGB,GL_UNSIGNED_BYTE);
|
||||||
|
pangolin::GlTexture texVideo(w,h,GL_RGB,false,0,GL_RGB,GL_UNSIGNED_BYTE);
|
||||||
|
pangolin::GlTexture texResidual(w,h,GL_RGB,false,0,GL_RGB,GL_UNSIGNED_BYTE);
|
||||||
|
|
||||||
|
|
||||||
|
pangolin::CreateDisplay()
|
||||||
|
.SetBounds(0.0, 0.3, pangolin::Attach::Pix(UI_WIDTH), 1.0)
|
||||||
|
.SetLayout(pangolin::LayoutEqual)
|
||||||
|
.AddDisplay(d_kfDepth)
|
||||||
|
.AddDisplay(d_video)
|
||||||
|
.AddDisplay(d_residual);
|
||||||
|
|
||||||
|
// parameter reconfigure gui
|
||||||
|
pangolin::CreatePanel("ui").SetBounds(0.0, 1.0, 0.0, pangolin::Attach::Pix(UI_WIDTH));
|
||||||
|
|
||||||
|
pangolin::Var<int> settings_pointCloudMode("ui.PC_mode",1,1,4,false);
|
||||||
|
|
||||||
|
pangolin::Var<bool> settings_showKFCameras("ui.KFCam",false,true);
|
||||||
|
pangolin::Var<bool> settings_showCurrentCamera("ui.CurrCam",true,true);
|
||||||
|
pangolin::Var<bool> settings_showTrajectory("ui.Trajectory",true,true);
|
||||||
|
pangolin::Var<bool> settings_showFullTrajectory("ui.FullTrajectory",false,true);
|
||||||
|
pangolin::Var<bool> settings_showActiveConstraints("ui.ActiveConst",true,true);
|
||||||
|
pangolin::Var<bool> settings_showAllConstraints("ui.AllConst",false,true);
|
||||||
|
|
||||||
|
// Added by Ivan Podmogilnyi 17.02.2022
|
||||||
|
pangolin::Var<bool> ifDrawCube("ui.drawCube", false, true);
|
||||||
|
pangolin::Var<bool> changeAngleSign("ui.ChangeAngleSign", false, true);
|
||||||
|
pangolin::Var<double> xSkew("ui.x", 0, -100, 100);
|
||||||
|
pangolin::Var<double> ySkew("ui.y", 0, -100, 100);
|
||||||
|
pangolin::Var<double> zSkew("ui.z", 0, -100, 100);
|
||||||
|
//End of append by Ivan
|
||||||
|
|
||||||
|
pangolin::Var<bool> settings_show3D("ui.show3D",true,true);
|
||||||
|
pangolin::Var<bool> settings_showLiveDepth("ui.showDepth",true,true);
|
||||||
|
pangolin::Var<bool> settings_showLiveVideo("ui.showVideo",true,true);
|
||||||
|
pangolin::Var<bool> settings_showLiveResidual("ui.showResidual",false,true);
|
||||||
|
|
||||||
|
pangolin::Var<bool> settings_showFramesWindow("ui.showFramesWindow",false,true);
|
||||||
|
pangolin::Var<bool> settings_showFullTracking("ui.showFullTracking",false,true);
|
||||||
|
pangolin::Var<bool> settings_showCoarseTracking("ui.showCoarseTracking",false,true);
|
||||||
|
|
||||||
|
|
||||||
|
pangolin::Var<int> settings_sparsity("ui.sparsity",1,1,20,false);
|
||||||
|
pangolin::Var<double> settings_scaledVarTH("ui.relVarTH",0.001,1e-10,1e10, true);
|
||||||
|
pangolin::Var<double> settings_absVarTH("ui.absVarTH",0.001,1e-10,1e10, true);
|
||||||
|
pangolin::Var<double> settings_minRelBS("ui.minRelativeBS",0.1,0,1, false);
|
||||||
|
|
||||||
|
|
||||||
|
pangolin::Var<bool> settings_resetButton("ui.Reset",false,false);
|
||||||
|
|
||||||
|
|
||||||
|
pangolin::Var<int> settings_nPts("ui.activePoints",setting_desiredPointDensity, 50,5000, false);
|
||||||
|
pangolin::Var<int> settings_nCandidates("ui.pointCandidates",setting_desiredImmatureDensity, 50,5000, false);
|
||||||
|
pangolin::Var<int> settings_nMaxFrames("ui.maxFrames",setting_maxFrames, 4,10, false);
|
||||||
|
pangolin::Var<double> settings_kfFrequency("ui.kfFrequency",setting_kfGlobalWeight,0.1,3, false);
|
||||||
|
pangolin::Var<double> settings_gradHistAdd("ui.minGradAdd",setting_minGradHistAdd,0,15, false);
|
||||||
|
|
||||||
|
pangolin::Var<double> settings_trackFps("ui.Track fps",0,0,0,false);
|
||||||
|
pangolin::Var<double> settings_mapFps("ui.KF fps",0,0,0,false);
|
||||||
|
|
||||||
|
// Obtaining the calibration matrix
|
||||||
|
cv::Mat K = cv::Mat::eye(3, 3, cv::DataType<double>::type);
|
||||||
|
CalibHessian hcalib = *Hcalib;
|
||||||
|
std::cout << "Hessian calib" << std::endl;
|
||||||
|
K.at<double>(0,0) = 190.978477;
|
||||||
|
std::cout << "fx: " << K.at<double>(0, 0);
|
||||||
|
K.at<double>(1,1) = 190.973307;
|
||||||
|
std::cout << "fy: " << K.at<double>(1, 1);
|
||||||
|
K.at<double>(0,2) = 254.931706;
|
||||||
|
std::cout << "cx: " << K.at<double>(0, 2);
|
||||||
|
K.at<double>(1,2) = 256.897442;
|
||||||
|
std::cout << "cy: " << K.at<double> (1, 2);
|
||||||
|
|
||||||
|
// Obtaining the distortion coefficients
|
||||||
|
std::vector<double> distCoeffs(5);
|
||||||
|
distCoeffs[0] = 0.003482389402;
|
||||||
|
distCoeffs[1] = 0.000715034845;
|
||||||
|
distCoeffs[2] = -0.002053236141;
|
||||||
|
distCoeffs[3] = 0.000202936736;
|
||||||
|
distCoeffs[4] = 0;
|
||||||
|
|
||||||
|
// Default hooks for exiting (Esc) and fullscreen (tab).
|
||||||
|
while( !pangolin::ShouldQuit() && running )
|
||||||
|
{
|
||||||
|
// Clear entire screen
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
if(setting_render_display3D)
|
||||||
|
{
|
||||||
|
// Activate efficiently by object
|
||||||
|
Visualization3D_display.Activate(Visualization3D_camera);
|
||||||
|
boost::unique_lock<boost::mutex> lk3d(model3DMutex);
|
||||||
|
//pangolin::glDrawColouredCube();
|
||||||
|
// 17.02.2022 Added by Ivan Podmogilnyi.
|
||||||
|
//drawLine(xSkew, ySkew, zSkew);
|
||||||
|
if (ifDrawCube){
|
||||||
|
drawCube(xSkew, ySkew, zSkew);
|
||||||
|
|
||||||
|
std::cout << "draw cube in pangolin success";
|
||||||
|
|
||||||
|
cv::Point3d point1 = {xSkew, ySkew, zSkew};
|
||||||
|
cv::Point3d point2 = {xSkew, ySkew+1, zSkew};
|
||||||
|
cv::Point3d point3 = {xSkew+1, ySkew, zSkew};
|
||||||
|
cv::Point3d point4 = {xSkew+1, ySkew+1, zSkew};
|
||||||
|
cv::Point3d point5 = {xSkew, ySkew, zSkew+1};
|
||||||
|
cv::Point3d point6 = {xSkew, ySkew+1, zSkew+1};
|
||||||
|
cv::Point3d point7 = {xSkew+1, ySkew, zSkew+1};
|
||||||
|
cv::Point3d point8 = {xSkew+1, ySkew+1, zSkew+1};
|
||||||
|
|
||||||
|
cv::Vec3b color1 = {133, 247, 208};
|
||||||
|
cv::Vec3b color2 = {253, 59, 86};
|
||||||
|
cv::Vec3b color3 = {147, 175, 215};
|
||||||
|
cv::Vec3b color4 = {80, 209, 168};
|
||||||
|
cv::Vec3b color5 = {154, 13, 88};
|
||||||
|
cv::Vec3b color6 = {253, 59, 86};
|
||||||
|
cv::Vec3b color7 = {5, 26, 72};
|
||||||
|
cv::Vec3b color8 = {72, 182, 8};
|
||||||
|
cv::Vec3b color9 = {28, 122, 71};
|
||||||
|
cv::Vec3b color10 = {88, 153, 225};
|
||||||
|
cv::Vec3b color11 = {184, 151, 253};
|
||||||
|
cv::Vec3b color12 = {244, 207, 185};
|
||||||
|
|
||||||
|
std::vector<cv::Point3d> objectPoints = {point1, point2, point3, point4, point5, point6, point7, point8};
|
||||||
|
std::vector<cv::Point2d> imagePoints;
|
||||||
|
|
||||||
|
auto s = lastPose;
|
||||||
|
std::cout << "getting last pose success" << std::endl;
|
||||||
|
if (s != nullptr){
|
||||||
|
bool write = true;
|
||||||
|
if(!s->poseValid) {
|
||||||
|
write=false;
|
||||||
|
}
|
||||||
|
std::cout << "is pose valid? " << write << std::endl;
|
||||||
|
// Obtaining the current camera pose
|
||||||
|
Eigen::Matrix<double, 3, 3> rotMat = s->camToWorld.so3().matrix();
|
||||||
|
Eigen::Vector3d rvec = rot2rvec(rotMat, changeAngleSign);
|
||||||
|
std::vector<double> rVec(rvec.data(), rvec.data() + rvec.rows() * rvec.cols());
|
||||||
|
Eigen::Vector3d tvec = s->camToWorld.translation();
|
||||||
|
std::vector<double> tVec(tvec.data(), tvec.data() + tvec.rows() * tvec.cols());
|
||||||
|
|
||||||
|
// Projecting points
|
||||||
|
cv::projectPoints(objectPoints, rVec, tVec, K, distCoeffs, imagePoints);
|
||||||
|
cv::Mat image(h, w, CV_16UC3);
|
||||||
|
// cv::cvtColor(image, image, cv::COLOR_BGR2RGB);
|
||||||
|
|
||||||
|
// Getting the current image.
|
||||||
|
openImagesMutex.lock();
|
||||||
|
for(int i=0;i<h;i++){
|
||||||
|
for (int j=0;j<w;j++){
|
||||||
|
image.at<cv::Vec3b>(i, j)[0] = internalVideoImg->data[i*w + j][0];
|
||||||
|
image.at<cv::Vec3b>(i, j)[1] = internalVideoImg->data[i*w + j][1];
|
||||||
|
image.at<cv::Vec3b>(i, j)[2] = internalVideoImg->data[i*w + j][2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
openImagesMutex.unlock();
|
||||||
|
|
||||||
|
// Drawing the line on the image
|
||||||
|
// cv::line(image, imagePoints[0], imagePoints[1], color1, 5);
|
||||||
|
// cv::line(image, imagePoints[0], imagePoints[2], color2, 5);
|
||||||
|
// cv::line(image, imagePoints[1], imagePoints[3], color3, 5);
|
||||||
|
// cv::line(image, imagePoints[2], imagePoints[3], color4, 5);
|
||||||
|
// cv::line(image, imagePoints[4], imagePoints[5], color5, 5);
|
||||||
|
// cv::line(image, imagePoints[4], imagePoints[6], color6, 5);
|
||||||
|
// cv::line(image, imagePoints[5], imagePoints[7], color7, 5);
|
||||||
|
// cv::line(image, imagePoints[6], imagePoints[7], color8, 5);
|
||||||
|
// cv::line(image, imagePoints[0], imagePoints[4], color9, 5);
|
||||||
|
// cv::line(image, imagePoints[1], imagePoints[5], color10, 5);
|
||||||
|
// cv::line(image, imagePoints[2], imagePoints[6], color11, 5);
|
||||||
|
// cv::line(image, imagePoints[3], imagePoints[7], color12, 5);
|
||||||
|
|
||||||
|
cv::line(image, imagePoints[0], imagePoints[1], color1, 2);
|
||||||
|
cv::line(image, imagePoints[0], imagePoints[2], color1, 2);
|
||||||
|
cv::line(image, imagePoints[1], imagePoints[3], color1, 2);
|
||||||
|
cv::line(image, imagePoints[2], imagePoints[3], color1, 2);
|
||||||
|
cv::line(image, imagePoints[4], imagePoints[5], color1, 2);
|
||||||
|
cv::line(image, imagePoints[4], imagePoints[6], color1, 2);
|
||||||
|
cv::line(image, imagePoints[5], imagePoints[7], color1, 2);
|
||||||
|
cv::line(image, imagePoints[6], imagePoints[7], color1, 2);
|
||||||
|
cv::line(image, imagePoints[0], imagePoints[4], color1, 2);
|
||||||
|
cv::line(image, imagePoints[1], imagePoints[5], color1, 2);
|
||||||
|
cv::line(image, imagePoints[2], imagePoints[6], color1, 2);
|
||||||
|
cv::line(image, imagePoints[3], imagePoints[7], color1, 2);
|
||||||
|
|
||||||
|
// Updating the current image and updating the inner image.
|
||||||
|
openImagesMutex.lock();
|
||||||
|
for(int i=0;i<h;i++){
|
||||||
|
for(int j=0;j<w;j++){
|
||||||
|
internalVideoImg->data[i*w + j][0] = image.at<Vec3b>(i, j)[0];
|
||||||
|
internalVideoImg->data[i*w + j][1] = image.at<Vec3b>(i, j)[1];
|
||||||
|
internalVideoImg->data[i*w + j][2] = image.at<Vec3b>(i, j)[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// texVideo.Upload(internalVideoImg->data,GL_BGR,GL_UNSIGNED_BYTE);
|
||||||
|
openImagesMutex.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int refreshed=0;
|
||||||
|
for(KeyFrameDisplay* fh : keyframes)
|
||||||
|
{
|
||||||
|
|
||||||
|
float blue[3] = {0,0,1};
|
||||||
|
if(this->settings_showKFCameras) fh->drawCam(1,blue,0.1);
|
||||||
|
|
||||||
|
|
||||||
|
refreshed += (int)(fh->refreshPC(refreshed < 10, this->settings_scaledVarTH, this->settings_absVarTH,
|
||||||
|
this->settings_pointCloudMode, this->settings_minRelBS, this->settings_sparsity));
|
||||||
|
fh->drawPC(1);
|
||||||
|
}
|
||||||
|
if(this->settings_showCurrentCamera) currentCam->drawCam(2,0,0.2);
|
||||||
|
drawConstraints();
|
||||||
|
lk3d.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
openImagesMutex.lock();
|
||||||
|
if(videoImgChanged) texVideo.Upload(internalVideoImg->data,GL_BGR,GL_UNSIGNED_BYTE);
|
||||||
|
if(kfImgChanged) texKFDepth.Upload(internalKFImg->data,GL_BGR,GL_UNSIGNED_BYTE);
|
||||||
|
if(resImgChanged) texResidual.Upload(internalResImg->data,GL_BGR,GL_UNSIGNED_BYTE);
|
||||||
|
videoImgChanged=kfImgChanged=resImgChanged=false;
|
||||||
|
openImagesMutex.unlock();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// update fps counters
|
||||||
|
{
|
||||||
|
openImagesMutex.lock();
|
||||||
|
float sd=0;
|
||||||
|
for(float d : lastNMappingMs) sd+=d;
|
||||||
|
settings_mapFps=lastNMappingMs.size()*1000.0f / sd;
|
||||||
|
openImagesMutex.unlock();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
model3DMutex.lock();
|
||||||
|
float sd=0;
|
||||||
|
for(float d : lastNTrackingMs) sd+=d;
|
||||||
|
settings_trackFps = lastNTrackingMs.size()*1000.0f / sd;
|
||||||
|
model3DMutex.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(setting_render_displayVideo)
|
||||||
|
{
|
||||||
|
d_video.Activate();
|
||||||
|
glColor4f(1.0f,1.0f,1.0f,1.0f);
|
||||||
|
texVideo.RenderToViewportFlipY();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(setting_render_displayDepth)
|
||||||
|
{
|
||||||
|
d_kfDepth.Activate();
|
||||||
|
glColor4f(1.0f,1.0f,1.0f,1.0f);
|
||||||
|
texKFDepth.RenderToViewportFlipY();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(setting_render_displayResidual)
|
||||||
|
{
|
||||||
|
d_residual.Activate();
|
||||||
|
glColor4f(1.0f,1.0f,1.0f,1.0f);
|
||||||
|
texResidual.RenderToViewportFlipY();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// update parameters
|
||||||
|
this->settings_pointCloudMode = settings_pointCloudMode.Get();
|
||||||
|
|
||||||
|
this->settings_showActiveConstraints = settings_showActiveConstraints.Get();
|
||||||
|
this->settings_showAllConstraints = settings_showAllConstraints.Get();
|
||||||
|
this->settings_showCurrentCamera = settings_showCurrentCamera.Get();
|
||||||
|
this->settings_showKFCameras = settings_showKFCameras.Get();
|
||||||
|
this->settings_showTrajectory = settings_showTrajectory.Get();
|
||||||
|
this->settings_showFullTrajectory = settings_showFullTrajectory.Get();
|
||||||
|
|
||||||
|
setting_render_display3D = settings_show3D.Get();
|
||||||
|
setting_render_displayDepth = settings_showLiveDepth.Get();
|
||||||
|
setting_render_displayVideo = settings_showLiveVideo.Get();
|
||||||
|
setting_render_displayResidual = settings_showLiveResidual.Get();
|
||||||
|
|
||||||
|
setting_render_renderWindowFrames = settings_showFramesWindow.Get();
|
||||||
|
setting_render_plotTrackingFull = settings_showFullTracking.Get();
|
||||||
|
setting_render_displayCoarseTrackingFull = settings_showCoarseTracking.Get();
|
||||||
|
|
||||||
|
|
||||||
|
this->settings_absVarTH = settings_absVarTH.Get();
|
||||||
|
this->settings_scaledVarTH = settings_scaledVarTH.Get();
|
||||||
|
this->settings_minRelBS = settings_minRelBS.Get();
|
||||||
|
this->settings_sparsity = settings_sparsity.Get();
|
||||||
|
|
||||||
|
setting_desiredPointDensity = settings_nPts.Get();
|
||||||
|
setting_desiredImmatureDensity = settings_nCandidates.Get();
|
||||||
|
setting_maxFrames = settings_nMaxFrames.Get();
|
||||||
|
setting_kfGlobalWeight = settings_kfFrequency.Get();
|
||||||
|
setting_minGradHistAdd = settings_gradHistAdd.Get();
|
||||||
|
|
||||||
|
|
||||||
|
if(settings_resetButton.Get())
|
||||||
|
{
|
||||||
|
printf("RESET!\n");
|
||||||
|
settings_resetButton.Reset();
|
||||||
|
setting_fullResetRequested = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Swap frames and Process Events
|
||||||
|
pangolin::FinishFrame();
|
||||||
|
|
||||||
|
|
||||||
|
if(needReset) reset_internal();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
printf("QUIT Pangolin thread!\n");
|
||||||
|
printf("I'll just kill the whole process.\nSo Long, and Thanks for All the Fish!\n");
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PangolinDSOViewer::close()
|
||||||
|
{
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PangolinDSOViewer::join()
|
||||||
|
{
|
||||||
|
runThread.join();
|
||||||
|
printf("JOINED Pangolin thread!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void PangolinDSOViewer::reset()
|
||||||
|
{
|
||||||
|
needReset = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PangolinDSOViewer::reset_internal()
|
||||||
|
{
|
||||||
|
model3DMutex.lock();
|
||||||
|
for(size_t i=0; i<keyframes.size();i++) delete keyframes[i];
|
||||||
|
keyframes.clear();
|
||||||
|
allFramePoses.clear();
|
||||||
|
keyframesByKFID.clear();
|
||||||
|
connections.clear();
|
||||||
|
model3DMutex.unlock();
|
||||||
|
|
||||||
|
|
||||||
|
openImagesMutex.lock();
|
||||||
|
internalVideoImg->setBlack();
|
||||||
|
internalKFImg->setBlack();
|
||||||
|
internalResImg->setBlack();
|
||||||
|
videoImgChanged= kfImgChanged= resImgChanged=true;
|
||||||
|
openImagesMutex.unlock();
|
||||||
|
|
||||||
|
needReset = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PangolinDSOViewer::drawConstraints()
|
||||||
|
{
|
||||||
|
if(settings_showAllConstraints)
|
||||||
|
{
|
||||||
|
// draw constraints
|
||||||
|
glLineWidth(1);
|
||||||
|
glBegin(GL_LINES);
|
||||||
|
|
||||||
|
glColor3f(0,1,0);
|
||||||
|
glBegin(GL_LINES);
|
||||||
|
for(unsigned int i=0;i<connections.size();i++)
|
||||||
|
{
|
||||||
|
if(connections[i].to == 0 || connections[i].from==0) continue;
|
||||||
|
int nAct = connections[i].bwdAct + connections[i].fwdAct;
|
||||||
|
int nMarg = connections[i].bwdMarg + connections[i].fwdMarg;
|
||||||
|
if(nAct==0 && nMarg>0 )
|
||||||
|
{
|
||||||
|
Sophus::Vector3f t = connections[i].from->camToWorld.translation().cast<float>();
|
||||||
|
glVertex3f((GLfloat) t[0],(GLfloat) t[1], (GLfloat) t[2]);
|
||||||
|
t = connections[i].to->camToWorld.translation().cast<float>();
|
||||||
|
glVertex3f((GLfloat) t[0],(GLfloat) t[1], (GLfloat) t[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(settings_showActiveConstraints)
|
||||||
|
{
|
||||||
|
glLineWidth(3);
|
||||||
|
glColor3f(0,0,1);
|
||||||
|
glBegin(GL_LINES);
|
||||||
|
for(unsigned int i=0;i<connections.size();i++)
|
||||||
|
{
|
||||||
|
if(connections[i].to == 0 || connections[i].from==0) continue;
|
||||||
|
int nAct = connections[i].bwdAct + connections[i].fwdAct;
|
||||||
|
|
||||||
|
if(nAct>0)
|
||||||
|
{
|
||||||
|
Sophus::Vector3f t = connections[i].from->camToWorld.translation().cast<float>();
|
||||||
|
glVertex3f((GLfloat) t[0],(GLfloat) t[1], (GLfloat) t[2]);
|
||||||
|
t = connections[i].to->camToWorld.translation().cast<float>();
|
||||||
|
glVertex3f((GLfloat) t[0],(GLfloat) t[1], (GLfloat) t[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(settings_showTrajectory)
|
||||||
|
{
|
||||||
|
float colorRed[3] = {1,0,0};
|
||||||
|
glColor3f(colorRed[0],colorRed[1],colorRed[2]);
|
||||||
|
glLineWidth(3);
|
||||||
|
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
for(unsigned int i=0;i<keyframes.size();i++)
|
||||||
|
{
|
||||||
|
glVertex3f((float)keyframes[i]->camToWorld.translation()[0],
|
||||||
|
(float)keyframes[i]->camToWorld.translation()[1],
|
||||||
|
(float)keyframes[i]->camToWorld.translation()[2]);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(settings_showFullTrajectory)
|
||||||
|
{
|
||||||
|
float colorGreen[3] = {0,1,0};
|
||||||
|
glColor3f(colorGreen[0],colorGreen[1],colorGreen[2]);
|
||||||
|
glLineWidth(3);
|
||||||
|
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
for(unsigned int i=0;i<allFramePoses.size();i++)
|
||||||
|
{
|
||||||
|
glVertex3f((float)allFramePoses[i][0],
|
||||||
|
(float)allFramePoses[i][1],
|
||||||
|
(float)allFramePoses[i][2]);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PangolinDSOViewer::publishGraph(const std::map<uint64_t, Eigen::Vector2i, std::less<uint64_t>, Eigen::aligned_allocator<std::pair<const uint64_t, Eigen::Vector2i>>> &connectivity)
|
||||||
|
{
|
||||||
|
if(!setting_render_display3D) return;
|
||||||
|
if(disableAllDisplay) return;
|
||||||
|
|
||||||
|
model3DMutex.lock();
|
||||||
|
connections.resize(connectivity.size());
|
||||||
|
int runningID=0;
|
||||||
|
int totalActFwd=0, totalActBwd=0, totalMargFwd=0, totalMargBwd=0;
|
||||||
|
for(std::pair<uint64_t,Eigen::Vector2i> p : connectivity)
|
||||||
|
{
|
||||||
|
int host = (int)(p.first >> 32);
|
||||||
|
int target = (int)(p.first & (uint64_t)0xFFFFFFFF);
|
||||||
|
|
||||||
|
assert(host >= 0 && target >= 0);
|
||||||
|
if(host == target)
|
||||||
|
{
|
||||||
|
assert(p.second[0] == 0 && p.second[1] == 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(host > target) continue;
|
||||||
|
|
||||||
|
connections[runningID].from = keyframesByKFID.count(host) == 0 ? 0 : keyframesByKFID[host];
|
||||||
|
connections[runningID].to = keyframesByKFID.count(target) == 0 ? 0 : keyframesByKFID[target];
|
||||||
|
connections[runningID].fwdAct = p.second[0];
|
||||||
|
connections[runningID].fwdMarg = p.second[1];
|
||||||
|
totalActFwd += p.second[0];
|
||||||
|
totalMargFwd += p.second[1];
|
||||||
|
|
||||||
|
uint64_t inverseKey = (((uint64_t)target) << 32) + ((uint64_t)host);
|
||||||
|
Eigen::Vector2i st = connectivity.at(inverseKey);
|
||||||
|
connections[runningID].bwdAct = st[0];
|
||||||
|
connections[runningID].bwdMarg = st[1];
|
||||||
|
|
||||||
|
totalActBwd += st[0];
|
||||||
|
totalMargBwd += st[1];
|
||||||
|
|
||||||
|
runningID++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
model3DMutex.unlock();
|
||||||
|
}
|
||||||
|
void PangolinDSOViewer::publishKeyframes(
|
||||||
|
std::vector<FrameHessian*> &frames,
|
||||||
|
bool final,
|
||||||
|
CalibHessian* HCalib)
|
||||||
|
{
|
||||||
|
if(!setting_render_display3D) return;
|
||||||
|
if(disableAllDisplay) return;
|
||||||
|
|
||||||
|
boost::unique_lock<boost::mutex> lk(model3DMutex);
|
||||||
|
for(FrameHessian* fh : frames)
|
||||||
|
{
|
||||||
|
if(keyframesByKFID.find(fh->frameID) == keyframesByKFID.end())
|
||||||
|
{
|
||||||
|
KeyFrameDisplay* kfd = new KeyFrameDisplay();
|
||||||
|
keyframesByKFID[fh->frameID] = kfd;
|
||||||
|
keyframes.push_back(kfd);
|
||||||
|
}
|
||||||
|
keyframesByKFID[fh->frameID]->setFromKF(fh, HCalib);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void PangolinDSOViewer::publishCamPose(FrameShell* frame,
|
||||||
|
CalibHessian* HCalib)
|
||||||
|
{
|
||||||
|
if(!setting_render_display3D) return;
|
||||||
|
if(disableAllDisplay) return;
|
||||||
|
|
||||||
|
boost::unique_lock<boost::mutex> lk(model3DMutex);
|
||||||
|
struct timeval time_now;
|
||||||
|
gettimeofday(&time_now, NULL);
|
||||||
|
lastNTrackingMs.push_back(((time_now.tv_sec-last_track.tv_sec)*1000.0f + (time_now.tv_usec-last_track.tv_usec)/1000.0f));
|
||||||
|
if(lastNTrackingMs.size() > 10) lastNTrackingMs.pop_front();
|
||||||
|
last_track = time_now;
|
||||||
|
|
||||||
|
if(!setting_render_display3D) return;
|
||||||
|
|
||||||
|
currentCam->setFromF(frame, HCalib);
|
||||||
|
allFramePoses.push_back(frame->camToWorld.translation().cast<float>());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PangolinDSOViewer::pushLiveFrame(FrameHessian* image)
|
||||||
|
{
|
||||||
|
if(!setting_render_displayVideo) return;
|
||||||
|
if(disableAllDisplay) return;
|
||||||
|
|
||||||
|
boost::unique_lock<boost::mutex> lk(openImagesMutex);
|
||||||
|
|
||||||
|
for(int i=0;i<w*h;i++)
|
||||||
|
internalVideoImg->data[i][0] =
|
||||||
|
internalVideoImg->data[i][1] =
|
||||||
|
internalVideoImg->data[i][2] =
|
||||||
|
image->dI[i][0]*0.8 > 255.0f ? 255.0 : image->dI[i][0]*0.8;
|
||||||
|
|
||||||
|
videoImgChanged=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PangolinDSOViewer::needPushDepthImage()
|
||||||
|
{
|
||||||
|
return setting_render_displayDepth;
|
||||||
|
}
|
||||||
|
void PangolinDSOViewer::pushDepthImage(MinimalImageB3* image)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(!setting_render_displayDepth) return;
|
||||||
|
if(disableAllDisplay) return;
|
||||||
|
|
||||||
|
boost::unique_lock<boost::mutex> lk(openImagesMutex);
|
||||||
|
|
||||||
|
struct timeval time_now;
|
||||||
|
gettimeofday(&time_now, NULL);
|
||||||
|
lastNMappingMs.push_back(((time_now.tv_sec-last_map.tv_sec)*1000.0f + (time_now.tv_usec-last_map.tv_usec)/1000.0f));
|
||||||
|
if(lastNMappingMs.size() > 10) lastNMappingMs.pop_front();
|
||||||
|
last_map = time_now;
|
||||||
|
|
||||||
|
memcpy(internalKFImg->data, image->data, w*h*3);
|
||||||
|
kfImgChanged=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
154
src/IOWrapper/Pangolin/PangolinDSOViewer.h
Normal file
154
src/IOWrapper/Pangolin/PangolinDSOViewer.h
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <pangolin/pangolin.h>
|
||||||
|
#include "boost/thread.hpp"
|
||||||
|
#include "util/MinimalImage.h"
|
||||||
|
#include "IOWrapper/Output3DWrapper.h"
|
||||||
|
#include <map>
|
||||||
|
#include <deque>
|
||||||
|
|
||||||
|
#include "opencv2/core/core.hpp"
|
||||||
|
#include "opencv2/imgproc/imgproc.hpp"
|
||||||
|
#include "opencv2/calib3d/calib3d.hpp"
|
||||||
|
#include "opencv2/highgui/highgui.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
class FrameHessian;
|
||||||
|
class CalibHessian;
|
||||||
|
class FrameShell;
|
||||||
|
|
||||||
|
|
||||||
|
namespace IOWrap
|
||||||
|
{
|
||||||
|
|
||||||
|
class KeyFrameDisplay;
|
||||||
|
|
||||||
|
struct GraphConnection
|
||||||
|
{
|
||||||
|
KeyFrameDisplay* from;
|
||||||
|
KeyFrameDisplay* to;
|
||||||
|
int fwdMarg, bwdMarg, fwdAct, bwdAct;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class PangolinDSOViewer : public Output3DWrapper
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
PangolinDSOViewer(int w, int h, bool startRunThread=true);
|
||||||
|
virtual ~PangolinDSOViewer();
|
||||||
|
|
||||||
|
void run();
|
||||||
|
void close();
|
||||||
|
|
||||||
|
void addImageToDisplay(std::string name, MinimalImageB3* image);
|
||||||
|
void clearAllImagesToDisplay();
|
||||||
|
|
||||||
|
|
||||||
|
// ==================== Output3DWrapper Functionality ======================
|
||||||
|
virtual void publishGraph(const std::map<uint64_t, Eigen::Vector2i, std::less<uint64_t>, Eigen::aligned_allocator<std::pair<const uint64_t, Eigen::Vector2i>>> &connectivity) override;
|
||||||
|
virtual void publishKeyframes( std::vector<FrameHessian*> &frames, bool final, CalibHessian* HCalib) override;
|
||||||
|
virtual void publishCamPose(FrameShell* frame, CalibHessian* HCalib) override;
|
||||||
|
|
||||||
|
|
||||||
|
virtual void pushLiveFrame(FrameHessian* image) override;
|
||||||
|
virtual void pushDepthImage(MinimalImageB3* image) override;
|
||||||
|
virtual bool needPushDepthImage() override;
|
||||||
|
|
||||||
|
virtual void join() override;
|
||||||
|
|
||||||
|
virtual void reset() override;
|
||||||
|
|
||||||
|
//Append
|
||||||
|
FrameShell* lastPose = nullptr;
|
||||||
|
CalibHessian* Hcalib = nullptr;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
bool needReset;
|
||||||
|
void reset_internal();
|
||||||
|
void drawConstraints();
|
||||||
|
|
||||||
|
boost::thread runThread;
|
||||||
|
bool running;
|
||||||
|
int w,h;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// images rendering
|
||||||
|
boost::mutex openImagesMutex;
|
||||||
|
MinimalImageB3* internalVideoImg;
|
||||||
|
MinimalImageB3* internalKFImg;
|
||||||
|
MinimalImageB3* internalResImg;
|
||||||
|
bool videoImgChanged, kfImgChanged, resImgChanged;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 3D model rendering
|
||||||
|
boost::mutex model3DMutex;
|
||||||
|
KeyFrameDisplay* currentCam;
|
||||||
|
std::vector<KeyFrameDisplay*> keyframes;
|
||||||
|
std::vector<Vec3f,Eigen::aligned_allocator<Vec3f>> allFramePoses;
|
||||||
|
std::map<int, KeyFrameDisplay*> keyframesByKFID;
|
||||||
|
std::vector<GraphConnection,Eigen::aligned_allocator<GraphConnection>> connections;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// render settings
|
||||||
|
bool settings_showKFCameras;
|
||||||
|
bool settings_showCurrentCamera;
|
||||||
|
bool settings_showTrajectory;
|
||||||
|
bool settings_showFullTrajectory;
|
||||||
|
bool settings_showActiveConstraints;
|
||||||
|
bool settings_showAllConstraints;
|
||||||
|
|
||||||
|
float settings_scaledVarTH;
|
||||||
|
float settings_absVarTH;
|
||||||
|
int settings_pointCloudMode;
|
||||||
|
float settings_minRelBS;
|
||||||
|
int settings_sparsity;
|
||||||
|
|
||||||
|
|
||||||
|
// timings
|
||||||
|
struct timeval last_track;
|
||||||
|
struct timeval last_map;
|
||||||
|
|
||||||
|
|
||||||
|
std::deque<float> lastNTrackingMs;
|
||||||
|
std::deque<float> lastNMappingMs;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
221
src/OptimizationBackend/AccumulatedSCHessian.cpp
Normal file
221
src/OptimizationBackend/AccumulatedSCHessian.cpp
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "OptimizationBackend/AccumulatedSCHessian.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctional.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctionalStructs.h"
|
||||||
|
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
void AccumulatedSCHessianSSE::addPoint(EFPoint* p, bool shiftPriorToZero, int tid)
|
||||||
|
{
|
||||||
|
int ngoodres = 0;
|
||||||
|
for(EFResidual* r : p->residualsAll) if(r->isActive()) ngoodres++;
|
||||||
|
if(ngoodres==0)
|
||||||
|
{
|
||||||
|
p->HdiF=0;
|
||||||
|
p->bdSumF=0;
|
||||||
|
p->data->idepth_hessian=0;
|
||||||
|
p->data->maxRelBaseline=0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float H = p->Hdd_accAF+p->Hdd_accLF+p->priorF;
|
||||||
|
if(H < 1e-10) H = 1e-10;
|
||||||
|
|
||||||
|
p->data->idepth_hessian=H;
|
||||||
|
|
||||||
|
p->HdiF = 1.0 / H;
|
||||||
|
p->bdSumF = p->bd_accAF + p->bd_accLF;
|
||||||
|
if(shiftPriorToZero) p->bdSumF += p->priorF*p->deltaF;
|
||||||
|
VecCf Hcd = p->Hcd_accAF + p->Hcd_accLF;
|
||||||
|
accHcc[tid].update(Hcd,Hcd,p->HdiF);
|
||||||
|
accbc[tid].update(Hcd, p->bdSumF * p->HdiF);
|
||||||
|
|
||||||
|
assert(std::isfinite((float)(p->HdiF)));
|
||||||
|
|
||||||
|
int nFrames2 = nframes[tid]*nframes[tid];
|
||||||
|
for(EFResidual* r1 : p->residualsAll)
|
||||||
|
{
|
||||||
|
if(!r1->isActive()) continue;
|
||||||
|
int r1ht = r1->hostIDX + r1->targetIDX*nframes[tid];
|
||||||
|
|
||||||
|
for(EFResidual* r2 : p->residualsAll)
|
||||||
|
{
|
||||||
|
if(!r2->isActive()) continue;
|
||||||
|
|
||||||
|
accD[tid][r1ht+r2->targetIDX*nFrames2].update(r1->JpJdF, r2->JpJdF, p->HdiF);
|
||||||
|
}
|
||||||
|
|
||||||
|
accE[tid][r1ht].update(r1->JpJdF, Hcd, p->HdiF);
|
||||||
|
accEB[tid][r1ht].update(r1->JpJdF,p->HdiF*p->bdSumF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void AccumulatedSCHessianSSE::stitchDoubleInternal(
|
||||||
|
MatXX* H, VecX* b, EnergyFunctional const * const EF,
|
||||||
|
int min, int max, Vec10* stats, int tid)
|
||||||
|
{
|
||||||
|
int toAggregate = NUM_THREADS;
|
||||||
|
if(tid == -1) { toAggregate = 1; tid = 0; } // special case: if we dont do multithreading, dont aggregate.
|
||||||
|
if(min==max) return;
|
||||||
|
|
||||||
|
|
||||||
|
int nf = nframes[0];
|
||||||
|
int nframes2 = nf*nf;
|
||||||
|
|
||||||
|
for(int k=min;k<max;k++)
|
||||||
|
{
|
||||||
|
int i = k%nf;
|
||||||
|
int j = k/nf;
|
||||||
|
|
||||||
|
int iIdx = CPARS+i*8;
|
||||||
|
int jIdx = CPARS+j*8;
|
||||||
|
int ijIdx = i+nf*j;
|
||||||
|
|
||||||
|
Mat8C Hpc = Mat8C::Zero();
|
||||||
|
Vec8 bp = Vec8::Zero();
|
||||||
|
|
||||||
|
for(int tid2=0;tid2 < toAggregate;tid2++)
|
||||||
|
{
|
||||||
|
accE[tid2][ijIdx].finish();
|
||||||
|
accEB[tid2][ijIdx].finish();
|
||||||
|
Hpc += accE[tid2][ijIdx].A1m.cast<double>();
|
||||||
|
bp += accEB[tid2][ijIdx].A1m.cast<double>();
|
||||||
|
}
|
||||||
|
|
||||||
|
H[tid].block<8,CPARS>(iIdx,0) += EF->adHost[ijIdx] * Hpc;
|
||||||
|
H[tid].block<8,CPARS>(jIdx,0) += EF->adTarget[ijIdx] * Hpc;
|
||||||
|
b[tid].segment<8>(iIdx) += EF->adHost[ijIdx] * bp;
|
||||||
|
b[tid].segment<8>(jIdx) += EF->adTarget[ijIdx] * bp;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for(int k=0;k<nf;k++)
|
||||||
|
{
|
||||||
|
int kIdx = CPARS+k*8;
|
||||||
|
int ijkIdx = ijIdx + k*nframes2;
|
||||||
|
int ikIdx = i+nf*k;
|
||||||
|
|
||||||
|
Mat88 accDM = Mat88::Zero();
|
||||||
|
|
||||||
|
for(int tid2=0;tid2 < toAggregate;tid2++)
|
||||||
|
{
|
||||||
|
accD[tid2][ijkIdx].finish();
|
||||||
|
if(accD[tid2][ijkIdx].num == 0) continue;
|
||||||
|
accDM += accD[tid2][ijkIdx].A1m.cast<double>();
|
||||||
|
}
|
||||||
|
|
||||||
|
H[tid].block<8,8>(iIdx, iIdx) += EF->adHost[ijIdx] * accDM * EF->adHost[ikIdx].transpose();
|
||||||
|
H[tid].block<8,8>(jIdx, kIdx) += EF->adTarget[ijIdx] * accDM * EF->adTarget[ikIdx].transpose();
|
||||||
|
H[tid].block<8,8>(jIdx, iIdx) += EF->adTarget[ijIdx] * accDM * EF->adHost[ikIdx].transpose();
|
||||||
|
H[tid].block<8,8>(iIdx, kIdx) += EF->adHost[ijIdx] * accDM * EF->adTarget[ikIdx].transpose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(min==0)
|
||||||
|
{
|
||||||
|
for(int tid2=0;tid2 < toAggregate;tid2++)
|
||||||
|
{
|
||||||
|
accHcc[tid2].finish();
|
||||||
|
accbc[tid2].finish();
|
||||||
|
H[tid].topLeftCorner<CPARS,CPARS>() += accHcc[tid2].A1m.cast<double>();
|
||||||
|
b[tid].head<CPARS>() += accbc[tid2].A1m.cast<double>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// // ----- new: copy transposed parts for calibration only.
|
||||||
|
// for(int h=0;h<nf;h++)
|
||||||
|
// {
|
||||||
|
// int hIdx = 4+h*8;
|
||||||
|
// H.block<4,8>(0,hIdx).noalias() = H.block<8,4>(hIdx,0).transpose();
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
void AccumulatedSCHessianSSE::stitchDouble(MatXX &H, VecX &b, EnergyFunctional const * const EF, int tid)
|
||||||
|
{
|
||||||
|
|
||||||
|
int nf = nframes[0];
|
||||||
|
int nframes2 = nf*nf;
|
||||||
|
|
||||||
|
H = MatXX::Zero(nf*8+CPARS, nf*8+CPARS);
|
||||||
|
b = VecX::Zero(nf*8+CPARS);
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<nf;i++)
|
||||||
|
for(int j=0;j<nf;j++)
|
||||||
|
{
|
||||||
|
int iIdx = CPARS+i*8;
|
||||||
|
int jIdx = CPARS+j*8;
|
||||||
|
int ijIdx = i+nf*j;
|
||||||
|
|
||||||
|
accE[tid][ijIdx].finish();
|
||||||
|
accEB[tid][ijIdx].finish();
|
||||||
|
|
||||||
|
Mat8C accEM = accE[tid][ijIdx].A1m.cast<double>();
|
||||||
|
Vec8 accEBV = accEB[tid][ijIdx].A1m.cast<double>();
|
||||||
|
|
||||||
|
H.block<8,CPARS>(iIdx,0) += EF->adHost[ijIdx] * accEM;
|
||||||
|
H.block<8,CPARS>(jIdx,0) += EF->adTarget[ijIdx] * accEM;
|
||||||
|
|
||||||
|
b.segment<8>(iIdx) += EF->adHost[ijIdx] * accEBV;
|
||||||
|
b.segment<8>(jIdx) += EF->adTarget[ijIdx] * accEBV;
|
||||||
|
|
||||||
|
for(int k=0;k<nf;k++)
|
||||||
|
{
|
||||||
|
int kIdx = CPARS+k*8;
|
||||||
|
int ijkIdx = ijIdx + k*nframes2;
|
||||||
|
int ikIdx = i+nf*k;
|
||||||
|
|
||||||
|
accD[tid][ijkIdx].finish();
|
||||||
|
if(accD[tid][ijkIdx].num == 0) continue;
|
||||||
|
Mat88 accDM = accD[tid][ijkIdx].A1m.cast<double>();
|
||||||
|
|
||||||
|
H.block<8,8>(iIdx, iIdx) += EF->adHost[ijIdx] * accDM * EF->adHost[ikIdx].transpose();
|
||||||
|
|
||||||
|
H.block<8,8>(jIdx, kIdx) += EF->adTarget[ijIdx] * accDM * EF->adTarget[ikIdx].transpose();
|
||||||
|
|
||||||
|
H.block<8,8>(jIdx, iIdx) += EF->adTarget[ijIdx] * accDM * EF->adHost[ikIdx].transpose();
|
||||||
|
|
||||||
|
H.block<8,8>(iIdx, kIdx) += EF->adHost[ijIdx] * accDM * EF->adTarget[ikIdx].transpose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
accHcc[tid].finish();
|
||||||
|
accbc[tid].finish();
|
||||||
|
H.topLeftCorner<CPARS,CPARS>() = accHcc[tid].A1m.cast<double>();
|
||||||
|
b.head<CPARS>() = accbc[tid].A1m.cast<double>();
|
||||||
|
|
||||||
|
// ----- new: copy transposed parts for calibration only.
|
||||||
|
for(int h=0;h<nf;h++)
|
||||||
|
{
|
||||||
|
int hIdx = CPARS+h*8;
|
||||||
|
H.block<CPARS,8>(0,hIdx).noalias() = H.block<8,CPARS>(hIdx,0).transpose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
159
src/OptimizationBackend/AccumulatedSCHessian.h
Normal file
159
src/OptimizationBackend/AccumulatedSCHessian.h
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "util/IndexThreadReduce.h"
|
||||||
|
#include "OptimizationBackend/MatrixAccumulators.h"
|
||||||
|
#include "vector"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
class EFPoint;
|
||||||
|
class EnergyFunctional;
|
||||||
|
|
||||||
|
|
||||||
|
class AccumulatedSCHessianSSE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
inline AccumulatedSCHessianSSE()
|
||||||
|
{
|
||||||
|
for(int i=0;i<NUM_THREADS;i++)
|
||||||
|
{
|
||||||
|
accE[i]=0;
|
||||||
|
accEB[i]=0;
|
||||||
|
accD[i]=0;
|
||||||
|
nframes[i]=0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
inline ~AccumulatedSCHessianSSE()
|
||||||
|
{
|
||||||
|
for(int i=0;i<NUM_THREADS;i++)
|
||||||
|
{
|
||||||
|
if(accE[i] != 0) delete[] accE[i];
|
||||||
|
if(accEB[i] != 0) delete[] accEB[i];
|
||||||
|
if(accD[i] != 0) delete[] accD[i];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void setZero(int n, int min=0, int max=1, Vec10* stats=0, int tid=0)
|
||||||
|
{
|
||||||
|
if(n != nframes[tid])
|
||||||
|
{
|
||||||
|
if(accE[tid] != 0) delete[] accE[tid];
|
||||||
|
if(accEB[tid] != 0) delete[] accEB[tid];
|
||||||
|
if(accD[tid] != 0) delete[] accD[tid];
|
||||||
|
accE[tid] = new AccumulatorXX<8,CPARS>[n*n];
|
||||||
|
accEB[tid] = new AccumulatorX<8>[n*n];
|
||||||
|
accD[tid] = new AccumulatorXX<8,8>[n*n*n];
|
||||||
|
}
|
||||||
|
accbc[tid].initialize();
|
||||||
|
accHcc[tid].initialize();
|
||||||
|
|
||||||
|
for(int i=0;i<n*n;i++)
|
||||||
|
{
|
||||||
|
accE[tid][i].initialize();
|
||||||
|
accEB[tid][i].initialize();
|
||||||
|
|
||||||
|
for(int j=0;j<n;j++)
|
||||||
|
accD[tid][i*n+j].initialize();
|
||||||
|
}
|
||||||
|
nframes[tid]=n;
|
||||||
|
}
|
||||||
|
void stitchDouble(MatXX &H_sc, VecX &b_sc, EnergyFunctional const * const EF, int tid=0);
|
||||||
|
void addPoint(EFPoint* p, bool shiftPriorToZero, int tid=0);
|
||||||
|
|
||||||
|
|
||||||
|
void stitchDoubleMT(IndexThreadReduce<Vec10>* red, MatXX &H, VecX &b, EnergyFunctional const * const EF, bool MT)
|
||||||
|
{
|
||||||
|
// sum up, splitting by bock in square.
|
||||||
|
if(MT)
|
||||||
|
{
|
||||||
|
MatXX Hs[NUM_THREADS];
|
||||||
|
VecX bs[NUM_THREADS];
|
||||||
|
for(int i=0;i<NUM_THREADS;i++)
|
||||||
|
{
|
||||||
|
assert(nframes[0] == nframes[i]);
|
||||||
|
Hs[i] = MatXX::Zero(nframes[0]*8+CPARS, nframes[0]*8+CPARS);
|
||||||
|
bs[i] = VecX::Zero(nframes[0]*8+CPARS);
|
||||||
|
}
|
||||||
|
|
||||||
|
red->reduce(boost::bind(&AccumulatedSCHessianSSE::stitchDoubleInternal,
|
||||||
|
this,Hs, bs, EF, _1, _2, _3, _4), 0, nframes[0]*nframes[0], 0);
|
||||||
|
|
||||||
|
// sum up results
|
||||||
|
H = Hs[0];
|
||||||
|
b = bs[0];
|
||||||
|
|
||||||
|
for(int i=1;i<NUM_THREADS;i++)
|
||||||
|
{
|
||||||
|
H.noalias() += Hs[i];
|
||||||
|
b.noalias() += bs[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
H = MatXX::Zero(nframes[0]*8+CPARS, nframes[0]*8+CPARS);
|
||||||
|
b = VecX::Zero(nframes[0]*8+CPARS);
|
||||||
|
stitchDoubleInternal(&H, &b, EF,0,nframes[0]*nframes[0],0,-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// make diagonal by copying over parts.
|
||||||
|
for(int h=0;h<nframes[0];h++)
|
||||||
|
{
|
||||||
|
int hIdx = CPARS+h*8;
|
||||||
|
H.block<CPARS,8>(0,hIdx).noalias() = H.block<8,CPARS>(hIdx,0).transpose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AccumulatorXX<8,CPARS>* accE[NUM_THREADS];
|
||||||
|
AccumulatorX<8>* accEB[NUM_THREADS];
|
||||||
|
AccumulatorXX<8,8>* accD[NUM_THREADS];
|
||||||
|
AccumulatorXX<CPARS,CPARS> accHcc[NUM_THREADS];
|
||||||
|
AccumulatorX<CPARS> accbc[NUM_THREADS];
|
||||||
|
int nframes[NUM_THREADS];
|
||||||
|
|
||||||
|
|
||||||
|
void addPointsInternal(
|
||||||
|
std::vector<EFPoint*>* points, bool shiftPriorToZero,
|
||||||
|
int min=0, int max=1, Vec10* stats=0, int tid=0)
|
||||||
|
{
|
||||||
|
for(int i=min;i<max;i++) addPoint((*points)[i],shiftPriorToZero,tid);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void stitchDoubleInternal(
|
||||||
|
MatXX* H, VecX* b, EnergyFunctional const * const EF,
|
||||||
|
int min, int max, Vec10* stats, int tid);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
309
src/OptimizationBackend/AccumulatedTopHessian.cpp
Normal file
309
src/OptimizationBackend/AccumulatedTopHessian.cpp
Normal file
@@ -0,0 +1,309 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "OptimizationBackend/AccumulatedTopHessian.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctional.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctionalStructs.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#if !defined(__SSE3__) && !defined(__SSE2__) && !defined(__SSE1__)
|
||||||
|
#include "SSE2NEON.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<int mode>
|
||||||
|
void AccumulatedTopHessianSSE::addPoint(EFPoint* p, EnergyFunctional const * const ef, int tid) // 0 = active, 1 = linearized, 2=marginalize
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
assert(mode==0 || mode==1 || mode==2);
|
||||||
|
|
||||||
|
VecCf dc = ef->cDeltaF;
|
||||||
|
float dd = p->deltaF;
|
||||||
|
|
||||||
|
float bd_acc=0;
|
||||||
|
float Hdd_acc=0;
|
||||||
|
VecCf Hcd_acc = VecCf::Zero();
|
||||||
|
|
||||||
|
for(EFResidual* r : p->residualsAll)
|
||||||
|
{
|
||||||
|
if(mode==0)
|
||||||
|
{
|
||||||
|
if(r->isLinearized || !r->isActive()) continue;
|
||||||
|
}
|
||||||
|
if(mode==1)
|
||||||
|
{
|
||||||
|
if(!r->isLinearized || !r->isActive()) continue;
|
||||||
|
}
|
||||||
|
if(mode==2)
|
||||||
|
{
|
||||||
|
if(!r->isActive()) continue;
|
||||||
|
assert(r->isLinearized);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
RawResidualJacobian* rJ = r->J;
|
||||||
|
int htIDX = r->hostIDX + r->targetIDX*nframes[tid];
|
||||||
|
Mat18f dp = ef->adHTdeltaF[htIDX];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VecNRf resApprox;
|
||||||
|
if(mode==0)
|
||||||
|
resApprox = rJ->resF;
|
||||||
|
if(mode==2)
|
||||||
|
resApprox = r->res_toZeroF;
|
||||||
|
if(mode==1)
|
||||||
|
{
|
||||||
|
// compute Jp*delta
|
||||||
|
__m128 Jp_delta_x = _mm_set1_ps(rJ->Jpdxi[0].dot(dp.head<6>())+rJ->Jpdc[0].dot(dc)+rJ->Jpdd[0]*dd);
|
||||||
|
__m128 Jp_delta_y = _mm_set1_ps(rJ->Jpdxi[1].dot(dp.head<6>())+rJ->Jpdc[1].dot(dc)+rJ->Jpdd[1]*dd);
|
||||||
|
__m128 delta_a = _mm_set1_ps((float)(dp[6]));
|
||||||
|
__m128 delta_b = _mm_set1_ps((float)(dp[7]));
|
||||||
|
|
||||||
|
for(int i=0;i<patternNum;i+=4)
|
||||||
|
{
|
||||||
|
// PATTERN: rtz = resF - [JI*Jp Ja]*delta.
|
||||||
|
__m128 rtz = _mm_load_ps(((float*)&r->res_toZeroF)+i);
|
||||||
|
rtz = _mm_add_ps(rtz,_mm_mul_ps(_mm_load_ps(((float*)(rJ->JIdx))+i),Jp_delta_x));
|
||||||
|
rtz = _mm_add_ps(rtz,_mm_mul_ps(_mm_load_ps(((float*)(rJ->JIdx+1))+i),Jp_delta_y));
|
||||||
|
rtz = _mm_add_ps(rtz,_mm_mul_ps(_mm_load_ps(((float*)(rJ->JabF))+i),delta_a));
|
||||||
|
rtz = _mm_add_ps(rtz,_mm_mul_ps(_mm_load_ps(((float*)(rJ->JabF+1))+i),delta_b));
|
||||||
|
_mm_store_ps(((float*)&resApprox)+i, rtz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// need to compute JI^T * r, and Jab^T * r. (both are 2-vectors).
|
||||||
|
Vec2f JI_r(0,0);
|
||||||
|
Vec2f Jab_r(0,0);
|
||||||
|
float rr=0;
|
||||||
|
for(int i=0;i<patternNum;i++)
|
||||||
|
{
|
||||||
|
JI_r[0] += resApprox[i] *rJ->JIdx[0][i];
|
||||||
|
JI_r[1] += resApprox[i] *rJ->JIdx[1][i];
|
||||||
|
Jab_r[0] += resApprox[i] *rJ->JabF[0][i];
|
||||||
|
Jab_r[1] += resApprox[i] *rJ->JabF[1][i];
|
||||||
|
rr += resApprox[i]*resApprox[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
acc[tid][htIDX].update(
|
||||||
|
rJ->Jpdc[0].data(), rJ->Jpdxi[0].data(),
|
||||||
|
rJ->Jpdc[1].data(), rJ->Jpdxi[1].data(),
|
||||||
|
rJ->JIdx2(0,0),rJ->JIdx2(0,1),rJ->JIdx2(1,1));
|
||||||
|
|
||||||
|
acc[tid][htIDX].updateBotRight(
|
||||||
|
rJ->Jab2(0,0), rJ->Jab2(0,1), Jab_r[0],
|
||||||
|
rJ->Jab2(1,1), Jab_r[1],rr);
|
||||||
|
|
||||||
|
acc[tid][htIDX].updateTopRight(
|
||||||
|
rJ->Jpdc[0].data(), rJ->Jpdxi[0].data(),
|
||||||
|
rJ->Jpdc[1].data(), rJ->Jpdxi[1].data(),
|
||||||
|
rJ->JabJIdx(0,0), rJ->JabJIdx(0,1),
|
||||||
|
rJ->JabJIdx(1,0), rJ->JabJIdx(1,1),
|
||||||
|
JI_r[0], JI_r[1]);
|
||||||
|
|
||||||
|
|
||||||
|
Vec2f Ji2_Jpdd = rJ->JIdx2 * rJ->Jpdd;
|
||||||
|
bd_acc += JI_r[0]*rJ->Jpdd[0] + JI_r[1]*rJ->Jpdd[1];
|
||||||
|
Hdd_acc += Ji2_Jpdd.dot(rJ->Jpdd);
|
||||||
|
Hcd_acc += rJ->Jpdc[0]*Ji2_Jpdd[0] + rJ->Jpdc[1]*Ji2_Jpdd[1];
|
||||||
|
|
||||||
|
nres[tid]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mode==0)
|
||||||
|
{
|
||||||
|
p->Hdd_accAF = Hdd_acc;
|
||||||
|
p->bd_accAF = bd_acc;
|
||||||
|
p->Hcd_accAF = Hcd_acc;
|
||||||
|
}
|
||||||
|
if(mode==1 || mode==2)
|
||||||
|
{
|
||||||
|
p->Hdd_accLF = Hdd_acc;
|
||||||
|
p->bd_accLF = bd_acc;
|
||||||
|
p->Hcd_accLF = Hcd_acc;
|
||||||
|
}
|
||||||
|
if(mode==2)
|
||||||
|
{
|
||||||
|
p->Hcd_accAF.setZero();
|
||||||
|
p->Hdd_accAF = 0;
|
||||||
|
p->bd_accAF = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
template void AccumulatedTopHessianSSE::addPoint<0>(EFPoint* p, EnergyFunctional const * const ef, int tid);
|
||||||
|
template void AccumulatedTopHessianSSE::addPoint<1>(EFPoint* p, EnergyFunctional const * const ef, int tid);
|
||||||
|
template void AccumulatedTopHessianSSE::addPoint<2>(EFPoint* p, EnergyFunctional const * const ef, int tid);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void AccumulatedTopHessianSSE::stitchDouble(MatXX &H, VecX &b, EnergyFunctional const * const EF, bool usePrior, bool useDelta, int tid)
|
||||||
|
{
|
||||||
|
H = MatXX::Zero(nframes[tid]*8+CPARS, nframes[tid]*8+CPARS);
|
||||||
|
b = VecX::Zero(nframes[tid]*8+CPARS);
|
||||||
|
|
||||||
|
|
||||||
|
for(int h=0;h<nframes[tid];h++)
|
||||||
|
for(int t=0;t<nframes[tid];t++)
|
||||||
|
{
|
||||||
|
int hIdx = CPARS+h*8;
|
||||||
|
int tIdx = CPARS+t*8;
|
||||||
|
int aidx = h+nframes[tid]*t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
acc[tid][aidx].finish();
|
||||||
|
if(acc[tid][aidx].num==0) continue;
|
||||||
|
|
||||||
|
MatPCPC accH = acc[tid][aidx].H.cast<double>();
|
||||||
|
|
||||||
|
|
||||||
|
H.block<8,8>(hIdx, hIdx).noalias() += EF->adHost[aidx] * accH.block<8,8>(CPARS,CPARS) * EF->adHost[aidx].transpose();
|
||||||
|
|
||||||
|
H.block<8,8>(tIdx, tIdx).noalias() += EF->adTarget[aidx] * accH.block<8,8>(CPARS,CPARS) * EF->adTarget[aidx].transpose();
|
||||||
|
|
||||||
|
H.block<8,8>(hIdx, tIdx).noalias() += EF->adHost[aidx] * accH.block<8,8>(CPARS,CPARS) * EF->adTarget[aidx].transpose();
|
||||||
|
|
||||||
|
H.block<8,CPARS>(hIdx,0).noalias() += EF->adHost[aidx] * accH.block<8,CPARS>(CPARS,0);
|
||||||
|
|
||||||
|
H.block<8,CPARS>(tIdx,0).noalias() += EF->adTarget[aidx] * accH.block<8,CPARS>(CPARS,0);
|
||||||
|
|
||||||
|
H.topLeftCorner<CPARS,CPARS>().noalias() += accH.block<CPARS,CPARS>(0,0);
|
||||||
|
|
||||||
|
b.segment<8>(hIdx).noalias() += EF->adHost[aidx] * accH.block<8,1>(CPARS,8+CPARS);
|
||||||
|
|
||||||
|
b.segment<8>(tIdx).noalias() += EF->adTarget[aidx] * accH.block<8,1>(CPARS,8+CPARS);
|
||||||
|
|
||||||
|
b.head<CPARS>().noalias() += accH.block<CPARS,1>(0,8+CPARS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----- new: copy transposed parts.
|
||||||
|
for(int h=0;h<nframes[tid];h++)
|
||||||
|
{
|
||||||
|
int hIdx = CPARS+h*8;
|
||||||
|
H.block<CPARS,8>(0,hIdx).noalias() = H.block<8,CPARS>(hIdx,0).transpose();
|
||||||
|
|
||||||
|
for(int t=h+1;t<nframes[tid];t++)
|
||||||
|
{
|
||||||
|
int tIdx = CPARS+t*8;
|
||||||
|
H.block<8,8>(hIdx, tIdx).noalias() += H.block<8,8>(tIdx, hIdx).transpose();
|
||||||
|
H.block<8,8>(tIdx, hIdx).noalias() = H.block<8,8>(hIdx, tIdx).transpose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(usePrior)
|
||||||
|
{
|
||||||
|
assert(useDelta);
|
||||||
|
H.diagonal().head<CPARS>() += EF->cPrior;
|
||||||
|
b.head<CPARS>() += EF->cPrior.cwiseProduct(EF->cDeltaF.cast<double>());
|
||||||
|
for(int h=0;h<nframes[tid];h++)
|
||||||
|
{
|
||||||
|
H.diagonal().segment<8>(CPARS+h*8) += EF->frames[h]->prior;
|
||||||
|
b.segment<8>(CPARS+h*8) += EF->frames[h]->prior.cwiseProduct(EF->frames[h]->delta_prior);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void AccumulatedTopHessianSSE::stitchDoubleInternal(
|
||||||
|
MatXX* H, VecX* b, EnergyFunctional const * const EF, bool usePrior,
|
||||||
|
int min, int max, Vec10* stats, int tid)
|
||||||
|
{
|
||||||
|
int toAggregate = NUM_THREADS;
|
||||||
|
if(tid == -1) { toAggregate = 1; tid = 0; } // special case: if we dont do multithreading, dont aggregate.
|
||||||
|
if(min==max) return;
|
||||||
|
|
||||||
|
|
||||||
|
for(int k=min;k<max;k++)
|
||||||
|
{
|
||||||
|
int h = k%nframes[0];
|
||||||
|
int t = k/nframes[0];
|
||||||
|
|
||||||
|
int hIdx = CPARS+h*8;
|
||||||
|
int tIdx = CPARS+t*8;
|
||||||
|
int aidx = h+nframes[0]*t;
|
||||||
|
|
||||||
|
assert(aidx == k);
|
||||||
|
|
||||||
|
MatPCPC accH = MatPCPC::Zero();
|
||||||
|
|
||||||
|
for(int tid2=0;tid2 < toAggregate;tid2++)
|
||||||
|
{
|
||||||
|
acc[tid2][aidx].finish();
|
||||||
|
if(acc[tid2][aidx].num==0) continue;
|
||||||
|
accH += acc[tid2][aidx].H.cast<double>();
|
||||||
|
}
|
||||||
|
|
||||||
|
H[tid].block<8,8>(hIdx, hIdx).noalias() += EF->adHost[aidx] * accH.block<8,8>(CPARS,CPARS) * EF->adHost[aidx].transpose();
|
||||||
|
|
||||||
|
H[tid].block<8,8>(tIdx, tIdx).noalias() += EF->adTarget[aidx] * accH.block<8,8>(CPARS,CPARS) * EF->adTarget[aidx].transpose();
|
||||||
|
|
||||||
|
H[tid].block<8,8>(hIdx, tIdx).noalias() += EF->adHost[aidx] * accH.block<8,8>(CPARS,CPARS) * EF->adTarget[aidx].transpose();
|
||||||
|
|
||||||
|
H[tid].block<8,CPARS>(hIdx,0).noalias() += EF->adHost[aidx] * accH.block<8,CPARS>(CPARS,0);
|
||||||
|
|
||||||
|
H[tid].block<8,CPARS>(tIdx,0).noalias() += EF->adTarget[aidx] * accH.block<8,CPARS>(CPARS,0);
|
||||||
|
|
||||||
|
H[tid].topLeftCorner<CPARS,CPARS>().noalias() += accH.block<CPARS,CPARS>(0,0);
|
||||||
|
|
||||||
|
b[tid].segment<8>(hIdx).noalias() += EF->adHost[aidx] * accH.block<8,1>(CPARS,CPARS+8);
|
||||||
|
|
||||||
|
b[tid].segment<8>(tIdx).noalias() += EF->adTarget[aidx] * accH.block<8,1>(CPARS,CPARS+8);
|
||||||
|
|
||||||
|
b[tid].head<CPARS>().noalias() += accH.block<CPARS,1>(0,CPARS+8);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// only do this on one thread.
|
||||||
|
if(min==0 && usePrior)
|
||||||
|
{
|
||||||
|
H[tid].diagonal().head<CPARS>() += EF->cPrior;
|
||||||
|
b[tid].head<CPARS>() += EF->cPrior.cwiseProduct(EF->cDeltaF.cast<double>());
|
||||||
|
for(int h=0;h<nframes[tid];h++)
|
||||||
|
{
|
||||||
|
H[tid].diagonal().segment<8>(CPARS+h*8) += EF->frames[h]->prior;
|
||||||
|
b[tid].segment<8>(CPARS+h*8) += EF->frames[h]->prior.cwiseProduct(EF->frames[h]->delta_prior);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
168
src/OptimizationBackend/AccumulatedTopHessian.h
Normal file
168
src/OptimizationBackend/AccumulatedTopHessian.h
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "OptimizationBackend/MatrixAccumulators.h"
|
||||||
|
#include "vector"
|
||||||
|
#include <math.h>
|
||||||
|
#include "util/IndexThreadReduce.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
class EFPoint;
|
||||||
|
class EnergyFunctional;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class AccumulatedTopHessianSSE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
inline AccumulatedTopHessianSSE()
|
||||||
|
{
|
||||||
|
for(int tid=0;tid < NUM_THREADS; tid++)
|
||||||
|
{
|
||||||
|
nres[tid]=0;
|
||||||
|
acc[tid]=0;
|
||||||
|
nframes[tid]=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
inline ~AccumulatedTopHessianSSE()
|
||||||
|
{
|
||||||
|
for(int tid=0;tid < NUM_THREADS; tid++)
|
||||||
|
{
|
||||||
|
if(acc[tid] != 0) delete[] acc[tid];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void setZero(int nFrames, int min=0, int max=1, Vec10* stats=0, int tid=0)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(nFrames != nframes[tid])
|
||||||
|
{
|
||||||
|
if(acc[tid] != 0) delete[] acc[tid];
|
||||||
|
#if USE_XI_MODEL
|
||||||
|
acc[tid] = new Accumulator14[nFrames*nFrames];
|
||||||
|
#else
|
||||||
|
acc[tid] = new AccumulatorApprox[nFrames*nFrames];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=0;i<nFrames*nFrames;i++)
|
||||||
|
{ acc[tid][i].initialize(); }
|
||||||
|
|
||||||
|
nframes[tid]=nFrames;
|
||||||
|
nres[tid]=0;
|
||||||
|
|
||||||
|
}
|
||||||
|
void stitchDouble(MatXX &H, VecX &b, EnergyFunctional const * const EF, bool usePrior, bool useDelta, int tid=0);
|
||||||
|
|
||||||
|
template<int mode> void addPoint(EFPoint* p, EnergyFunctional const * const ef, int tid=0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void stitchDoubleMT(IndexThreadReduce<Vec10>* red, MatXX &H, VecX &b, EnergyFunctional const * const EF, bool usePrior, bool MT)
|
||||||
|
{
|
||||||
|
// sum up, splitting by bock in square.
|
||||||
|
if(MT)
|
||||||
|
{
|
||||||
|
MatXX Hs[NUM_THREADS];
|
||||||
|
VecX bs[NUM_THREADS];
|
||||||
|
for(int i=0;i<NUM_THREADS;i++)
|
||||||
|
{
|
||||||
|
assert(nframes[0] == nframes[i]);
|
||||||
|
Hs[i] = MatXX::Zero(nframes[0]*8+CPARS, nframes[0]*8+CPARS);
|
||||||
|
bs[i] = VecX::Zero(nframes[0]*8+CPARS);
|
||||||
|
}
|
||||||
|
|
||||||
|
red->reduce(boost::bind(&AccumulatedTopHessianSSE::stitchDoubleInternal,
|
||||||
|
this,Hs, bs, EF, usePrior, _1, _2, _3, _4), 0, nframes[0]*nframes[0], 0);
|
||||||
|
|
||||||
|
// sum up results
|
||||||
|
H = Hs[0];
|
||||||
|
b = bs[0];
|
||||||
|
|
||||||
|
for(int i=1;i<NUM_THREADS;i++)
|
||||||
|
{
|
||||||
|
H.noalias() += Hs[i];
|
||||||
|
b.noalias() += bs[i];
|
||||||
|
nres[0] += nres[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
H = MatXX::Zero(nframes[0]*8+CPARS, nframes[0]*8+CPARS);
|
||||||
|
b = VecX::Zero(nframes[0]*8+CPARS);
|
||||||
|
stitchDoubleInternal(&H, &b, EF, usePrior,0,nframes[0]*nframes[0],0,-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// make diagonal by copying over parts.
|
||||||
|
for(int h=0;h<nframes[0];h++)
|
||||||
|
{
|
||||||
|
int hIdx = CPARS+h*8;
|
||||||
|
H.block<CPARS,8>(0,hIdx).noalias() = H.block<8,CPARS>(hIdx,0).transpose();
|
||||||
|
|
||||||
|
for(int t=h+1;t<nframes[0];t++)
|
||||||
|
{
|
||||||
|
int tIdx = CPARS+t*8;
|
||||||
|
H.block<8,8>(hIdx, tIdx).noalias() += H.block<8,8>(tIdx, hIdx).transpose();
|
||||||
|
H.block<8,8>(tIdx, hIdx).noalias() = H.block<8,8>(hIdx, tIdx).transpose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int nframes[NUM_THREADS];
|
||||||
|
|
||||||
|
EIGEN_ALIGN16 AccumulatorApprox* acc[NUM_THREADS];
|
||||||
|
|
||||||
|
|
||||||
|
int nres[NUM_THREADS];
|
||||||
|
|
||||||
|
|
||||||
|
template<int mode> void addPointsInternal(
|
||||||
|
std::vector<EFPoint*>* points, EnergyFunctional const * const ef,
|
||||||
|
int min=0, int max=1, Vec10* stats=0, int tid=0)
|
||||||
|
{
|
||||||
|
for(int i=min;i<max;i++) addPoint<mode>((*points)[i],ef,tid);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void stitchDoubleInternal(
|
||||||
|
MatXX* H, VecX* b, EnergyFunctional const * const EF, bool usePrior,
|
||||||
|
int min, int max, Vec10* stats, int tid);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
946
src/OptimizationBackend/EnergyFunctional.cpp
Normal file
946
src/OptimizationBackend/EnergyFunctional.cpp
Normal file
@@ -0,0 +1,946 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "OptimizationBackend/EnergyFunctional.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctionalStructs.h"
|
||||||
|
#include "FullSystem/FullSystem.h"
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
#include "FullSystem/Residuals.h"
|
||||||
|
#include "OptimizationBackend/AccumulatedSCHessian.h"
|
||||||
|
#include "OptimizationBackend/AccumulatedTopHessian.h"
|
||||||
|
|
||||||
|
#if !defined(__SSE3__) && !defined(__SSE2__) && !defined(__SSE1__)
|
||||||
|
#include "SSE2NEON.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
bool EFAdjointsValid = false;
|
||||||
|
bool EFIndicesValid = false;
|
||||||
|
bool EFDeltaValid = false;
|
||||||
|
|
||||||
|
|
||||||
|
void EnergyFunctional::setAdjointsF(CalibHessian* Hcalib)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(adHost != 0) delete[] adHost;
|
||||||
|
if(adTarget != 0) delete[] adTarget;
|
||||||
|
adHost = new Mat88[nFrames*nFrames];
|
||||||
|
adTarget = new Mat88[nFrames*nFrames];
|
||||||
|
|
||||||
|
for(int h=0;h<nFrames;h++)
|
||||||
|
for(int t=0;t<nFrames;t++)
|
||||||
|
{
|
||||||
|
FrameHessian* host = frames[h]->data;
|
||||||
|
FrameHessian* target = frames[t]->data;
|
||||||
|
|
||||||
|
SE3 hostToTarget = target->get_worldToCam_evalPT() * host->get_worldToCam_evalPT().inverse();
|
||||||
|
|
||||||
|
Mat88 AH = Mat88::Identity();
|
||||||
|
Mat88 AT = Mat88::Identity();
|
||||||
|
|
||||||
|
AH.topLeftCorner<6,6>() = -hostToTarget.Adj().transpose();
|
||||||
|
AT.topLeftCorner<6,6>() = Mat66::Identity();
|
||||||
|
|
||||||
|
|
||||||
|
Vec2f affLL = AffLight::fromToVecExposure(host->ab_exposure, target->ab_exposure, host->aff_g2l_0(), target->aff_g2l_0()).cast<float>();
|
||||||
|
AT(6,6) = -affLL[0];
|
||||||
|
AH(6,6) = affLL[0];
|
||||||
|
AT(7,7) = -1;
|
||||||
|
AH(7,7) = affLL[0];
|
||||||
|
|
||||||
|
AH.block<3,8>(0,0) *= SCALE_XI_TRANS;
|
||||||
|
AH.block<3,8>(3,0) *= SCALE_XI_ROT;
|
||||||
|
AH.block<1,8>(6,0) *= SCALE_A;
|
||||||
|
AH.block<1,8>(7,0) *= SCALE_B;
|
||||||
|
AT.block<3,8>(0,0) *= SCALE_XI_TRANS;
|
||||||
|
AT.block<3,8>(3,0) *= SCALE_XI_ROT;
|
||||||
|
AT.block<1,8>(6,0) *= SCALE_A;
|
||||||
|
AT.block<1,8>(7,0) *= SCALE_B;
|
||||||
|
|
||||||
|
adHost[h+t*nFrames] = AH;
|
||||||
|
adTarget[h+t*nFrames] = AT;
|
||||||
|
}
|
||||||
|
cPrior = VecC::Constant(setting_initialCalibHessian);
|
||||||
|
|
||||||
|
|
||||||
|
if(adHostF != 0) delete[] adHostF;
|
||||||
|
if(adTargetF != 0) delete[] adTargetF;
|
||||||
|
adHostF = new Mat88f[nFrames*nFrames];
|
||||||
|
adTargetF = new Mat88f[nFrames*nFrames];
|
||||||
|
|
||||||
|
for(int h=0;h<nFrames;h++)
|
||||||
|
for(int t=0;t<nFrames;t++)
|
||||||
|
{
|
||||||
|
adHostF[h+t*nFrames] = adHost[h+t*nFrames].cast<float>();
|
||||||
|
adTargetF[h+t*nFrames] = adTarget[h+t*nFrames].cast<float>();
|
||||||
|
}
|
||||||
|
|
||||||
|
cPriorF = cPrior.cast<float>();
|
||||||
|
|
||||||
|
|
||||||
|
EFAdjointsValid = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EnergyFunctional::EnergyFunctional()
|
||||||
|
{
|
||||||
|
adHost=0;
|
||||||
|
adTarget=0;
|
||||||
|
|
||||||
|
|
||||||
|
red=0;
|
||||||
|
|
||||||
|
adHostF=0;
|
||||||
|
adTargetF=0;
|
||||||
|
adHTdeltaF=0;
|
||||||
|
|
||||||
|
nFrames = nResiduals = nPoints = 0;
|
||||||
|
|
||||||
|
HM = MatXX::Zero(CPARS,CPARS);
|
||||||
|
bM = VecX::Zero(CPARS);
|
||||||
|
|
||||||
|
|
||||||
|
accSSE_top_L = new AccumulatedTopHessianSSE();
|
||||||
|
accSSE_top_A = new AccumulatedTopHessianSSE();
|
||||||
|
accSSE_bot = new AccumulatedSCHessianSSE();
|
||||||
|
|
||||||
|
resInA = resInL = resInM = 0;
|
||||||
|
currentLambda=0;
|
||||||
|
}
|
||||||
|
EnergyFunctional::~EnergyFunctional()
|
||||||
|
{
|
||||||
|
for(EFFrame* f : frames)
|
||||||
|
{
|
||||||
|
for(EFPoint* p : f->points)
|
||||||
|
{
|
||||||
|
for(EFResidual* r : p->residualsAll)
|
||||||
|
{
|
||||||
|
r->data->efResidual=0;
|
||||||
|
delete r;
|
||||||
|
}
|
||||||
|
p->data->efPoint=0;
|
||||||
|
delete p;
|
||||||
|
}
|
||||||
|
f->data->efFrame=0;
|
||||||
|
delete f;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(adHost != 0) delete[] adHost;
|
||||||
|
if(adTarget != 0) delete[] adTarget;
|
||||||
|
|
||||||
|
|
||||||
|
if(adHostF != 0) delete[] adHostF;
|
||||||
|
if(adTargetF != 0) delete[] adTargetF;
|
||||||
|
if(adHTdeltaF != 0) delete[] adHTdeltaF;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
delete accSSE_top_L;
|
||||||
|
delete accSSE_top_A;
|
||||||
|
delete accSSE_bot;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void EnergyFunctional::setDeltaF(CalibHessian* HCalib)
|
||||||
|
{
|
||||||
|
if(adHTdeltaF != 0) delete[] adHTdeltaF;
|
||||||
|
adHTdeltaF = new Mat18f[nFrames*nFrames];
|
||||||
|
for(int h=0;h<nFrames;h++)
|
||||||
|
for(int t=0;t<nFrames;t++)
|
||||||
|
{
|
||||||
|
int idx = h+t*nFrames;
|
||||||
|
adHTdeltaF[idx] = frames[h]->data->get_state_minus_stateZero().head<8>().cast<float>().transpose() * adHostF[idx]
|
||||||
|
+frames[t]->data->get_state_minus_stateZero().head<8>().cast<float>().transpose() * adTargetF[idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
cDeltaF = HCalib->value_minus_value_zero.cast<float>();
|
||||||
|
for(EFFrame* f : frames)
|
||||||
|
{
|
||||||
|
f->delta = f->data->get_state_minus_stateZero().head<8>();
|
||||||
|
f->delta_prior = (f->data->get_state() - f->data->getPriorZero()).head<8>();
|
||||||
|
|
||||||
|
for(EFPoint* p : f->points)
|
||||||
|
p->deltaF = p->data->idepth-p->data->idepth_zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
EFDeltaValid = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// accumulates & shifts L.
|
||||||
|
void EnergyFunctional::accumulateAF_MT(MatXX &H, VecX &b, bool MT)
|
||||||
|
{
|
||||||
|
if(MT)
|
||||||
|
{
|
||||||
|
red->reduce(boost::bind(&AccumulatedTopHessianSSE::setZero, accSSE_top_A, nFrames, _1, _2, _3, _4), 0, 0, 0);
|
||||||
|
red->reduce(boost::bind(&AccumulatedTopHessianSSE::addPointsInternal<0>,
|
||||||
|
accSSE_top_A, &allPoints, this, _1, _2, _3, _4), 0, allPoints.size(), 50);
|
||||||
|
accSSE_top_A->stitchDoubleMT(red,H,b,this,false,true);
|
||||||
|
resInA = accSSE_top_A->nres[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
accSSE_top_A->setZero(nFrames);
|
||||||
|
for(EFFrame* f : frames)
|
||||||
|
for(EFPoint* p : f->points)
|
||||||
|
accSSE_top_A->addPoint<0>(p,this);
|
||||||
|
accSSE_top_A->stitchDoubleMT(red,H,b,this,false,false);
|
||||||
|
resInA = accSSE_top_A->nres[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// accumulates & shifts L.
|
||||||
|
void EnergyFunctional::accumulateLF_MT(MatXX &H, VecX &b, bool MT)
|
||||||
|
{
|
||||||
|
if(MT)
|
||||||
|
{
|
||||||
|
red->reduce(boost::bind(&AccumulatedTopHessianSSE::setZero, accSSE_top_L, nFrames, _1, _2, _3, _4), 0, 0, 0);
|
||||||
|
red->reduce(boost::bind(&AccumulatedTopHessianSSE::addPointsInternal<1>,
|
||||||
|
accSSE_top_L, &allPoints, this, _1, _2, _3, _4), 0, allPoints.size(), 50);
|
||||||
|
accSSE_top_L->stitchDoubleMT(red,H,b,this,true,true);
|
||||||
|
resInL = accSSE_top_L->nres[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
accSSE_top_L->setZero(nFrames);
|
||||||
|
for(EFFrame* f : frames)
|
||||||
|
for(EFPoint* p : f->points)
|
||||||
|
accSSE_top_L->addPoint<1>(p,this);
|
||||||
|
accSSE_top_L->stitchDoubleMT(red,H,b,this,true,false);
|
||||||
|
resInL = accSSE_top_L->nres[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void EnergyFunctional::accumulateSCF_MT(MatXX &H, VecX &b, bool MT)
|
||||||
|
{
|
||||||
|
if(MT)
|
||||||
|
{
|
||||||
|
red->reduce(boost::bind(&AccumulatedSCHessianSSE::setZero, accSSE_bot, nFrames, _1, _2, _3, _4), 0, 0, 0);
|
||||||
|
red->reduce(boost::bind(&AccumulatedSCHessianSSE::addPointsInternal,
|
||||||
|
accSSE_bot, &allPoints, true, _1, _2, _3, _4), 0, allPoints.size(), 50);
|
||||||
|
accSSE_bot->stitchDoubleMT(red,H,b,this,true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
accSSE_bot->setZero(nFrames);
|
||||||
|
for(EFFrame* f : frames)
|
||||||
|
for(EFPoint* p : f->points)
|
||||||
|
accSSE_bot->addPoint(p, true);
|
||||||
|
accSSE_bot->stitchDoubleMT(red, H, b,this,false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnergyFunctional::resubstituteF_MT(VecX x, CalibHessian* HCalib, bool MT)
|
||||||
|
{
|
||||||
|
assert(x.size() == CPARS+nFrames*8);
|
||||||
|
|
||||||
|
VecXf xF = x.cast<float>();
|
||||||
|
HCalib->step = - x.head<CPARS>();
|
||||||
|
|
||||||
|
Mat18f* xAd = new Mat18f[nFrames*nFrames];
|
||||||
|
VecCf cstep = xF.head<CPARS>();
|
||||||
|
for(EFFrame* h : frames)
|
||||||
|
{
|
||||||
|
h->data->step.head<8>() = - x.segment<8>(CPARS+8*h->idx);
|
||||||
|
h->data->step.tail<2>().setZero();
|
||||||
|
|
||||||
|
for(EFFrame* t : frames)
|
||||||
|
xAd[nFrames*h->idx + t->idx] = xF.segment<8>(CPARS+8*h->idx).transpose() * adHostF[h->idx+nFrames*t->idx]
|
||||||
|
+ xF.segment<8>(CPARS+8*t->idx).transpose() * adTargetF[h->idx+nFrames*t->idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(MT)
|
||||||
|
red->reduce(boost::bind(&EnergyFunctional::resubstituteFPt,
|
||||||
|
this, cstep, xAd, _1, _2, _3, _4), 0, allPoints.size(), 50);
|
||||||
|
else
|
||||||
|
resubstituteFPt(cstep, xAd, 0, allPoints.size(), 0,0);
|
||||||
|
|
||||||
|
delete[] xAd;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnergyFunctional::resubstituteFPt(
|
||||||
|
const VecCf &xc, Mat18f* xAd, int min, int max, Vec10* stats, int tid)
|
||||||
|
{
|
||||||
|
for(int k=min;k<max;k++)
|
||||||
|
{
|
||||||
|
EFPoint* p = allPoints[k];
|
||||||
|
|
||||||
|
int ngoodres = 0;
|
||||||
|
for(EFResidual* r : p->residualsAll) if(r->isActive()) ngoodres++;
|
||||||
|
if(ngoodres==0)
|
||||||
|
{
|
||||||
|
p->data->step = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
float b = p->bdSumF;
|
||||||
|
b -= xc.dot(p->Hcd_accAF + p->Hcd_accLF);
|
||||||
|
|
||||||
|
for(EFResidual* r : p->residualsAll)
|
||||||
|
{
|
||||||
|
if(!r->isActive()) continue;
|
||||||
|
b -= xAd[r->hostIDX*nFrames + r->targetIDX] * r->JpJdF;
|
||||||
|
}
|
||||||
|
|
||||||
|
p->data->step = - b*p->HdiF;
|
||||||
|
assert(std::isfinite(p->data->step));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double EnergyFunctional::calcMEnergyF()
|
||||||
|
{
|
||||||
|
|
||||||
|
assert(EFDeltaValid);
|
||||||
|
assert(EFAdjointsValid);
|
||||||
|
assert(EFIndicesValid);
|
||||||
|
|
||||||
|
VecX delta = getStitchedDeltaF();
|
||||||
|
return delta.dot(2*bM + HM*delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EnergyFunctional::calcLEnergyPt(int min, int max, Vec10* stats, int tid)
|
||||||
|
{
|
||||||
|
|
||||||
|
Accumulator11 E;
|
||||||
|
E.initialize();
|
||||||
|
VecCf dc = cDeltaF;
|
||||||
|
|
||||||
|
for(int i=min;i<max;i++)
|
||||||
|
{
|
||||||
|
EFPoint* p = allPoints[i];
|
||||||
|
float dd = p->deltaF;
|
||||||
|
|
||||||
|
for(EFResidual* r : p->residualsAll)
|
||||||
|
{
|
||||||
|
if(!r->isLinearized || !r->isActive()) continue;
|
||||||
|
|
||||||
|
Mat18f dp = adHTdeltaF[r->hostIDX+nFrames*r->targetIDX];
|
||||||
|
RawResidualJacobian* rJ = r->J;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// compute Jp*delta
|
||||||
|
float Jp_delta_x_1 = rJ->Jpdxi[0].dot(dp.head<6>())
|
||||||
|
+rJ->Jpdc[0].dot(dc)
|
||||||
|
+rJ->Jpdd[0]*dd;
|
||||||
|
|
||||||
|
float Jp_delta_y_1 = rJ->Jpdxi[1].dot(dp.head<6>())
|
||||||
|
+rJ->Jpdc[1].dot(dc)
|
||||||
|
+rJ->Jpdd[1]*dd;
|
||||||
|
|
||||||
|
__m128 Jp_delta_x = _mm_set1_ps(Jp_delta_x_1);
|
||||||
|
__m128 Jp_delta_y = _mm_set1_ps(Jp_delta_y_1);
|
||||||
|
__m128 delta_a = _mm_set1_ps((float)(dp[6]));
|
||||||
|
__m128 delta_b = _mm_set1_ps((float)(dp[7]));
|
||||||
|
|
||||||
|
for(int i=0;i+3<patternNum;i+=4)
|
||||||
|
{
|
||||||
|
// PATTERN: E = (2*res_toZeroF + J*delta) * J*delta.
|
||||||
|
__m128 Jdelta = _mm_mul_ps(_mm_load_ps(((float*)(rJ->JIdx))+i),Jp_delta_x);
|
||||||
|
Jdelta = _mm_add_ps(Jdelta,_mm_mul_ps(_mm_load_ps(((float*)(rJ->JIdx+1))+i),Jp_delta_y));
|
||||||
|
Jdelta = _mm_add_ps(Jdelta,_mm_mul_ps(_mm_load_ps(((float*)(rJ->JabF))+i),delta_a));
|
||||||
|
Jdelta = _mm_add_ps(Jdelta,_mm_mul_ps(_mm_load_ps(((float*)(rJ->JabF+1))+i),delta_b));
|
||||||
|
|
||||||
|
__m128 r0 = _mm_load_ps(((float*)&r->res_toZeroF)+i);
|
||||||
|
r0 = _mm_add_ps(r0,r0);
|
||||||
|
r0 = _mm_add_ps(r0,Jdelta);
|
||||||
|
Jdelta = _mm_mul_ps(Jdelta,r0);
|
||||||
|
E.updateSSENoShift(Jdelta);
|
||||||
|
}
|
||||||
|
for(int i=((patternNum>>2)<<2); i < patternNum; i++)
|
||||||
|
{
|
||||||
|
float Jdelta = rJ->JIdx[0][i]*Jp_delta_x_1 + rJ->JIdx[1][i]*Jp_delta_y_1 +
|
||||||
|
rJ->JabF[0][i]*dp[6] + rJ->JabF[1][i]*dp[7];
|
||||||
|
E.updateSingleNoShift((float)(Jdelta * (Jdelta + 2*r->res_toZeroF[i])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
E.updateSingle(p->deltaF*p->deltaF*p->priorF);
|
||||||
|
}
|
||||||
|
E.finish();
|
||||||
|
(*stats)[0] += E.A;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
double EnergyFunctional::calcLEnergyF_MT()
|
||||||
|
{
|
||||||
|
assert(EFDeltaValid);
|
||||||
|
assert(EFAdjointsValid);
|
||||||
|
assert(EFIndicesValid);
|
||||||
|
|
||||||
|
double E = 0;
|
||||||
|
for(EFFrame* f : frames)
|
||||||
|
E += f->delta_prior.cwiseProduct(f->prior).dot(f->delta_prior);
|
||||||
|
|
||||||
|
E += cDeltaF.cwiseProduct(cPriorF).dot(cDeltaF);
|
||||||
|
|
||||||
|
red->reduce(boost::bind(&EnergyFunctional::calcLEnergyPt,
|
||||||
|
this, _1, _2, _3, _4), 0, allPoints.size(), 50);
|
||||||
|
|
||||||
|
return E+red->stats[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EFResidual* EnergyFunctional::insertResidual(PointFrameResidual* r)
|
||||||
|
{
|
||||||
|
EFResidual* efr = new EFResidual(r, r->point->efPoint, r->host->efFrame, r->target->efFrame);
|
||||||
|
efr->idxInAll = r->point->efPoint->residualsAll.size();
|
||||||
|
r->point->efPoint->residualsAll.push_back(efr);
|
||||||
|
|
||||||
|
connectivityMap[(((uint64_t)efr->host->frameID) << 32) + ((uint64_t)efr->target->frameID)][0]++;
|
||||||
|
|
||||||
|
nResiduals++;
|
||||||
|
r->efResidual = efr;
|
||||||
|
return efr;
|
||||||
|
}
|
||||||
|
EFFrame* EnergyFunctional::insertFrame(FrameHessian* fh, CalibHessian* Hcalib)
|
||||||
|
{
|
||||||
|
EFFrame* eff = new EFFrame(fh);
|
||||||
|
eff->idx = frames.size();
|
||||||
|
frames.push_back(eff);
|
||||||
|
|
||||||
|
nFrames++;
|
||||||
|
fh->efFrame = eff;
|
||||||
|
|
||||||
|
assert(HM.cols() == 8*nFrames+CPARS-8);
|
||||||
|
bM.conservativeResize(8*nFrames+CPARS);
|
||||||
|
HM.conservativeResize(8*nFrames+CPARS,8*nFrames+CPARS);
|
||||||
|
bM.tail<8>().setZero();
|
||||||
|
HM.rightCols<8>().setZero();
|
||||||
|
HM.bottomRows<8>().setZero();
|
||||||
|
|
||||||
|
EFIndicesValid = false;
|
||||||
|
EFAdjointsValid=false;
|
||||||
|
EFDeltaValid=false;
|
||||||
|
|
||||||
|
setAdjointsF(Hcalib);
|
||||||
|
makeIDX();
|
||||||
|
|
||||||
|
|
||||||
|
for(EFFrame* fh2 : frames)
|
||||||
|
{
|
||||||
|
connectivityMap[(((uint64_t)eff->frameID) << 32) + ((uint64_t)fh2->frameID)] = Eigen::Vector2i(0,0);
|
||||||
|
if(fh2 != eff)
|
||||||
|
connectivityMap[(((uint64_t)fh2->frameID) << 32) + ((uint64_t)eff->frameID)] = Eigen::Vector2i(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return eff;
|
||||||
|
}
|
||||||
|
EFPoint* EnergyFunctional::insertPoint(PointHessian* ph)
|
||||||
|
{
|
||||||
|
EFPoint* efp = new EFPoint(ph, ph->host->efFrame);
|
||||||
|
efp->idxInPoints = ph->host->efFrame->points.size();
|
||||||
|
ph->host->efFrame->points.push_back(efp);
|
||||||
|
|
||||||
|
nPoints++;
|
||||||
|
ph->efPoint = efp;
|
||||||
|
|
||||||
|
EFIndicesValid = false;
|
||||||
|
|
||||||
|
return efp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EnergyFunctional::dropResidual(EFResidual* r)
|
||||||
|
{
|
||||||
|
EFPoint* p = r->point;
|
||||||
|
assert(r == p->residualsAll[r->idxInAll]);
|
||||||
|
|
||||||
|
p->residualsAll[r->idxInAll] = p->residualsAll.back();
|
||||||
|
p->residualsAll[r->idxInAll]->idxInAll = r->idxInAll;
|
||||||
|
p->residualsAll.pop_back();
|
||||||
|
|
||||||
|
|
||||||
|
if(r->isActive())
|
||||||
|
r->host->data->shell->statistics_goodResOnThis++;
|
||||||
|
else
|
||||||
|
r->host->data->shell->statistics_outlierResOnThis++;
|
||||||
|
|
||||||
|
|
||||||
|
connectivityMap[(((uint64_t)r->host->frameID) << 32) + ((uint64_t)r->target->frameID)][0]--;
|
||||||
|
nResiduals--;
|
||||||
|
r->data->efResidual=0;
|
||||||
|
delete r;
|
||||||
|
}
|
||||||
|
void EnergyFunctional::marginalizeFrame(EFFrame* fh)
|
||||||
|
{
|
||||||
|
|
||||||
|
assert(EFDeltaValid);
|
||||||
|
assert(EFAdjointsValid);
|
||||||
|
assert(EFIndicesValid);
|
||||||
|
|
||||||
|
assert((int)fh->points.size()==0);
|
||||||
|
int ndim = nFrames*8+CPARS-8;// new dimension
|
||||||
|
int odim = nFrames*8+CPARS;// old dimension
|
||||||
|
|
||||||
|
|
||||||
|
// VecX eigenvaluesPre = HM.eigenvalues().real();
|
||||||
|
// std::sort(eigenvaluesPre.data(), eigenvaluesPre.data()+eigenvaluesPre.size());
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if((int)fh->idx != (int)frames.size()-1)
|
||||||
|
{
|
||||||
|
int io = fh->idx*8+CPARS; // index of frame to move to end
|
||||||
|
int ntail = 8*(nFrames-fh->idx-1);
|
||||||
|
assert((io+8+ntail) == nFrames*8+CPARS);
|
||||||
|
|
||||||
|
Vec8 bTmp = bM.segment<8>(io);
|
||||||
|
VecX tailTMP = bM.tail(ntail);
|
||||||
|
bM.segment(io,ntail) = tailTMP;
|
||||||
|
bM.tail<8>() = bTmp;
|
||||||
|
|
||||||
|
MatXX HtmpCol = HM.block(0,io,odim,8);
|
||||||
|
MatXX rightColsTmp = HM.rightCols(ntail);
|
||||||
|
HM.block(0,io,odim,ntail) = rightColsTmp;
|
||||||
|
HM.rightCols(8) = HtmpCol;
|
||||||
|
|
||||||
|
MatXX HtmpRow = HM.block(io,0,8,odim);
|
||||||
|
MatXX botRowsTmp = HM.bottomRows(ntail);
|
||||||
|
HM.block(io,0,ntail,odim) = botRowsTmp;
|
||||||
|
HM.bottomRows(8) = HtmpRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// // marginalize. First add prior here, instead of to active.
|
||||||
|
HM.bottomRightCorner<8,8>().diagonal() += fh->prior;
|
||||||
|
bM.tail<8>() += fh->prior.cwiseProduct(fh->delta_prior);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// std::cout << std::setprecision(16) << "HMPre:\n" << HM << "\n\n";
|
||||||
|
|
||||||
|
|
||||||
|
VecX SVec = (HM.diagonal().cwiseAbs()+VecX::Constant(HM.cols(), 10)).cwiseSqrt();
|
||||||
|
VecX SVecI = SVec.cwiseInverse();
|
||||||
|
|
||||||
|
|
||||||
|
// std::cout << std::setprecision(16) << "SVec: " << SVec.transpose() << "\n\n";
|
||||||
|
// std::cout << std::setprecision(16) << "SVecI: " << SVecI.transpose() << "\n\n";
|
||||||
|
|
||||||
|
// scale!
|
||||||
|
MatXX HMScaled = SVecI.asDiagonal() * HM * SVecI.asDiagonal();
|
||||||
|
VecX bMScaled = SVecI.asDiagonal() * bM;
|
||||||
|
|
||||||
|
// invert bottom part!
|
||||||
|
Mat88 hpi = HMScaled.bottomRightCorner<8,8>();
|
||||||
|
hpi = 0.5f*(hpi+hpi);
|
||||||
|
hpi = hpi.inverse();
|
||||||
|
hpi = 0.5f*(hpi+hpi);
|
||||||
|
|
||||||
|
// schur-complement!
|
||||||
|
MatXX bli = HMScaled.bottomLeftCorner(8,ndim).transpose() * hpi;
|
||||||
|
HMScaled.topLeftCorner(ndim,ndim).noalias() -= bli * HMScaled.bottomLeftCorner(8,ndim);
|
||||||
|
bMScaled.head(ndim).noalias() -= bli*bMScaled.tail<8>();
|
||||||
|
|
||||||
|
//unscale!
|
||||||
|
HMScaled = SVec.asDiagonal() * HMScaled * SVec.asDiagonal();
|
||||||
|
bMScaled = SVec.asDiagonal() * bMScaled;
|
||||||
|
|
||||||
|
// set.
|
||||||
|
HM = 0.5*(HMScaled.topLeftCorner(ndim,ndim) + HMScaled.topLeftCorner(ndim,ndim).transpose());
|
||||||
|
bM = bMScaled.head(ndim);
|
||||||
|
|
||||||
|
// remove from vector, without changing the order!
|
||||||
|
for(unsigned int i=fh->idx; i+1<frames.size();i++)
|
||||||
|
{
|
||||||
|
frames[i] = frames[i+1];
|
||||||
|
frames[i]->idx = i;
|
||||||
|
}
|
||||||
|
frames.pop_back();
|
||||||
|
nFrames--;
|
||||||
|
fh->data->efFrame=0;
|
||||||
|
|
||||||
|
assert((int)frames.size()*8+CPARS == (int)HM.rows());
|
||||||
|
assert((int)frames.size()*8+CPARS == (int)HM.cols());
|
||||||
|
assert((int)frames.size()*8+CPARS == (int)bM.size());
|
||||||
|
assert((int)frames.size() == (int)nFrames);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// VecX eigenvaluesPost = HM.eigenvalues().real();
|
||||||
|
// std::sort(eigenvaluesPost.data(), eigenvaluesPost.data()+eigenvaluesPost.size());
|
||||||
|
|
||||||
|
// std::cout << std::setprecision(16) << "HMPost:\n" << HM << "\n\n";
|
||||||
|
|
||||||
|
// std::cout << "EigPre:: " << eigenvaluesPre.transpose() << "\n";
|
||||||
|
// std::cout << "EigPost: " << eigenvaluesPost.transpose() << "\n";
|
||||||
|
|
||||||
|
EFIndicesValid = false;
|
||||||
|
EFAdjointsValid=false;
|
||||||
|
EFDeltaValid=false;
|
||||||
|
|
||||||
|
makeIDX();
|
||||||
|
delete fh;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void EnergyFunctional::marginalizePointsF()
|
||||||
|
{
|
||||||
|
assert(EFDeltaValid);
|
||||||
|
assert(EFAdjointsValid);
|
||||||
|
assert(EFIndicesValid);
|
||||||
|
|
||||||
|
|
||||||
|
allPointsToMarg.clear();
|
||||||
|
for(EFFrame* f : frames)
|
||||||
|
{
|
||||||
|
for(int i=0;i<(int)f->points.size();i++)
|
||||||
|
{
|
||||||
|
EFPoint* p = f->points[i];
|
||||||
|
if(p->stateFlag == EFPointStatus::PS_MARGINALIZE)
|
||||||
|
{
|
||||||
|
p->priorF *= setting_idepthFixPriorMargFac;
|
||||||
|
for(EFResidual* r : p->residualsAll)
|
||||||
|
if(r->isActive())
|
||||||
|
connectivityMap[(((uint64_t)r->host->frameID) << 32) + ((uint64_t)r->target->frameID)][1]++;
|
||||||
|
allPointsToMarg.push_back(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
accSSE_bot->setZero(nFrames);
|
||||||
|
accSSE_top_A->setZero(nFrames);
|
||||||
|
for(EFPoint* p : allPointsToMarg)
|
||||||
|
{
|
||||||
|
accSSE_top_A->addPoint<2>(p,this);
|
||||||
|
accSSE_bot->addPoint(p,false);
|
||||||
|
removePoint(p);
|
||||||
|
}
|
||||||
|
MatXX M, Msc;
|
||||||
|
VecX Mb, Mbsc;
|
||||||
|
accSSE_top_A->stitchDouble(M,Mb,this,false,false);
|
||||||
|
accSSE_bot->stitchDouble(Msc,Mbsc,this);
|
||||||
|
|
||||||
|
resInM+= accSSE_top_A->nres[0];
|
||||||
|
|
||||||
|
MatXX H = M-Msc;
|
||||||
|
VecX b = Mb-Mbsc;
|
||||||
|
|
||||||
|
if(setting_solverMode & SOLVER_ORTHOGONALIZE_POINTMARG)
|
||||||
|
{
|
||||||
|
// have a look if prior is there.
|
||||||
|
bool haveFirstFrame = false;
|
||||||
|
for(EFFrame* f : frames) if(f->frameID==0) haveFirstFrame=true;
|
||||||
|
|
||||||
|
if(!haveFirstFrame)
|
||||||
|
orthogonalize(&b, &H);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
HM += setting_margWeightFac*H;
|
||||||
|
bM += setting_margWeightFac*b;
|
||||||
|
|
||||||
|
if(setting_solverMode & SOLVER_ORTHOGONALIZE_FULL)
|
||||||
|
orthogonalize(&bM, &HM);
|
||||||
|
|
||||||
|
EFIndicesValid = false;
|
||||||
|
makeIDX();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnergyFunctional::dropPointsF()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
for(EFFrame* f : frames)
|
||||||
|
{
|
||||||
|
for(int i=0;i<(int)f->points.size();i++)
|
||||||
|
{
|
||||||
|
EFPoint* p = f->points[i];
|
||||||
|
if(p->stateFlag == EFPointStatus::PS_DROP)
|
||||||
|
{
|
||||||
|
removePoint(p);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EFIndicesValid = false;
|
||||||
|
makeIDX();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EnergyFunctional::removePoint(EFPoint* p)
|
||||||
|
{
|
||||||
|
for(EFResidual* r : p->residualsAll)
|
||||||
|
dropResidual(r);
|
||||||
|
|
||||||
|
EFFrame* h = p->host;
|
||||||
|
h->points[p->idxInPoints] = h->points.back();
|
||||||
|
h->points[p->idxInPoints]->idxInPoints = p->idxInPoints;
|
||||||
|
h->points.pop_back();
|
||||||
|
|
||||||
|
nPoints--;
|
||||||
|
p->data->efPoint = 0;
|
||||||
|
|
||||||
|
EFIndicesValid = false;
|
||||||
|
|
||||||
|
delete p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnergyFunctional::orthogonalize(VecX* b, MatXX* H)
|
||||||
|
{
|
||||||
|
// VecX eigenvaluesPre = H.eigenvalues().real();
|
||||||
|
// std::sort(eigenvaluesPre.data(), eigenvaluesPre.data()+eigenvaluesPre.size());
|
||||||
|
// std::cout << "EigPre:: " << eigenvaluesPre.transpose() << "\n";
|
||||||
|
|
||||||
|
|
||||||
|
// decide to which nullspaces to orthogonalize.
|
||||||
|
std::vector<VecX> ns;
|
||||||
|
ns.insert(ns.end(), lastNullspaces_pose.begin(), lastNullspaces_pose.end());
|
||||||
|
ns.insert(ns.end(), lastNullspaces_scale.begin(), lastNullspaces_scale.end());
|
||||||
|
// if(setting_affineOptModeA <= 0)
|
||||||
|
// ns.insert(ns.end(), lastNullspaces_affA.begin(), lastNullspaces_affA.end());
|
||||||
|
// if(setting_affineOptModeB <= 0)
|
||||||
|
// ns.insert(ns.end(), lastNullspaces_affB.begin(), lastNullspaces_affB.end());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// make Nullspaces matrix
|
||||||
|
MatXX N(ns[0].rows(), ns.size());
|
||||||
|
for(unsigned int i=0;i<ns.size();i++)
|
||||||
|
N.col(i) = ns[i].normalized();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// compute Npi := N * (N' * N)^-1 = pseudo inverse of N.
|
||||||
|
Eigen::JacobiSVD<MatXX> svdNN(N, Eigen::ComputeThinU | Eigen::ComputeThinV);
|
||||||
|
|
||||||
|
VecX SNN = svdNN.singularValues();
|
||||||
|
double minSv = 1e10, maxSv = 0;
|
||||||
|
for(int i=0;i<SNN.size();i++)
|
||||||
|
{
|
||||||
|
if(SNN[i] < minSv) minSv = SNN[i];
|
||||||
|
if(SNN[i] > maxSv) maxSv = SNN[i];
|
||||||
|
}
|
||||||
|
for(int i=0;i<SNN.size();i++)
|
||||||
|
{ if(SNN[i] > setting_solverModeDelta*maxSv) SNN[i] = 1.0 / SNN[i]; else SNN[i] = 0; }
|
||||||
|
|
||||||
|
MatXX Npi = svdNN.matrixU() * SNN.asDiagonal() * svdNN.matrixV().transpose(); // [dim] x 9.
|
||||||
|
MatXX NNpiT = N*Npi.transpose(); // [dim] x [dim].
|
||||||
|
MatXX NNpiTS = 0.5*(NNpiT + NNpiT.transpose()); // = N * (N' * N)^-1 * N'.
|
||||||
|
|
||||||
|
if(b!=0) *b -= NNpiTS * *b;
|
||||||
|
if(H!=0) *H -= NNpiTS * *H * NNpiTS;
|
||||||
|
|
||||||
|
|
||||||
|
// std::cout << std::setprecision(16) << "Orth SV: " << SNN.reverse().transpose() << "\n";
|
||||||
|
|
||||||
|
// VecX eigenvaluesPost = H.eigenvalues().real();
|
||||||
|
// std::sort(eigenvaluesPost.data(), eigenvaluesPost.data()+eigenvaluesPost.size());
|
||||||
|
// std::cout << "EigPost:: " << eigenvaluesPost.transpose() << "\n";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EnergyFunctional::solveSystemF(int iteration, double lambda, CalibHessian* HCalib)
|
||||||
|
{
|
||||||
|
if(setting_solverMode & SOLVER_USE_GN) lambda=0;
|
||||||
|
if(setting_solverMode & SOLVER_FIX_LAMBDA) lambda = 1e-5;
|
||||||
|
|
||||||
|
assert(EFDeltaValid);
|
||||||
|
assert(EFAdjointsValid);
|
||||||
|
assert(EFIndicesValid);
|
||||||
|
|
||||||
|
MatXX HL_top, HA_top, H_sc;
|
||||||
|
VecX bL_top, bA_top, bM_top, b_sc;
|
||||||
|
|
||||||
|
accumulateAF_MT(HA_top, bA_top,multiThreading);
|
||||||
|
|
||||||
|
|
||||||
|
accumulateLF_MT(HL_top, bL_top,multiThreading);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
accumulateSCF_MT(H_sc, b_sc,multiThreading);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bM_top = (bM+ HM * getStitchedDeltaF());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MatXX HFinal_top;
|
||||||
|
VecX bFinal_top;
|
||||||
|
|
||||||
|
if(setting_solverMode & SOLVER_ORTHOGONALIZE_SYSTEM)
|
||||||
|
{
|
||||||
|
// have a look if prior is there.
|
||||||
|
bool haveFirstFrame = false;
|
||||||
|
for(EFFrame* f : frames) if(f->frameID==0) haveFirstFrame=true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MatXX HT_act = HL_top + HA_top - H_sc;
|
||||||
|
VecX bT_act = bL_top + bA_top - b_sc;
|
||||||
|
|
||||||
|
|
||||||
|
if(!haveFirstFrame)
|
||||||
|
orthogonalize(&bT_act, &HT_act);
|
||||||
|
|
||||||
|
HFinal_top = HT_act + HM;
|
||||||
|
bFinal_top = bT_act + bM_top;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
lastHS = HFinal_top;
|
||||||
|
lastbS = bFinal_top;
|
||||||
|
|
||||||
|
for(int i=0;i<8*nFrames+CPARS;i++) HFinal_top(i,i) *= (1+lambda);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
HFinal_top = HL_top + HM + HA_top;
|
||||||
|
bFinal_top = bL_top + bM_top + bA_top - b_sc;
|
||||||
|
|
||||||
|
lastHS = HFinal_top - H_sc;
|
||||||
|
lastbS = bFinal_top;
|
||||||
|
|
||||||
|
for(int i=0;i<8*nFrames+CPARS;i++) HFinal_top(i,i) *= (1+lambda);
|
||||||
|
HFinal_top -= H_sc * (1.0f/(1+lambda));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VecX x;
|
||||||
|
if(setting_solverMode & SOLVER_SVD)
|
||||||
|
{
|
||||||
|
VecX SVecI = HFinal_top.diagonal().cwiseSqrt().cwiseInverse();
|
||||||
|
MatXX HFinalScaled = SVecI.asDiagonal() * HFinal_top * SVecI.asDiagonal();
|
||||||
|
VecX bFinalScaled = SVecI.asDiagonal() * bFinal_top;
|
||||||
|
Eigen::JacobiSVD<MatXX> svd(HFinalScaled, Eigen::ComputeThinU | Eigen::ComputeThinV);
|
||||||
|
|
||||||
|
VecX S = svd.singularValues();
|
||||||
|
double minSv = 1e10, maxSv = 0;
|
||||||
|
for(int i=0;i<S.size();i++)
|
||||||
|
{
|
||||||
|
if(S[i] < minSv) minSv = S[i];
|
||||||
|
if(S[i] > maxSv) maxSv = S[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
VecX Ub = svd.matrixU().transpose()*bFinalScaled;
|
||||||
|
int setZero=0;
|
||||||
|
for(int i=0;i<Ub.size();i++)
|
||||||
|
{
|
||||||
|
if(S[i] < setting_solverModeDelta*maxSv)
|
||||||
|
{ Ub[i] = 0; setZero++; }
|
||||||
|
|
||||||
|
if((setting_solverMode & SOLVER_SVD_CUT7) && (i >= Ub.size()-7))
|
||||||
|
{ Ub[i] = 0; setZero++; }
|
||||||
|
|
||||||
|
else Ub[i] /= S[i];
|
||||||
|
}
|
||||||
|
x = SVecI.asDiagonal() * svd.matrixV() * Ub;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VecX SVecI = (HFinal_top.diagonal()+VecX::Constant(HFinal_top.cols(), 10)).cwiseSqrt().cwiseInverse();
|
||||||
|
MatXX HFinalScaled = SVecI.asDiagonal() * HFinal_top * SVecI.asDiagonal();
|
||||||
|
x = SVecI.asDiagonal() * HFinalScaled.ldlt().solve(SVecI.asDiagonal() * bFinal_top);// SVec.asDiagonal() * svd.matrixV() * Ub;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if((setting_solverMode & SOLVER_ORTHOGONALIZE_X) || (iteration >= 2 && (setting_solverMode & SOLVER_ORTHOGONALIZE_X_LATER)))
|
||||||
|
{
|
||||||
|
VecX xOld = x;
|
||||||
|
orthogonalize(&x, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
lastX = x;
|
||||||
|
|
||||||
|
|
||||||
|
//resubstituteF(x, HCalib);
|
||||||
|
currentLambda= lambda;
|
||||||
|
resubstituteF_MT(x, HCalib,multiThreading);
|
||||||
|
currentLambda=0;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
void EnergyFunctional::makeIDX()
|
||||||
|
{
|
||||||
|
for(unsigned int idx=0;idx<frames.size();idx++)
|
||||||
|
frames[idx]->idx = idx;
|
||||||
|
|
||||||
|
allPoints.clear();
|
||||||
|
|
||||||
|
for(EFFrame* f : frames)
|
||||||
|
for(EFPoint* p : f->points)
|
||||||
|
{
|
||||||
|
allPoints.push_back(p);
|
||||||
|
for(EFResidual* r : p->residualsAll)
|
||||||
|
{
|
||||||
|
r->hostIDX = r->host->idx;
|
||||||
|
r->targetIDX = r->target->idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EFIndicesValid=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VecX EnergyFunctional::getStitchedDeltaF() const
|
||||||
|
{
|
||||||
|
VecX d = VecX(CPARS+nFrames*8); d.head<CPARS>() = cDeltaF.cast<double>();
|
||||||
|
for(int h=0;h<nFrames;h++) d.segment<8>(CPARS+8*h) = frames[h]->delta;
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
162
src/OptimizationBackend/EnergyFunctional.h
Normal file
162
src/OptimizationBackend/EnergyFunctional.h
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "util/IndexThreadReduce.h"
|
||||||
|
#include "vector"
|
||||||
|
#include <math.h>
|
||||||
|
#include "map"
|
||||||
|
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
class PointFrameResidual;
|
||||||
|
class CalibHessian;
|
||||||
|
class FrameHessian;
|
||||||
|
class PointHessian;
|
||||||
|
|
||||||
|
|
||||||
|
class EFResidual;
|
||||||
|
class EFPoint;
|
||||||
|
class EFFrame;
|
||||||
|
class EnergyFunctional;
|
||||||
|
class AccumulatedTopHessian;
|
||||||
|
class AccumulatedTopHessianSSE;
|
||||||
|
class AccumulatedSCHessian;
|
||||||
|
class AccumulatedSCHessianSSE;
|
||||||
|
|
||||||
|
|
||||||
|
extern bool EFAdjointsValid;
|
||||||
|
extern bool EFIndicesValid;
|
||||||
|
extern bool EFDeltaValid;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class EnergyFunctional {
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
friend class EFFrame;
|
||||||
|
friend class EFPoint;
|
||||||
|
friend class EFResidual;
|
||||||
|
friend class AccumulatedTopHessian;
|
||||||
|
friend class AccumulatedTopHessianSSE;
|
||||||
|
friend class AccumulatedSCHessian;
|
||||||
|
friend class AccumulatedSCHessianSSE;
|
||||||
|
|
||||||
|
EnergyFunctional();
|
||||||
|
~EnergyFunctional();
|
||||||
|
|
||||||
|
|
||||||
|
EFResidual* insertResidual(PointFrameResidual* r);
|
||||||
|
EFFrame* insertFrame(FrameHessian* fh, CalibHessian* Hcalib);
|
||||||
|
EFPoint* insertPoint(PointHessian* ph);
|
||||||
|
|
||||||
|
void dropResidual(EFResidual* r);
|
||||||
|
void marginalizeFrame(EFFrame* fh);
|
||||||
|
void removePoint(EFPoint* ph);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void marginalizePointsF();
|
||||||
|
void dropPointsF();
|
||||||
|
void solveSystemF(int iteration, double lambda, CalibHessian* HCalib);
|
||||||
|
double calcMEnergyF();
|
||||||
|
double calcLEnergyF_MT();
|
||||||
|
|
||||||
|
|
||||||
|
void makeIDX();
|
||||||
|
|
||||||
|
void setDeltaF(CalibHessian* HCalib);
|
||||||
|
|
||||||
|
void setAdjointsF(CalibHessian* Hcalib);
|
||||||
|
|
||||||
|
std::vector<EFFrame*> frames;
|
||||||
|
int nPoints, nFrames, nResiduals;
|
||||||
|
|
||||||
|
MatXX HM;
|
||||||
|
VecX bM;
|
||||||
|
|
||||||
|
int resInA, resInL, resInM;
|
||||||
|
MatXX lastHS;
|
||||||
|
VecX lastbS;
|
||||||
|
VecX lastX;
|
||||||
|
std::vector<VecX> lastNullspaces_forLogging;
|
||||||
|
std::vector<VecX> lastNullspaces_pose;
|
||||||
|
std::vector<VecX> lastNullspaces_scale;
|
||||||
|
std::vector<VecX> lastNullspaces_affA;
|
||||||
|
std::vector<VecX> lastNullspaces_affB;
|
||||||
|
|
||||||
|
IndexThreadReduce<Vec10>* red;
|
||||||
|
|
||||||
|
|
||||||
|
std::map<uint64_t,
|
||||||
|
Eigen::Vector2i,
|
||||||
|
std::less<uint64_t>,
|
||||||
|
Eigen::aligned_allocator<std::pair<const uint64_t, Eigen::Vector2i>>
|
||||||
|
> connectivityMap;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
VecX getStitchedDeltaF() const;
|
||||||
|
|
||||||
|
void resubstituteF_MT(VecX x, CalibHessian* HCalib, bool MT);
|
||||||
|
void resubstituteFPt(const VecCf &xc, Mat18f* xAd, int min, int max, Vec10* stats, int tid);
|
||||||
|
|
||||||
|
void accumulateAF_MT(MatXX &H, VecX &b, bool MT);
|
||||||
|
void accumulateLF_MT(MatXX &H, VecX &b, bool MT);
|
||||||
|
void accumulateSCF_MT(MatXX &H, VecX &b, bool MT);
|
||||||
|
|
||||||
|
void calcLEnergyPt(int min, int max, Vec10* stats, int tid);
|
||||||
|
|
||||||
|
void orthogonalize(VecX* b, MatXX* H);
|
||||||
|
Mat18f* adHTdeltaF;
|
||||||
|
|
||||||
|
Mat88* adHost;
|
||||||
|
Mat88* adTarget;
|
||||||
|
|
||||||
|
Mat88f* adHostF;
|
||||||
|
Mat88f* adTargetF;
|
||||||
|
|
||||||
|
|
||||||
|
VecC cPrior;
|
||||||
|
VecCf cDeltaF;
|
||||||
|
VecCf cPriorF;
|
||||||
|
|
||||||
|
AccumulatedTopHessianSSE* accSSE_top_L;
|
||||||
|
AccumulatedTopHessianSSE* accSSE_top_A;
|
||||||
|
|
||||||
|
|
||||||
|
AccumulatedSCHessianSSE* accSSE_bot;
|
||||||
|
|
||||||
|
std::vector<EFPoint*> allPoints;
|
||||||
|
std::vector<EFPoint*> allPointsToMarg;
|
||||||
|
|
||||||
|
float currentLambda;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
116
src/OptimizationBackend/EnergyFunctionalStructs.cpp
Normal file
116
src/OptimizationBackend/EnergyFunctionalStructs.cpp
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "OptimizationBackend/EnergyFunctionalStructs.h"
|
||||||
|
#include "OptimizationBackend/EnergyFunctional.h"
|
||||||
|
#include "FullSystem/FullSystem.h"
|
||||||
|
#include "FullSystem/HessianBlocks.h"
|
||||||
|
#include "FullSystem/Residuals.h"
|
||||||
|
|
||||||
|
#if !defined(__SSE3__) && !defined(__SSE2__) && !defined(__SSE1__)
|
||||||
|
#include "SSE2NEON.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
void EFResidual::takeDataF()
|
||||||
|
{
|
||||||
|
std::swap<RawResidualJacobian*>(J, data->J);
|
||||||
|
|
||||||
|
Vec2f JI_JI_Jd = J->JIdx2 * J->Jpdd;
|
||||||
|
|
||||||
|
for(int i=0;i<6;i++)
|
||||||
|
JpJdF[i] = J->Jpdxi[0][i]*JI_JI_Jd[0] + J->Jpdxi[1][i] * JI_JI_Jd[1];
|
||||||
|
|
||||||
|
JpJdF.segment<2>(6) = J->JabJIdx*J->Jpdd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EFFrame::takeData()
|
||||||
|
{
|
||||||
|
prior = data->getPrior().head<8>();
|
||||||
|
delta = data->get_state_minus_stateZero().head<8>();
|
||||||
|
delta_prior = (data->get_state() - data->getPriorZero()).head<8>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Vec10 state_zero = data->get_state_zero();
|
||||||
|
// state_zero.segment<3>(0) = SCALE_XI_TRANS * state_zero.segment<3>(0);
|
||||||
|
// state_zero.segment<3>(3) = SCALE_XI_ROT * state_zero.segment<3>(3);
|
||||||
|
// state_zero[6] = SCALE_A * state_zero[6];
|
||||||
|
// state_zero[7] = SCALE_B * state_zero[7];
|
||||||
|
// state_zero[8] = SCALE_A * state_zero[8];
|
||||||
|
// state_zero[9] = SCALE_B * state_zero[9];
|
||||||
|
//
|
||||||
|
// std::cout << "state_zero: " << state_zero.transpose() << "\n";
|
||||||
|
|
||||||
|
|
||||||
|
assert(data->frameID != -1);
|
||||||
|
|
||||||
|
frameID = data->frameID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void EFPoint::takeData()
|
||||||
|
{
|
||||||
|
priorF = data->hasDepthPrior ? setting_idepthFixPrior*SCALE_IDEPTH*SCALE_IDEPTH : 0;
|
||||||
|
if(setting_solverMode & SOLVER_REMOVE_POSEPRIOR) priorF=0;
|
||||||
|
|
||||||
|
deltaF = data->idepth-data->idepth_zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EFResidual::fixLinearizationF(EnergyFunctional* ef)
|
||||||
|
{
|
||||||
|
Vec8f dp = ef->adHTdeltaF[hostIDX+ef->nFrames*targetIDX];
|
||||||
|
|
||||||
|
// compute Jp*delta
|
||||||
|
__m128 Jp_delta_x = _mm_set1_ps(J->Jpdxi[0].dot(dp.head<6>())
|
||||||
|
+J->Jpdc[0].dot(ef->cDeltaF)
|
||||||
|
+J->Jpdd[0]*point->deltaF);
|
||||||
|
__m128 Jp_delta_y = _mm_set1_ps(J->Jpdxi[1].dot(dp.head<6>())
|
||||||
|
+J->Jpdc[1].dot(ef->cDeltaF)
|
||||||
|
+J->Jpdd[1]*point->deltaF);
|
||||||
|
__m128 delta_a = _mm_set1_ps((float)(dp[6]));
|
||||||
|
__m128 delta_b = _mm_set1_ps((float)(dp[7]));
|
||||||
|
|
||||||
|
for(int i=0;i<patternNum;i+=4)
|
||||||
|
{
|
||||||
|
// PATTERN: rtz = resF - [JI*Jp Ja]*delta.
|
||||||
|
__m128 rtz = _mm_load_ps(((float*)&J->resF)+i);
|
||||||
|
rtz = _mm_sub_ps(rtz,_mm_mul_ps(_mm_load_ps(((float*)(J->JIdx))+i),Jp_delta_x));
|
||||||
|
rtz = _mm_sub_ps(rtz,_mm_mul_ps(_mm_load_ps(((float*)(J->JIdx+1))+i),Jp_delta_y));
|
||||||
|
rtz = _mm_sub_ps(rtz,_mm_mul_ps(_mm_load_ps(((float*)(J->JabF))+i),delta_a));
|
||||||
|
rtz = _mm_sub_ps(rtz,_mm_mul_ps(_mm_load_ps(((float*)(J->JabF+1))+i),delta_b));
|
||||||
|
_mm_store_ps(((float*)&res_toZeroF)+i, rtz);
|
||||||
|
}
|
||||||
|
|
||||||
|
isLinearized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
168
src/OptimizationBackend/EnergyFunctionalStructs.h
Normal file
168
src/OptimizationBackend/EnergyFunctionalStructs.h
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
#include "vector"
|
||||||
|
#include <math.h>
|
||||||
|
#include "OptimizationBackend/RawResidualJacobian.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
|
||||||
|
class PointFrameResidual;
|
||||||
|
class CalibHessian;
|
||||||
|
class FrameHessian;
|
||||||
|
class PointHessian;
|
||||||
|
|
||||||
|
class EFResidual;
|
||||||
|
class EFPoint;
|
||||||
|
class EFFrame;
|
||||||
|
class EnergyFunctional;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class EFResidual
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
|
||||||
|
inline EFResidual(PointFrameResidual* org, EFPoint* point_, EFFrame* host_, EFFrame* target_) :
|
||||||
|
data(org), point(point_), host(host_), target(target_)
|
||||||
|
{
|
||||||
|
isLinearized=false;
|
||||||
|
isActiveAndIsGoodNEW=false;
|
||||||
|
J = new RawResidualJacobian();
|
||||||
|
assert(((long)this)%16==0);
|
||||||
|
assert(((long)J)%16==0);
|
||||||
|
}
|
||||||
|
inline ~EFResidual()
|
||||||
|
{
|
||||||
|
delete J;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void takeDataF();
|
||||||
|
|
||||||
|
|
||||||
|
void fixLinearizationF(EnergyFunctional* ef);
|
||||||
|
|
||||||
|
|
||||||
|
// structural pointers
|
||||||
|
PointFrameResidual* data;
|
||||||
|
int hostIDX, targetIDX;
|
||||||
|
EFPoint* point;
|
||||||
|
EFFrame* host;
|
||||||
|
EFFrame* target;
|
||||||
|
int idxInAll;
|
||||||
|
|
||||||
|
RawResidualJacobian* J;
|
||||||
|
|
||||||
|
VecNRf res_toZeroF;
|
||||||
|
Vec8f JpJdF;
|
||||||
|
|
||||||
|
|
||||||
|
// status.
|
||||||
|
bool isLinearized;
|
||||||
|
|
||||||
|
// if residual is not OOB & not OUTLIER & should be used during accumulations
|
||||||
|
bool isActiveAndIsGoodNEW;
|
||||||
|
inline const bool &isActive() const {return isActiveAndIsGoodNEW;}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum EFPointStatus {PS_GOOD=0, PS_MARGINALIZE, PS_DROP};
|
||||||
|
|
||||||
|
class EFPoint
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
EFPoint(PointHessian* d, EFFrame* host_) : data(d),host(host_)
|
||||||
|
{
|
||||||
|
takeData();
|
||||||
|
stateFlag=EFPointStatus::PS_GOOD;
|
||||||
|
}
|
||||||
|
void takeData();
|
||||||
|
|
||||||
|
PointHessian* data;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
float priorF;
|
||||||
|
float deltaF;
|
||||||
|
|
||||||
|
|
||||||
|
// constant info (never changes in-between).
|
||||||
|
int idxInPoints;
|
||||||
|
EFFrame* host;
|
||||||
|
|
||||||
|
// contains all residuals.
|
||||||
|
std::vector<EFResidual*> residualsAll;
|
||||||
|
|
||||||
|
float bdSumF;
|
||||||
|
float HdiF;
|
||||||
|
float Hdd_accLF;
|
||||||
|
VecCf Hcd_accLF;
|
||||||
|
float bd_accLF;
|
||||||
|
float Hdd_accAF;
|
||||||
|
VecCf Hcd_accAF;
|
||||||
|
float bd_accAF;
|
||||||
|
|
||||||
|
|
||||||
|
EFPointStatus stateFlag;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class EFFrame
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
EFFrame(FrameHessian* d) : data(d)
|
||||||
|
{
|
||||||
|
takeData();
|
||||||
|
}
|
||||||
|
void takeData();
|
||||||
|
|
||||||
|
|
||||||
|
Vec8 prior; // prior hessian (diagonal)
|
||||||
|
Vec8 delta_prior; // = state-state_prior (E_prior = (delta_prior)' * diag(prior) * (delta_prior)
|
||||||
|
Vec8 delta; // state - state_zero.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<EFPoint*> points;
|
||||||
|
FrameHessian* data;
|
||||||
|
int idx; // idx in frames.
|
||||||
|
|
||||||
|
int frameID;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
1346
src/OptimizationBackend/MatrixAccumulators.h
Normal file
1346
src/OptimizationBackend/MatrixAccumulators.h
Normal file
File diff suppressed because it is too large
Load Diff
63
src/OptimizationBackend/RawResidualJacobian.h
Normal file
63
src/OptimizationBackend/RawResidualJacobian.h
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of DSO.
|
||||||
|
*
|
||||||
|
* Copyright 2016 Technical University of Munich and Intel.
|
||||||
|
* Developed by Jakob Engel <engelj at in dot tum dot de>,
|
||||||
|
* for more information see <http://vision.in.tum.de/dso>.
|
||||||
|
* If you use this code, please cite the respective publications as
|
||||||
|
* listed on the above website.
|
||||||
|
*
|
||||||
|
* DSO is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* DSO is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with DSO. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "util/NumType.h"
|
||||||
|
|
||||||
|
namespace dso
|
||||||
|
{
|
||||||
|
struct RawResidualJacobian
|
||||||
|
{
|
||||||
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
|
||||||
|
// ================== new structure: save independently =============.
|
||||||
|
VecNRf resF;
|
||||||
|
|
||||||
|
// the two rows of d[x,y]/d[xi].
|
||||||
|
Vec6f Jpdxi[2]; // 2x6
|
||||||
|
|
||||||
|
// the two rows of d[x,y]/d[C].
|
||||||
|
VecCf Jpdc[2]; // 2x4
|
||||||
|
|
||||||
|
// the two rows of d[x,y]/d[idepth].
|
||||||
|
Vec2f Jpdd; // 2x1
|
||||||
|
|
||||||
|
// the two columns of d[r]/d[x,y].
|
||||||
|
VecNRf JIdx[2]; // 9x2
|
||||||
|
|
||||||
|
// = the two columns of d[r] / d[ab]
|
||||||
|
VecNRf JabF[2]; // 9x2
|
||||||
|
|
||||||
|
|
||||||
|
// = JIdx^T * JIdx (inner product). Only as a shorthand.
|
||||||
|
Mat22f JIdx2; // 2x2
|
||||||
|
// = Jab^T * JIdx (inner product). Only as a shorthand.
|
||||||
|
Mat22f JabJIdx; // 2x2
|
||||||
|
// = Jab^T * Jab (inner product). Only as a shorthand.
|
||||||
|
Mat22f Jab2; // 2x2
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user