精华内容
下载资源
问答
  • DSO

    千次阅读 2017-10-09 19:24:37
    这两天视觉SLAM界的大新闻就是Direct Sparse Odometry(DSO)开源了,小伙伴们都迫不及待的赶紧上手撩了一下,论文下载地址请戳。为了紧跟学术前沿,我们此篇文章将作为学习DSO的一个开端,和大家一起来前排感受下Prof...

    论文下载地址请戳。为了紧跟学术前沿,我们此篇文章将作为学习DSO的一个开端,和大家一起来前排感受下Prof. Cremers 门派大弟子Engel博士的新绝学。文章将分为四部分,DSO的安装,DSO在公共数据集上的运行,DSO在自己数据集上的运行,DSO在实时摄像头下的运行。

    DSO的安装

    DSO依赖项很少,只有Eigen3,pangolin,opencv等少数几个大家都已经很熟悉的库,作者的github页面上对安装DSO做了很详细说明,DSO下载以及安装链接。因此,安装DSO极为容易:
    1.下载DSO源代码到相应文件路径,比如我的/home/lhu/DSO

    2.安装suitesparse and eigen3 (必需)

    sudo apt-get install libsuitesparse-dev libeigen3-dev

    3.安装opencv. DSO对opencv依赖很少,仅仅读或者写图像等一些简单操作。

    sudo apt-get install libopencv-dev

    4.安装pangolin. 强烈推荐安装,考虑到ORB_SLAM中也选择pangolin作为显示工具,而使用也非常方便,因此建议大家学习。
    安装教程请移步pangolin的github主页

    5.安装ziplib. 建议安装,DSO用这个库来解压读取数据集压缩包中的图片,这样就不要每次都把下再的图片数据集进行解压了。

    sudo apt-get install zlib1g-dev
    cd thirdparty #找到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

    6.编译DSO.

    cd /home/lhu/DSO/dso
    mkdir build
    cd build
    cmake ..
    make -j4

    至此,不出意外的话,DSO将安装完成。

    在TUM单目数据集上运行DSO

    请下载TUM数据集,地址。然后切换到DSO的bin目录下,使用下列命令执行程序。

    cd /home/lhu/DSO/dso/build/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

    其中files为数据集图片压缩包,calib为相机内参数文件,gamma和vignette为相机的一些特性参数,光度标定文件。mode为DSO模式切换,如0为包含光度表达文件,1为只包含内参数,2为没有畸变参数. preset为设定DSO运行时的参数,如选取的像素点个数等等。preset=3是preset=0的5倍速运行DSO。
    数据集运行结果如下:
    这里写图片描述

    在自己单目数据集上运行DSO

    可能你平常实验中用自己的摄像头采集了一些数据,你手头只有图片,以及摄像头内参数,照样可以测试下DSO会表现如何。

    1.将自己内参数写入自己的camera.txt下,比如使用opencv或者matlab标定的针孔相机模型。我的样例如下:

    446.867338 446.958766 298.082779 234.334299 -0.324849 0.1205156 -0.000186 -0.000821
    640 480
    crop
    640 480

    第一行为fx fy cx cy d0 d1 d2 d3.

    2.准备自己数据集的图片,注意图片名为6位,不足6位的补零,如下图所示。c++可以通过setw(6)等指令来实现。
    这里写图片描述

    3.运行

    ./dso_dataset files=/home/lhu/bagfiles/img/ calib=/home/lhu/DSO/camera.txt mode=1

    在一个手持相机步行前进,相机朝向地毯的数据集上运行结果示意图如下
    这里写图片描述

    用自己摄像头实时运行DSO (roubuild版)

    Engel同时发布了dso_ros,用ROS来实时获取图片,程序代码很简短,实际上它是作者提供的一个如何把DSO当做一个黑盒子来使用的样例。根据dso_ros的代码,你完全可以抛开ros,用opencv获取图片,然后去调用dso。dso_ros的下载地址,下载时要注意现在已经有了rosbuild和catkin两个版本。Engel他们可能使用ROS比较早,所以熟悉rosbuild那一套,lsdslam, dvoslam等等他们的很多代码都是rosbuild去编译而不是catkin。好在, ros indigo两个版本都支持,如果你只有catkin_ws工作空间,请使用dso_ros的catkin版本。我这里使用rosbuild版本进行安装,也希望大家学会indigo下的rosbuild编译:
    1.假设你已经创建了rosbuild_ws工作空间(如果你不知道如何让rosbuild和catkin的工作空间共存,请参考这里),将dso_ros下载到rosbuild_ws/package/文件夹下.

    2.在我的使用过程中需要对下载下来的dso_ros进行两步修改:

    1.修改cmake.list中bin文件路径
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    如果不修改,编译生成的bin将会存在build目录下,rosrun会找不到
    2.修改manifest.xml
    添加语句 depend package=”roscpp”

    3.编译

    export DSO_PATH=/home/lhu/DSO/dso
    rosmake dso_ros

    4.运行

    1.启动roscore
    2.使用ROS工具包usb_cam获取图像,关于usb_cam的安装请自行搜索
     roslaunch usb_cam webcam.launch
    3.运行dso
     rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=/home/lhu/DSO/camera.txt mode=1

    运行结果如下:
    这里写图片描述




    用自己摄像头实时运行DSO (catkin版)

    利用作者发布的dso_ros运行DSO(ros安装请自行搜索)下载地址。 作者提供了rosbuildcatkin两个版本的程序包,如果你使用catkin_ws工作空间,请使用dso_roscatkin版本。如果使用rosbuild去编译,请使用rosbuild版本,这里使用catkin版本。

    1) 安装编译dso_ros:

    1. mkdir -p ~/catkin_ws/src  
    2. cd ~/catkin_ws/src  
    3. git clone https://github.com/JakobEngel/dso_ros.git  
    4. cd ..
    5. export DSO_PATH=/home/lhu/Documents/dso/
    6. catkin_make  

    2) 安装编译usb_cam

    1. cd ~/catkin_ws/src  
    2. git clone https://github.com/bosch-ros-pkg/usb_cam.git   
    3. cd ..  
    4. catkin_make  
    5. source ~/catkin_ws/devel/setup.bash  

    3) 运行dso

    修改相机参数文件

         gedit ~/catkin_ws/src/dso_ros/camera.txt
    再弹出的窗口中输入:

    1. 446.867338 446.958766 298.082779 234.334299 -0.324849 0.1205156     -0.000186 -0.000821  
    2. 640 480  
    3. crop  
    4. 640 480  
    第一行是相机的内参,从左到右的8个数为fx fy cx cy k1 k2 r1 r2,第二行为输 入图像的宽和高,根据你标定的相机参数修改。

    新开一个终端   

    1. Roscore  

    再开一个终端

    1. source ~/catkin_ws/devel/setup.bash  
    2. roslaunch usb_cam usb_cam-test.launch  

    再开一个终端

    1. source ~/catkin_ws/devel/setup.bash  
    2. rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=/home/hyj/DSO/camera.txt mode=1  


     DSO安装已经介绍完了,整体来说比较简单,DSO采用的直接法,效果很不错。在接下来的文章将对DSO做详细剖析。



    展开全文
  • dso dso开发资料

    2010-10-29 10:44:45
    dso开发资料, 有demo, dso实例 dso说明文档 dso资料
  • DSO 初探

    万次阅读 多人点赞 2016-11-15 21:52:14
    这两天视觉SLAM界的大新闻就是Direct Sparse Odometry(DSO)开源了,小伙伴们都迫不及待的赶紧上手撩了一下,论文下载地址请戳。为了紧跟学术前沿,我们此篇文章将作为学习DSO的一个开端,和大家一起来前排感受下Prof...

    首先给大家推荐微信公众号–泡泡机器人,内容包括各类SLAM技术的视频讲解和原理解析文章。该博客内容发表在泡泡机器人公众号上,请尊重泡泡机器人公众号的版权声明。
    泡泡机器人文章链接

    这两天视觉SLAM界的大新闻就是Direct Sparse Odometry(DSO)开源了,小伙伴们都迫不及待的赶紧上手撩了一下,论文下载地址请戳。为了紧跟学术前沿,我们此篇文章将作为学习DSO的一个开端,和大家一起来前排感受下Prof. Cremers 门派大弟子Engel博士的新绝学。文章将分为四部分,DSO的安装,DSO在公共数据集上的运行,DSO在自己数据集上的运行,DSO在实时摄像头下的运行。

    DSO的安装

    DSO依赖项很少,只有Eigen3,pangolin,opencv等少数几个大家都已经很熟悉的库,作者的github页面上对安装DSO做了很详细说明,DSO下载以及安装链接。因此,安装DSO极为容易:
    1.下载DSO源代码到相应文件路径,比如我的/home/hyj/DSO

    2.安装suitesparse and eigen3 (必需)

    sudo apt-get install libsuitesparse-dev libeigen3-dev

    3.安装opencv. DSO对opencv依赖很少,仅仅读或者写图像等一些简单操作。

    sudo apt-get install libopencv-dev

    4.安装pangolin. 强烈推荐安装,考虑到ORB_SLAM中也选择pangolin作为显示工具,而使用也非常方便,因此建议大家学习。
    安装教程请移步pangolin的github主页

    5.安装ziplib. 建议安装,DSO用这个库来解压读取数据集压缩包中的图片,这样就不要每次都把下再的图片数据集进行解压了。

    sudo apt-get install zlib1g-dev
    cd thirdparty #找到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

    6.编译DSO.

    cd /home/hyj/DSO/dso
    mkdir build
    cd build
    cmake ..
    make -j

    至此,不出意外的话,DSO将安装完成。

    在TUM单目数据集上运行DSO

    请下载TUM数据集,地址。然后切换到DSO的bin目录下,使用下列命令执行程序。

    cd /home/hyj/DSO/dso/build/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

    其中files为数据集图片压缩包,calib为相机内参数文件,gamma和vignette为相机的一些特性参数,光度标定文件。mode为DSO模式切换,如0为包含光度表达文件,1为只包含内参数,2为没有畸变参数. preset为设定DSO运行时的参数,如选取的像素点个数等等。preset=3是preset=0的5倍速运行DSO。
    数据集运行结果如下:
    这里写图片描述

    在自己单目数据集上运行DSO

    可能你平常实验中用自己的摄像头采集了一些数据,你手头只有图片,以及摄像头内参数,照样可以测试下DSO会表现如何。

    1.将自己内参数写入自己的camera.txt下,比如使用opencv或者matlab标定的针孔相机模型。我的样例如下:

    446.867338 446.958766 298.082779 234.334299 -0.324849 0.1205156 -0.000186 -0.000821
    640 480
    crop
    640 480

    第一行为fx fy cx cy d0 d1 d2 d3.

    2.准备自己数据集的图片,注意图片名为6位,不足6位的补零,如下图所示。c++可以通过setw(6)等指令来实现。
    这里写图片描述

    3.运行

    ./dso_dataset files=/home/hyj/bagfiles/img/ calib=/home/hyj/DSO/camera.txt mode=1

    在一个手持相机步行前进,相机朝向地毯的数据集上运行结果示意图如下
    这里写图片描述

    用自己摄像头实时运行DSO

    Engel同时发布了dso_ros,用ROS来实时获取图片,程序代码很简短,实际上它是作者提供的一个如何把DSO当做一个黑盒子来使用的样例。根据dso_ros的代码,你完全可以抛开ros,用opencv获取图片,然后去调用dso。dso_ros的下载地址,下载时要注意现在已经有了rosbuild和catkin两个版本。Engel他们可能使用ROS比较早,所以熟悉rosbuild那一套,lsdslam, dvoslam等等他们的很多代码都是rosbuild去编译而不是catkin。好在, ros indigo两个版本都支持,如果你只有catkin_ws工作空间,请使用dso_ros的catkin版本。我这里使用rosbuild版本进行安装,也希望大家学会indigo下的rosbuild编译:
    1.假设你已经创建了rosbuild_ws工作空间(如果你不知道如何让rosbuild和catkin的工作空间共存,请参考这里),将dso_ros下载到rosbuild_ws/package/文件夹下.

    2.在我的使用过程中需要对下载下来的dso_ros进行两步修改:

    1.修改cmake.list中bin文件路径
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    如果不修改,编译生成的bin将会存在build目录下,rosrun会找不到
    2.修改manifest.xml
    添加语句 depend package=”roscpp”

    3.编译

    export DSO_PATH=/home/hyj/DSO/dso
    rosmake dso_ros

    4.运行

    1.启动roscore
    2.使用ROS工具包usb_cam获取图像,关于usb_cam的安装请自行搜索
     roslaunch usb_cam webcam.launch
    3.运行dso
     rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=/home/hyj/DSO/camera.txt mode=1

    运行结果如下:
    这里写图片描述

    DSO的安装演示已经讲完了,个人感觉效果很棒,直接法的又一力作,非常值得入坑,在后续的文章中将对DSO进行一一剖析,敬请期待。

    【版权声明】泡泡机器人SLAM的所有文章全部由泡泡机器人的成员花费大量心血制作而成的原创内容,希望大家珍惜我们的劳动成果,转载请务必注明出自【泡泡机器人SLAM】微信公众号,否则侵权必究!同时,我们也欢迎各位转载到自己的朋友圈,让更多的人能否进入到SLAM这个领域中,让我们共同为推进中国的SLAM事业而努力!
    【注】商业转载请联系刘富强(liufuqiang_robot@hotmail.com)进行授权。普通个人转载,请保留版权声明,并且在文章下方放上“泡泡机器人SLAM”微信公众账号的二维码即可。

    展开全文
  • DSO545 这是我的DSO545存储库
  • DSO 数据岛例子 QQ:292258449 DSO 数据岛例子 DSO 数据岛例子 DSO 数据岛例子
  • 理解下DSO/ADSO

    2021-01-22 12:05:12
    文章目录DSO里都有啥DSO有哪几类标准写优化直接更新 DSO里都有啥 DSO它是作为一个表来看的,首先来理解下两个单词:fields是字段,figure是数值。 我把它里面的所有字段分为,关键代码字段,数据字段,关键值字段。...

    说出来不怕丢人,我一直都不理解。

    可能是一直都没静下心来研究,所以一直都是糊里糊涂的。
    这都到ADSO了,我也还是没完全理解。
    所谓欲速则不达。反正快也快不了,不妨慢慢来看吧。

    DSO里都有啥

    在这里插入图片描述
    DSO它是作为一个表来看的,首先来理解下两个单词:fields是字段,figure是数值。
    我把它里面的所有字段分为,关键代码字段,数据字段,关键值字段。(就我自己这样分的,实际上现在的分法直接是key和数据字段,把关键值也包在数据字段里。)
    在数据字段之外,还有些不想加到数据字段的转换里面,但是又想要以后在报表中用到某些字段来过滤报表,那就添加导航属性吧。在特性的属性转换里面给值。
    在这里插入图片描述
    (是的,导航属性本身还可以拥有导航属性,因为导航属性也是一个特性,只是添加为另一个特性的属性。它本身也可以有属性的。但这里我们不支持去添加导航属性的导航属性的。)
    好,接上面,也就是说,我DSO里有一个成本中心的数据字段,转换连接的是数据源的成本中心字段。
    现在我觉得这个DSO的数据不够充分,我还想要公司代码。但是我DSO的数据源没有公司代码。
    好在成本中心主数据有,成本中心作为一个拥有主数据的特性,它有公司代码的属性。现在我把它的公司代码作为它的导航属性。这样就等于说,我虽然DSO里没有直接给你拉数据,但是我的数据字段里的成本中心有你这个公司代码属性。我也可以用这个公司代码的。最重要的是,我可以用这个公司代码来导航,来过滤或者下钻。这才是导航属性的作用。因为,其实只要我DSO里的数据有属性,我都可以展示它的属性,只不过导航属性是可以用来过滤下钻的。

    知道了这些数据,那接下来。还要知道,关键代码字段是唯一性的,也就是这个DSO的表中,所有关键代码字段的组合值,那必须是唯一的。这就导致了,除了关键代码之外的数据字段,是会被覆盖的。
    也就是假设这个DSO的关键代码是班级和学号,数据字段是姓名,值字段是分数。
    那么只要班级和学号相同,后一条的姓名不同的记录会覆盖掉前一条的姓名。
    至于关键值,可以是覆盖,可以是累加,也可以是不进行更改。

    现实的例子是,由于ERP系统中有些订单的运达方,交货日期,状态这些非数值会经常变化,所以除了订单号等等代码之外,需要对数据字段进行覆盖。

    DSO有哪几类

    这里有点错综复杂了,标准的是我们最经常用到的。
    现在的Model啥的是这样的:
    在这里插入图片描述
    也就是你可以直接选满足你的模型,它会自动给你选择合适的DSO类型。
    在这里插入图片描述
    从左边的建模属性,就能看到,换汤不换药。搞这么多类型,看的我头都晕了。
    那我们还是来看看。
    左边:
    activate data: 根据更新逻辑,把入栈表内容更新到激活表(标准DSO需要)
    write change log:增量更新需要的,数据保存在这里
    keep inbound data, extract from inbound table: 保存new表,从这个new表抽数据,但是它在激活数据下,,,我不知道啥意思,也没选过。
    unique data records: 这个是唯一数据记录,意思是你的信息源只提供唯一记录,这样设置提高性能了。就是说如果我DSO已经有了你这个记录,我绝不会再加载第二次了。否则会出现错误。
    **snapshot support:**支持快照。。。允许对全量更新的源的增量抽取。。。我不知道啥意思。。

    特殊类型:
    direct update: 没有new表了,直接通过API更新.我见过的更新方式就是直接建一个转换和DTP从文本文档更新,就不用激活。或者就是建一个报表,从报表里写值到DSO里。。
    all characteristics are key, reporting on union of inbound and active table.:这个就是和infocube一个意思了。所有特性都是主键,只有你有附加的增量,才加载你。
    planning mode: 跟直接更新经常一起选,不懂。
    inventory:支持存货,不懂。。

    标准

    不按照右边的模型选,那我直接勾,也行。
    在这里插入图片描述
    咱都知道,标准DSO会有三张表:active table/change log table/new table.
    增量呢,就是通过更改日志来实现的。因为你日志里,会有个字段叫:RECORDMODE记录模式
    在这里插入图片描述
    这个字段在每个请求的每个包的每条数据记录下都有,一般有更改都会成对出现。。。有前像后像
    N的是新的。不成对。。。
    如果有空的是后像,那会对应一个X前像,也就是说这条记录有更改。
    然后就靠这个来做后续增量更新。
    咋做呢,数据先到new table中的,激活后做的更改到change log表里。激活的数据到active表里。如果是关键值覆盖,那就会在激活的时候,在active表把旧数据删除只保留新数据,在changelog表会有一个对冲,只保留最新的数据。对冲的那条应该是X前像,然后新的那条是空的后像。
    在这里插入图片描述
    验证如下:
    new table加了第二条。未激活时是一条。
    在这里插入图片描述
    active table里还没激活这条值是45的。
    在这里插入图片描述
    change log也还是这样的:
    在这里插入图片描述
    我先来激活一下:
    new table激活后就空了。
    看active table:
    之前那条23的值被清空了。新的是 空的 recordmode,是后像。所以在change log里面会有对冲的一条-23的前像。
    在这里插入图片描述
    我们去change log去看:
    是有一个X的前像和N的对冲掉了,最后一条空是后像。
    在这里插入图片描述
    技术上可以将0RECORDMODE改成D来删除数据。

    这里提一嘴infocube和DSO的区别,Info Cube它是个多维星型模型。也就是说它是表示成多个表的。不是像DSO的一张明细的包含各个维度的表。
    info vube包含的表是多个维度表(16)和数据表。维度表的代码组合构成数据表的代码。而且info cube是没有累加的,只能覆盖。特性相同的情况下,关键值只更新到现有数据。所以一般我们不在info cube上处理啥,一般都是汇总级的在这里。不过现在不用鸟。。。
    简而言之,DSO负责合并或者协调数据。在这里插入图片描述
    同时,在DSO里面还有个分区和索引功能。
    按不同的字段分区,或者给经常访问的一些字段集合创建索引。

    还有一点就是在激活时生成SID标记,这样在DSO上创建报表的查看速度会更快。不过好像一般不在这个DSO上建报表。因为这样的话,你加载数据到DSO会也更新这个SID,就会耗时很长了。

    写优化

    不知道。

    直接更新

    在这里插入图片描述
    只有active表,下次详细写。

    展开全文
  • openssl DSO

    2020-09-24 17:32:17
    struct dso_st { DSO_METHOD *meth; /* * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use * anything but will need to cache the filename for use in the dso_bind * handler. All ...
    struct dso_st {
        DSO_METHOD *meth;
        /*
         * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use
         * anything but will need to cache the filename for use in the dso_bind
         * handler. All in all, let each method control its own destiny.
         * "Handles" and such go in a STACK.
         */
        STACK_OF(void) *meth_data;
        CRYPTO_REF_COUNT references;
        int flags;
        /*
         * For use by applications etc ... use this for your bits'n'pieces, don't
         * touch meth_data!
         */
        CRYPTO_EX_DATA ex_data;
        /*
         * If this callback function pointer is set to non-NULL, then it will be
         * used in DSO_load() in place of meth->dso_name_converter. NB: This
         * should normally set using DSO_set_name_converter().
         */
        DSO_NAME_CONVERTER_FUNC name_converter;
        /*
         * If this callback function pointer is set to non-NULL, then it will be
         * used in DSO_load() in place of meth->dso_merger. NB: This should
         * normally set using DSO_set_merger().
         */
        DSO_MERGER_FUNC merger;
        /*
         * This is populated with (a copy of) the platform-independent filename
         * used for this DSO.
         */
        char *filename;
        /*
         * This is populated with (a copy of) the translated filename by which
         * the DSO was actually loaded. It is NULL iff the DSO is not currently
         * loaded. NB: This is here because the filename translation process may
         * involve a callback being invoked more than once not only to convert to
         * a platform-specific form, but also to try different filenames in the
         * process of trying to perform a load. As such, this variable can be
         * used to indicate (a) whether this DSO structure corresponds to a
         * loaded library or not, and (b) the filename with which it was actually
         * loaded.
         */
        char *loaded_filename;
        CRYPTO_RWLOCK *lock;
    };
    

    meth:指出了操作系统相关的动态库操作函数。
    meth_data:堆栈中存放了加载动态库后的句柄。
    reference:引用计数,DSO_new的时候置1,DSO_up_ref时加1,DSO_free时减1。
    当调用DSO_free时,只有当前的references为1时才真正释放meth_data中存放的句柄。
    flag:与加载动态库时加载的文件名以及加载方式有关,用于DSO_ctrl函数。
    DSO_convert_filename:当加载动态库时会调用DSO_convert_filename函数来确定所加载的文件。而DSO_convert_filename函数会调用各个系统自己的convert函数来获取这个文件名。
    对于flag有三种种操作命令:设置、读取和或的关系,对应定义如下:
    #define DSO_CTRL_GET_FLAGS 1
    #define DSO_CTRL_SET_FLAGS 2
    #define DSO_CTRL_OR_FLAGS 3
    而flag可以设置的值有如下定义:
    #define DSO_FLAG_NO_NAME_TRANSLATION 0x01
    #define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02
    #define DSO_FLAG_UPCASE_SYMBOL 0x10
    #define DSO_FLAG_GLOBAL_SYMBOLS 0x20
    意义说明如下:
    DSO_FLAG_NO_NAME_TRANSLATION
    加载的文件名与指定的文件名一致,不加后缀.dll(windows)或.so(linux或unix)。
    DSO_FLAG_NAME_TRANSLATION_EXT_ONLY
    加载的文件名会加上lib串,比如用户加载eay32,真正加载时会加载libeay32(适用于linux或unix)。
    DSO_FLAG_UPCASE_SYMBOL
    适用于OpenVMS。
    DSO_FLAG_GLOBAL_SYMBOLS
    适用于unix,当在unix下调用加载函数dlopen时,参数会被或上RTLD_GLOBAL。
    ex_data:扩展数据,没有使用。
    name_converter::指明了具体系统需要调用的名字计算函数。
    loaded_filename:指明了加载动态库的全名。

    实例:

    #include "/usr/include/openssl/opensslconf.h"
    #include <openssl/dso.h>
    #include <openssl/bio.h>
    
    #include <stdio.h>
    
    typedef BIO *(*BIO_newx) (const BIO_METHOD *method);
    typedef int (*BIO_freex)(BIO *method);
    int	main()
    {
    	DSO		*d;
    	void			(*f1)();
    	void			(*f2)();
    	BIO		*test;
    	
    	BIO_newx BIOnew;
    	BIO_freex BIOfree;
    	
    	d=DSO_new();
    	if (d == NULL) {
    		printf("DSO_new err \n");
    		return -1;
    	}
    	//d=DSO_load(d,"/home/haisi/zy/test/libeay32.dll",NULL,0);
    	d=DSO_load(NULL,"/usr/local/openssl/lib/libcrypto.so.1.1",NULL,0);
    	if (d == NULL) {
    		printf("DSO_load err\n");
    		return -1;
    	}
    
    	f1=DSO_bind_func(d,"BIO_new");
    	f2=DSO_bind_func(d,"BIO_free");
    	BIOnew=(BIO *(*)(const BIO_METHOD *))f1;
    	BIOfree=(int (*)(BIO *method))f2;
    	test=BIOnew(BIO_s_file());
    
    	BIO_set_fp(test,stdout,BIO_NOCLOSE);
    	BIO_puts(test,"abd\n\n");
    
    	BIOfree(test);
    
    	DSO_free(d);
    	return 0;
    }
    
    

    通过: nm -D libcrypto.so.1.1 > lso.txt 查看so中的函数

    展开全文
  • DSO试跑

    2020-09-21 16:35:24
    DSO DSO(Direct Sparse Odometry)是慕尼黑工业大学TUM计算机视觉实验室的雅各布.恩格尔博士,于2016年发布的一个视觉里程计方法. 在SLAM领域,DSO属于稀疏直接法,据论文称能达到传统特征点法的五倍速度(需要降低图像...
  • 双目DSO

    千次阅读 2018-10-24 15:53:19
    Stereo DSO: Large-Scale Direct Sparse Visual Odometry with Stereo Cameras 代码 官方未开源。 地平线智能驾驶团队的工作:https://github.com/HorizonAD/stereo_dso 相关资料 DSO:...
  • DSO2150驱动

    2017-08-10 17:13:06
    示波卡DSO2150USB驱动
  • DSO工具包-设计系统van het Digitaal Stelsel Omgevingswet(DSO) De DSO Toolkit的最佳文档和技巧。 Daarnaast的工具,以及CSS的Web组件。 De Web Components发布Angular en React包装器,ZIE问题#915。 可交付...
  • DSO/dso_ros

    2018-11-17 11:32:37
    元学习论文总结||小样本学习论文总结 2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ...https://github.com/JakobEngel/dso 2.安装依赖 sudo apt-get install libsui...
  • 参考链接: 1.https://github.com/uoip/pangolin 2.... 3.https://github.com/HorizonAD/stereo_dso 一.下载源码(Dso/Stereo Dso) 双目DSO git clone htt...
  • DSO: Direct Sparse Odometry For more information see https://vision.in.tum.de/dso 1. Related Papers Direct Sparse Odometry, J. Engel, V. Koltun, D. Cremers, In arXiv:1607.02565, 2016 A ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,904
精华内容 1,561
关键字:

dso