前视声呐目标识别定位(四)-代码解析之启动识别模块

本文系列详细介绍了前视声呐目标识别定位的技术,包括启动识别模块、声呐参数调整、通信机制以及YOLO在ROS中的应用,通过代码实例展示整个过程。
摘要由CSDN通过智能技术生成

     

前视声呐目标识别定位(一)-基础知识

前视声呐目标识别定位(二)-目标识别定位模块   

前视声呐目标识别定位(三)-部署至机器人

前视声呐目标识别定位(四)-代码解析之启动识别模块

前视声呐目标识别定位(五)-代码解析之修改声呐参数

前视声呐目标识别定位(六)-代码解析之目标截图并传输

前视声呐目标识别定位(七)-代码解析之录制数据包
 

前视声呐目标识别定位(八)-代码解析之各模块通信

前视声呐目标识别定位(九)-声呐驱动

以启动识别模块为例,其余关闭识别模块,启动和关闭声呐模块,启动和关闭离线数据播放同理。

1、client_test.py

python3 clien_test.py 1 1

if cmd == str(1):
    print("sent the yolo start cmd...")
    arrBuff = bytearray(b'\xee\xaa\xee\xaa\xee\xff\xee\xff')

在协议文件中,启动的协议为:

故模块将该数据包发送至auv_server。

2、auv_server.py

def test_cmd(self):
    while True:
        self.test_conn, self.test_addr = self.test_server.accept()
        test_cmd_msg = self.test_conn.recv(1024)
        if len(test_cmd_msg)>0:
            self.conn.send(test_cmd_msg)

直接将指令转发至center_server

3、center_sever.py

# send the control_center cmd from auv to the control_center module on nx
def recv_control_center_msg(self):
    while True:          
        cmd_msg = self.nx_client.recv(1024)
        if len(cmd_msg) > 3:
            # send the control_center cmd to the control_center module
            if cmd_msg[-4:] == b'\xee\xff\xee\xff':
                self.control_center_socket.send(cmd_msg)
            # send the sonar parameters cmd to the sonar module
            elif cmd_msg[-4:] == b'\xee\xaa\xee\xff':
                self.sonar_param_socket.send(cmd_msg)
            else:
                print("cmd from auv error, no such cmd...")

根据‘\ee\ff\ee\ff‘判断为不带参数的指令,转control_center.py

4、control_center.py

def rcev_cmd(self):
...

    # start yolov5_ros ros2 launch
    if recvmsg[0:4] == self.start_yolo_msg[0:4]:
        # yolo is running, continue
        if self.yolo_running:
            print("yolo is running...")
            # callback the cmd
            self.send_cmd(self.yolo_is_running)
        # no yolo is running, start yolo
        else:
            print("start yolo...")
            self.yolo_subprocess = subprocess.Popen(self.start_yolo_cmd, shell=True, executable="/bin/bash")
            self.yolo_running = True
            self.send_cmd(self.start_yolo_msg)
....

根据”\ee\aa\ee\aa”判断为启动识别程序。

如果识别程序没有运行,执行

self.start_yolo_cmd = 'cd ~/yolov5_humble_fls_tcp && source install/setup.bash && ros2 launch yolov5_humble_fls start.launch.py'

反馈信息至auv_server.py,self.cmd_callback_header + self.start_yolo_msg

即/ee/ff/ee/ff/ee/aa/ee/aa/ee/aa/ee/ff

5、auv_server.py

# cmd callback state msg
if pkg_head == b'\xee\xff\xee\xff':
    print(self.cmd_callback_state[recv_msg[4:8]])

根据\ee\ff\ee\ff判断为反馈信息,根据\ee\aa\ee\aa判断为识别程序成功启动信息

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用纯方位法声呐进行目标定位时,可以使用MATLAB编写代码来实现。以下是一个简单的示例代码,用于说明基本的实现方法: ```matlab % 声呐参数 fs = 1000; % 采样率 c = 1500; % 声速 N = 64; % 接收阵元个数 d = 0.5; % 接收阵元间距 % 目标参数 theta = 30; % 目标方位角(单位:度) R = 100; % 目标距离(单位:米) % 生成接收信号 t = (0:N-1) / fs; s = exp(1i * 2 * pi * R / c * sin(theta/180*pi) * t); % 声呐接收信号矩阵 X = zeros(N, N); % 声呐接收信号模拟 for n = 1:N % 计算接收阵元位置 x = (n-1) * d; % 计算接收信号延迟 tau = 2 * x / c * sin(theta/180*pi); % 接收信号加入延迟 s_t = s .* exp(1i * 2 * pi * fs * tau); % 添加噪声(可选) noise = randn(size(s_t)) * 0.1; s_t = s_t + noise; % 存储接收信号 X(:, n) = s_t.'; end % 基于接收信号进行目标定位 angle_range = -90:0.5:90; % 方位角范围 correlation = zeros(size(angle_range)); for i = 1:length(angle_range) % 计算目标方位角 target_theta = angle_range(i); % 计算目标延迟 target_tau = 2 * d / c * sin(target_theta/180*pi); % 生成目标信号 target_signal = exp(1i * 2 * pi * fs * target_tau * (0:N-1).'); % 计算相关性 correlation(i) = abs(target_signal' * X(:, 1)); end % 绘制相关性曲线 figure; plot(angle_range, correlation); xlabel('方位角(度)'); ylabel('相关性'); title('目标定位结果'); ``` 这段代码实现了一个简单的单目标定位过程,基于纯方位法声呐的原理。需要注意的是,这只是一个示例代码,实际应用中可能需要根据具体的需求进行修改和优化。 希望这个示例可以帮助到您!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值