3D相机适配

来自MDCS wiki
Artheru讨论 | 贡献2025年3月10日 (一) 20:24的版本 (创建页面,内容为“引用Camera3D.dll,在工程中写一个类:MainIOObject : Camera3DIOObject,参考以下流程进行适配。 == 1.3D相机适配参数含义 == # 点云数据结构 '''public''' '''struct''' '''CameraPoint3D''' { '''public''' '''float''' X;//点云x '''public''' '''float''' Y;//点云y '''public''' '''float''' Z;//点云z '''public''' '''byte''' intensity; // 强度,0-255 '''public''' '''byte''' r, g, b; // rgb色彩,0-2…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

引用Camera3D.dll,在工程中写一个类:MainIOObject : Camera3DIOObject,参考以下流程进行适配。

1.3D相机适配参数含义

  1. 点云数据结构
public struct CameraPoint3D
{
    public float X;//点云x
    public float Y;//点云y
    public float Z;//点云z
    public byte intensity; // 强度,0-255
    public byte r, g, b; // rgb色彩,0-255
    public float depth;//深度
}
  1. 色彩模式
public enum Camera3dCloudColorMode
{
    Rgb = 0,
    Depth = 1,
    Intensity = 2,
    Solid = 3,
}

2.适配流程

//命名空间为3D相机名称
namespace XXX
{
    //继承3D相机父类
	public class MainIOObject : Camera3DIOObject
    {
        //启动方法,若有参数则加入参数
        public void Start()
        {
            Console.WriteLine("Starting XXX");
            //点云显示模式
			CloudColorMode = Camera3dCloudColorMode.Intensity;
			new Thread(() =>
			{
    			while (true)
    			{
        			try
        			{
           			 Loop();
        			}
        			catch (Exception ex)
        			{
            			Console.WriteLine($"msg:{ex.Message}, stack:{ex.StackTrace}");
            			Thread.Sleep(1000);
        			}
    			}
			}).Start();
        }
        private void Loop()
        {
        	//解析相机数据,赋值给cachedPoints
            //.....解析部分.....
            
            //帧号+1,output数据
            frame += 1;
			scanC += 1;
			Output();
        }
    }
}

启动相机

在Medulla目录下startup.iocmd中增加以下代码

//io load xxx.dll时,会寻找dll里面class MainIOObject并实例化相应的对象赋值给等号左侧的3dcam
3dcam = io load plugins/xxx.dll
////Start对应Start函数,传的参数放在后面,空格隔开
3dcam Start