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

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

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

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

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

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

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

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

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

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

结合结构图:

一、auv_server.py

1、作为center_cerver的服务器,通过端口8088与其通信

self.auv_ip = '192.168.1.111'
self.auv_port = 8088
...
# tcp server setting
self.auv_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.auv_server.bind((self.auv_ip, self.auv_port))
self.auv_server.listen(5)
self.conn, self.addr = self.auv_server.accept()

2、作为client_test的服务器,通过端口8089与其通信

self.cmd_test_port = 8089
...
self.test_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.test_server.bind((self.auv_ip, self.cmd_test_port))
self.test_server.listen(5)

二、center_server.py

1、与auv_server通信

self.auv_ip = '192.168.1.111'            # the server ip
self.auv_port = 8088
...
# connect the auv
self.nx_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.nx_client.connect((self.auv_ip,self.auv_port))

2、作为识别模块yolov5_humble_fls的服务器,通过端口8080与其通信

self.nx_ip = '192.168.1.110'             # the board ip
self.data_port = 8080                     # yolo pos info & object 
...
# yolo server for the yolo module on the nx
self.yolo_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.yolo_server.bind((self.nx_ip, self.data_port))                          # bind the data port
self.yolo_server.listen(5)   

3、作为control_center的服务器,通过端口8081与其通信

self.control_center_port = 8081           # cmd and cmd callback of each module transfer port
# control_center server for the control_center module on the nx
self.control_center_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.control_center_server.bind((self.nx_ip, self.control_center_port))                          # bind the control_center port
self.control_center_server.listen(5)

4、作为声呐驱动模块sonar_node的服务器,通过端口8082与其通信

self.sonar_param_port = 8082              # sonar parameters setting cmd tansfer port
...
# sonar parameters parameters setting server for the sonar module on the nx
self.sonar_param_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sonar_param_server.bind((self.nx_ip, self.sonar_param_port))                          # bind the sonar port
self.sonar_param_server.listen(5)

三、yolov5_humble_fls模块(yolov5_sonar.py)

1、与center_server通信

# tcp parameters
self.declare_parameter('server_ip', '192.168.1.110')
self.server_host = self.get_parameter('server_ip').get_parameter_value().string_value
self.declare_parameter('server_port', 8080)
self.server_port = self.get_parameter('server_port').get_parameter_value().integer_value
...
# establish tcp link
try:
    self.yolo_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.yolo_client.connect((self.server_host, self.server_port))
except Exception as e:
    tcp_error = "connection error... " + str(self.server_host) + " : " + str(self.server_port)
    print("\033[31;1m %s %s\033[0m" %(tcp_error,e))

IP和端口均可在yolov5_humble_fls.yaml中设置。

四、control_center.py

1、与center_server通信

self.nx_ip = '192.168.1.110'
self.cmd_port = 8081

self.cmd_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)                           # create TCP/IP socket
self.cmd_client.connect((self.nx_ip, self.cmd_port))

五、声呐模块sonar node同理

代码整理后的ROS2的版本我进行测试时只在一台台式机上进行,所以各个IP都是相同的。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值