实现思岚2D激光雷达正前方120度检测

下面是基于我们实验室遇到的问题和我的修改案例方法,仅供参考,对于实际问题实际分析。

之前搞得激光雷达不能检测正前方范围,下面是我修改的案例方法,不懂得可以留言问我。

1.遇到问题:激光雷达lidar.cpp代码中,检测角度if( dis_select[i]>0.05&& dis_select[i]<1.0 &&angle_select[i] < 111)只 检测到了左半部分的0度到111度,不能实现正前方的范围角度检测。

已解决:修改代码为int current_angle = i;

 if ((current_angle >= 300 && current_angle <= 360) || (current_angle >= 0 && current_angle <= 60)) {

          angle_select[i] = current_angle;

实现了激光雷达正前方120度(±60度)的检测。

2.遇到问题:虽然激光雷达实现正前方120度的检测,但是当目标物体正好位于0度到60度和300度到360度之间,那么角度相加除以有效点得到的角度就不准确(比如检测到四个有效点分别是3度,2度,358度,357度,这四个点相加除以4=180度。就不是我们想要的范围内的点。)只有单纯的0度到60度,或者300度到360度,才是准确的。

已解决:修改代码 

                int current_angle = i;

                if ((current_angle >= 300 && current_angle <= 360) || (current_angle >= 0 && current_angle <= 60)) {

                    angle_select[i] = current_angle;

                    dis_select[i] = raw_dis[i];

                }

            }

            raw_dis[i] = 0; // 清除原始数据

        }

        // 计算有效数据的数量和平均值

        for (int i = 0; i < CNT; i++) {

            if (dis_select[i] > 0.05 && dis_select[i] < 1.0 && angle_select[i] != 0) {

                validData++;

                float angle_rad = angle_select[i] * M_PI / 180.0;

                angle_x_sum += cos(angle_rad);

                angle_y_sum += sin(angle_rad); // 为了计算平均角度,代码将每个有效角度的余弦值(x 方向分量)和正弦值(y 方向分量)分别累加到 angle_x_sum 和 angle_y_sum。角度的余弦和正弦通过 cos(angle_rad) 和 sin(angle_rad) 计算,其中 angle_rad 是角度从度数转为弧度的结果。

            }

        }

        printf("有效数据数量: %d\n", validData);

        if (validData != 0) {

            float avg_angle_x = angle_x_sum / validData;

            float avg_angle_y = angle_y_sum / validData;// 使用累加的角度余弦和正弦值,计算出有效角度的 x 和 y 平均分量:

            float avg_angle = atan2(avg_angle_y, avg_angle_x) * 180.0 / M_PI;// 通过 atan2 函数计算出平均角度

            if (avg_angle < 0) {

                avg_angle += 360.0;// 如果计算得到的角度为负,则加 360 度,使其变为正值(确保角度在 0 到 360 度范围内)          

将代码修改为每个检测到的有效角度的正弦值和余弦值(X,Y),再它们分别相加后再除以有效点计算出平均值,再通过atan2 函数转换为角度,即可得到我们想要的角度值,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值