SVL simulator 2021.3 Radar目标检测结果异常的解决方案

在使用SVL simulator 2021.3仿真器进行自动驾驶车辆模拟的过程中,为车辆添加官方默认的radar传感器,行人检测需要在运行模拟器的/AssetBundles/Pedestrians/YourOwnModel文件夹下添加经过Unity二次构建过的包。

SVL simulator 2021.3默认ROS Bridge存在bug,将导致模拟器运行面板INFO在radar检测到目标时持续报错"NullReferenceException: Object reference not set to an instance of an object",并且导致运行指令rostopic echo /YourRadarTopic时无法输出有效数据。

解决方案如下:

在SVL simulator官方库中找到ROS Bridge,clone到本地simulator源码中的/Assets/External/Bridges中,并修改其中RosConversions.cs中的如下内容:

public static Lgsvl.DetectedRadarObjectArray RosConvertFrom(DetectedRadarObjectData data)
        {
            var arr = new Lgsvl.DetectedRadarObjectArray()
            {
                header = new Ros.Header()
                {
                    seq = data.Sequence,
                    stamp = Conversions.ConvertTime(data.Time),
                    frame_id = data.Frame,
                },
                objects = new List<Lgsvl.DetectedRadarObject>(),
            };

            int count = 0;

            foreach (var obj in data.Data)
            {
                var det = new Lgsvl.DetectedRadarObject()
                {
                    id = count++,
                    sensor_aim = ConvertToRosVector3(obj.SensorAim),
                    sensor_right = ConvertToRosVector3(obj.SensorRight),
                    sensor_position = ConvertToRosPoint(obj.SensorPosition),
                    sensor_velocity = ConvertToRosVector3(obj.SensorVelocity),
                    sensor_angle = obj.SensorAngle,
                    object_position = ConvertToRosPoint(obj.Position),
                    object_velocity = ConvertToRosVector3(obj.Velocity),
                    object_relative_position = ConvertToRosPoint(obj.RelativePosition),
                    object_relative_velocity = ConvertToRosVector3(obj.RelativeVelocity),
                    object_collider_size = ConvertToRosVector3(obj.ColliderSize),
                    object_state = (byte)obj.State,
                    new_detection = obj.NewDetection,
                };

                arr.objects.Add(det);

                // r.objects.Add(new Lgsvl.DetectedRadarObject()
                // {
                //     id = count++,
                //     sensor_aim = ConvertToRosVector3(obj.SensorAim),
                //     sensor_right = ConvertToRosVector3(obj.SensorRight),
                //     sensor_position = ConvertToRosPoint(obj.SensorPosition),
                //     sensor_velocity = ConvertToRosVector3(obj.SensorVelocity),
                //     sensor_angle = obj.SensorAngle,
                //     object_position = ConvertToRosPoint(obj.Position),
                //     object_velocity = ConvertToRosVector3(obj.Velocity),
                //     object_relative_position = ConvertToRosPoint(obj.RelativePosition),
                //     object_relative_velocity = ConvertToRosVector3(obj.RelativeVelocity),
                //     object_collider_size = ConvertToRosVector3(obj.ColliderSize),
                //     object_state = (byte)obj.State,
                //     new_detection = obj.NewDetection,
                // });
            }
            return arr;
        }

将修改后的ROS Bridge经Unity二次构建后上传到云端配置中,为车辆添加新ROS Bridge,即可实现Radar传感器正常工作,检测目标并通过ROS Topic输出检测结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值