2020-2-6 在官方的基础上修改了ROS节点,实现了左右目相机数据的读取,详细的说明请参见博客:https://blog.csdn.net/crp997576280/article/details/104246265
cd catkin_ws/src
git clone https://gitee.com/cenruping/indemind_stereo.git
cd ..
source devel/setup.bash
catkin_make
编译成功以后拷贝文件libslam.so 、headset.yaml 和 libusbdriver.so (这三个文件在ROS包的lib目录下面-- indemind_stereo/lib)到目录***"~/catkin_ws/devel/lib/indemind_stereo"***下面
必须要在超级用户权限下面启动ROS节点,相机必须插在USB3.0端口上面
sudo -s
cd catkin_ws
source devel/setup.bash
roslaunch indemind_stereo stereo.launch
Binocular Vision Inertial Module
INDEMIND双目视觉惯性模组采用全局快门的2X1280X800@50FPS高清摄像头,可提供水平120°、垂向75°视场角,结合高帧率6轴IMU传感器,为SLAM等算法提供强有力前端数据采集能力。
本SDK提供了双目视觉惯性模组的开发接口及依赖环境。
已在以下环境下测试过:
Linux Ubuntu 16.04 gcc5.4 和 Ubuntu 18.04 gcc7.3
双目视觉惯性模组要求支持USB3.0接口,仅支持通过SDK获取数据。深度解算以插件形式存在
安装cmake
sudo apt-get install cmake
安装google-glog + gflags
sudo apt-get install libgoogle-glog-dev
安装BLAS & LAPACK
sudo apt-get install libatlas-base-dev
下载SDK https://github.com/INDEMIND/SDK-Linux
demo提供了点云数据获取及显示示例,如果要编译并成功运行点云示例,需要安装opencv_viz模块,然后打开DISPLAY_POINT_CLOUD
宏进行编译
创建SDK对象
CIMRSDK* pSDK = new CIMRSDK();
设置使用的SLAM
MRCONFIG config = { 0 };
strcpy(config.slamPath, "slam.dll");
config.bSlam = true;
获取模组图像数据
pSDK->RegistModuleCameraCallback(SdkCameraCallBack,NULL);
获取IMU数据
pSDK->RegistModuleIMUCallback(sdkImuCallBack,NULL);
获取SLAM结果
pSDK->RegistModulePoseCallback(sdkSLAMResult,NULL);
获取深度图和点云
pSDK->AddPluginCallback("pointcloud", "depth", CloudDataCallback, NULL);
回调函数中的pData是如下的一个数据结构:
struct DepthData {
double _time;
unsigned char* _depthImage; //深度图
size_t _number; //点云个数
point_xyz* _points; //点云坐标
};
释放资源
pSDK->Release();
delete pSDK;
注意:不要在以上回调函数里做延时比较多的操作,比如把数据写入文件等,否则会造成数据丢失,影响数据正确性等后果。 详细信息参考《双目惯性模组用户使用说明》。
用户可以自定义slam,并以动态库形式在运行时加载到SDK中。如果希望替换SDK内置的slam算法,请按照下述方式操作:
/* 在slam初始化的时候被调用,此时标定参数会通过参数传入 */
virtual bool Init(CameraCalibrationParam pParams);
/* SDK退出前调用Release,完成slam资源的释放 */
virtual void Release();
/* 初始化之后,会以1kHz的频率调用该接口,将IMU数据传入给自定义slam */
virtual void AddIMUAsync(double time, float accX, float accY, float accZ, float gyrX, float gyrY, float gyrZ);
/* 初始化之后,会以50Hz的频率调用该接口,将图像数据传入给自定义slam */
virtual void AddIMGAsync(double time, unsigned char* pLeft,unsigned char* pRight,int width,int height,int channel);
/* 初始化之后,会以1kHz的频率调用该接口,获取解算后的位姿数据 */
virtual SlamStatus GetPoseAsync(double* time, float* p, float* q);
/* SDK以默认指令调用该函数,以执行指定的slam操作,保留 */
virtual bool InvokeCommand(const char* commandName, void* pIn, void* pOut);
indem::ISlamPlugin* SlamFactory()
并返回Slam的实现。SDK会在运行时调用该接口,获得自定Slam对象。用户也可以添加自己的算法扩展到SDK中。demo\plugin中提供了一份示例,展示了如何添加自己的算法插件。所有的插件统一放置在plugin目录下:plugin文件夹下存放子文件夹,每个子文件夹存放着插件动态库及其依赖项,SDK会按照文件夹名字动态加载里头同名的dll/so,作为入口。
2019.3.29更新
2019.02.15更新
2019.1.16更新
MRSDK_VERSION
提升到32018.11.16更新
ImrModulePose
结构添加欧拉角MRSDK_VERSION
提升到2常见问题请参考FAQ
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。