amov无人机连接;+数据传输;啊啊啊啊啊

news2024/11/16 1:22:01

socket传输数据:

局域网连接

连接---通信(命令行直接;+)--- 传输数据(socket)--传输内容:launch文件;

qgc连接;

1.局域网下的通信

1.1 局域网

厂家提供的方式是通过Homer图数传工具(硬件)构建的amov局域网实现通信连接.

好处是通信距离足够长,支持150m;坏处是"局部",无法访问互联网.

[IMAGE:homer连接]

根据这个原理,我尝试了通过个人局域网(即热点),建立通信连接.

[ 因为无人机本身带有机载电脑,而主机正常也就能连接热点和wifi ]

1.2个人热点[互联网下的局域网]

优点:便捷,且可访问互联网:

个人热点通常使用的确实是 WLAN(无线局域网)技术,它利用了无线技术(如Wi-Fi)来创建一个局域网络;

关键在于个人热点设备本身已经通过移动运营商的网络(如4G、5G)连接了互联网。

个人热点在此过程中扮演了中介的角色:

它将其他设备发出的请求转发给移动运营商的网络,并将响应返回给这些设备

[这意味着对于任何的报错输出你都可以去线上寻找答案(尤其是大模型AI)];

缺点是通信距离短,无人机飞远了数据传输有大延迟 ;

2.远程控制主机

2.1 GUi图形化界面--Nomachine

基于X11协议的远程桌面工具;

2.2 SSH 连接--命令行操控

连接:ssh建立连接需要账号和密码IP

[输入密码];

连接成功(如红框所示):

3.实操 --个人热点下实现ros无人机与PC传输gps经纬度

3.1实现局域网下的通信

开启手机热点,连接设备至少2个(个人PC和amov无人机机载电脑主机)

点击查看其配置(即IP):

知道ip,即可ping 查看是否能够通信;

比如我发现amov的IP地址为192.168.63.a;

1) ping尝试

ping 192.168.163.a

应有输出[代表ping通]:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128        
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

3.2连接无人机机载电脑(通过ssh)

[2.2 SSH 连接--命令行操控]

命令行下输入:

ssh amov@ 192.168.x.a 
#amov 为账户名 后面为其ip地址

输入密码;

登录成功;

3.3 启动节点[同时顺便连接qgc]

连接qgc流程:进入对应路径-更改脚本-启动脚本;

cd home/amov/p600_experiment/src/p600_experiment/launch_basic

vim p600_gps_onboard.launch

3.3.1将上图红框的ip改为要使用QGC的个人PC主机IP[如此才能实现与qgc的连接]

3.3.2随后执行该.launch脚本以启动节点:

roslaunch p600_gps_onboard.launch

脚本如下:

<!-- 本launch为使用px4_sender进行机载控制时的机载端启动脚本 -->
<launch>
	<!-- 启动MAVROS -->
	<!-- 不同机载电脑,注意修改fcu_url至正确的端口号及波特率 -->
	<node pkg="mavros" type="mavros_node" name="mavros" output="screen">
		<param name="fcu_url" value="/dev/ttyTHS0:921600" />
		<!--param name="gcs_url" value="udp://@192.168.31.46" / -->
		<param name="gcs_url" value="" />
		<param name="target_system_id" value="1" />
		<param name="target_component_id" value="1" />
		<rosparam command="load" file="$(find p600_experiment)/config/mavros_config/px4_pluginlists_gps.yaml" />
		<rosparam command="load" file="$(find p600_experiment)/config/mavros_config/px4_config_gps.yaml" />
	</node>

	<!-- 启动Prometheus代码 -->
	<!-- run the px4_pos_estimator.cpp -->
	<arg name="input_source" default="9"/>
	<arg name="rate_hz" default="30"/>
	<node pkg="prometheus_control" type="px4_pos_estimator" name="px4_pos_estimator" output="screen">
		<!-- 定位数据输入源 0 for vicon, 1 for 激光SLAM, 2 for gazebo ground truth, 3 for T265 -->
		<param name="input_source" value="$(arg input_source)" />
		<param name="rate_hz" value="$(arg rate_hz)" />
	</node>
	
	<!-- run the px4_sender.cpp -->
	<node pkg="prometheus_control" type="px4_sender" name="px4_sender" output="screen">
		<rosparam command="load" file="$(find p600_experiment)/config/prometheus_control_config/px4_sender_outdoor.yaml"/>
	</node>

	<!-- run the ground_station.cpp -->
	<node pkg="prometheus_station" type="ground_station" name="ground_station" output="screen" launch-prefix="gnome-terminal --tab --">	
	</node>

	<!-- run the ground_station_msg.cpp -->
	<node pkg="prometheus_station" type="ground_station_msg" name="ground_station_msg" output="screen" launch-prefix="gnome-terminal --tab --">	
	</node>
</launch>

3.3.3预期输出:

该cmd窗口顶端应该如下:

3.3.4 rostopic list 查看已启动节点:

白框即为涉及到gps的节点:

3.3.5 qgc成功连接:

(红框处应显示为连接成功)

3.3.6关于节点:

在ROS(Robot Operating System)中,节点(Nodes)是实现机器人功能的基本组成单元。

每个节点通常执行一个特定的任务,并且可以通过ROS的通信机制与其他节点进行数据交换。

以下是关于ROS节点的详细介绍以及一个简单的实例:

节点的基本概念:

  1. 节点定义

    • ROS节点是一个执行特定任务的进程,可以理解为ROS应用程序中的一个模块或者组件。
    • 每个节点都是一个独立的进程,可以通过ROS的通信机制与其他节点进行数据交换。
  2. 节点之间的通信

    • ROS节点通过话题(Topics)、服务(Services)、参数服务器(Parameter Server)以及动态重配置(Dynamic Reconfigure)进行通信。
    • 话题:是一种发布者-订阅者模型,节点可以发布(publish)消息到话题或者订阅(subscribe)话题接收消息。
    • 服务:允许节点请求某种特定的计算或操作,其他节点可以提供服务以响应这些请求。
    • 参数服务器:用于存储和获取ROS参数,节点可以动态地获取和修改这些参数。
    • 动态重配置:允许节点在运行时调整其参数,而不需要重启节点。
  3. 节点的编写

    • ROS节点可以使用多种编程语言编写,包括C++和Python。
    • 通常使用ROS提供的官方库(如roscpp和rospy)来编写节点,这些库提供了与ROS通信机制的高级接口。

示例:移动机器人中的ROS节点

假设有一个简单的移动机器人系统,包括以下几个ROS节点:

  1. 传感器数据获取节点

    • 功能:从机器人的传感器(例如激光雷达、相机)获取数据。
    • 通信方式:通过发布者(Publisher)发布激光数据到名为/scan的话题。
    • 实现:可以使用C++编写,订阅激光雷达数据并发布到/scan话题。
  2. 路径规划节点

    • 功能:根据机器人的当前位置和目标位置计算最优路径。
    • 通信方式:订阅机器人当前位置和目标位置的话题,并将路径信息发布到名为/path的话题。
    • 实现:可以使用Python编写,订阅/initial_pose/goal_pose话题,使用路径规划算法(如A*或Dijkstra算法)计算路径,并发布到/path话题。
  3. 运动控制节点

    • 功能:接收路径信息,并控制机器人实现运动。
    • 通信方式:订阅/path话题,控制机器人的底盘或运动执行器。
    • 实现:可以使用C++编写,订阅/path话题,调用运动控制库(如ROS MoveBase等)实现机器人的运动控制。
  4. 用户界面节点

    • 功能:提供交互界面,允许用户设定目标位置或查看机器人状态。
    • 通信方式:通过ROS服务接收用户设定的目标位置,并可以通过话题发布机器人的状态信息。
    • 实现:可以使用Python编写,提供简单的图形用户界面(GUI),通过ROS服务与其他节点进行通信。

3.3.7节点实例(p600_gps_onboard.launch):

<!-- 本launch为使用px4_sender进行机载控制时的机载端启动脚本 -->
<launch>
	<!-- 启动MAVROS -->
	<!-- 不同机载电脑,注意修改fcu_url至正确的端口号及波特率 -->
	<node pkg="mavros" type="mavros_node" name="mavros" output="screen">
		<param name="fcu_url" value="/dev/ttyTHS0:921600" />
		<!--param name="gcs_url" value="udp://@192.168.31.46" / -->
		<param name="gcs_url" value="" />
		<param name="target_system_id" value="1" />
		<param name="target_component_id" value="1" />
		<rosparam command="load" file="$(find p600_experiment)/config/mavros_config/px4_pluginlists_gps.yaml" />
		<rosparam command="load" file="$(find p600_experiment)/config/mavros_config/px4_config_gps.yaml" />
	</node>

	<!-- 启动Prometheus代码 -->
	<!-- run the px4_pos_estimator.cpp -->
	<arg name="input_source" default="9"/>
	<arg name="rate_hz" default="30"/>
	<node pkg="prometheus_control" type="px4_pos_estimator" name="px4_pos_estimator" output="screen">
		<!-- 定位数据输入源 0 for vicon, 1 for 激光SLAM, 2 for gazebo ground truth, 3 for T265 -->
		<param name="input_source" value="$(arg input_source)" />
		<param name="rate_hz" value="$(arg rate_hz)" />
	</node>
	
	<!-- run the px4_sender.cpp -->
	<node pkg="prometheus_control" type="px4_sender" name="px4_sender" output="screen">
		<rosparam command="load" file="$(find p600_experiment)/config/prometheus_control_config/px4_sender_outdoor.yaml"/>
	</node>

	<!-- run the ground_station.cpp -->
	<node pkg="prometheus_station" type="ground_station" name="ground_station" output="screen" launch-prefix="gnome-terminal --tab --">	
	</node>

	<!-- run the ground_station_msg.cpp -->
	<node pkg="prometheus_station" type="ground_station_msg" name="ground_station_msg" output="screen" launch-prefix="gnome-terminal --tab --">	
	</node>
</launch>

这是一个ROS launch文件,用于启动与机载控制相关的节点和程序。让我们逐个节点和参数来详细解释:

1. 启动 MAVROS

<node pkg="mavros" type="mavros_node" name="mavros" output="screen"> 
<param name="fcu_url" value="/dev/ttyTHS0:921600" /> 
<param name="gcs_url" value="" /> 
<param name="target_system_id" value="1" /> 
<param name="target_component_id" value="1" /> 
<rosparam command="load" file="$(find p600_experiment)/config/mavros_config/px4_pluginlists_gps.yaml" /> 
<rosparam command="load" file="$(find p600_experiment)/config/mavros_config/px4_config_gps.yaml" /> 
</node>
  • mavros_node: 这个节点来自 mavros 包,它与 PX4 Autopilot 系统通信,充当 ROS 和飞控单元之间的接口。
  • fcu_url: 指定飞控单元的串口设备及波特率,这里设置为 /dev/ttyTHS0:921600
  • gcs_url: 地面站 URL,如果有需要可以填入对应的值,但在这里是空白的。
  • target_system_id 和 target_component_id: 分别指定飞控单元的系统 ID 和组件 ID。
  • px4_pluginlists_gps.yaml 和 px4_config_gps.yaml: 加载了用于 MAVROS 的配置文件,配置 PX4 插件和参数。

2. 启动 Promethues 代码

<node pkg="prometheus_control" type="px4_pos_estimator" name="px4_pos_estimator" output="screen"> 
<param name="input_source" value="9" /> 
<param name="rate_hz" value="30" /> 
</node>
  • px4_pos_estimator: 这个节点估计无人机的位置,根据参数设置从不同的数据源获取位置数据,这里使用参数 input_source 来指定输入源为 9,可能代表特定的传感器或系统。
  • rate_hz: 设置节点运行的频率为 30Hz。
<node pkg="prometheus_control" type="px4_sender" name="px4_sender" output="screen"> 
<rosparam command="load" file="$(find p600_experiment)/config/prometheus_control_config/px4_sender_outdoor.yaml"/> 
</node>
  • px4_sender: 这个节点负责向 PX4 发送控制命令或数据。通过加载 px4_sender_outdoor.yaml 文件来配置节点所需的参数。

3. 启动地面站相关节点

<node pkg="prometheus_station" type="ground_station" name="ground_station" output="screen" launch-prefix="gnome-terminal --tab --"> 
</node> <node pkg="prometheus_station" type="ground_station_msg" name="ground_station_msg" output="screen" launch-prefix="gnome-terminal --tab --"> 
</node>
  • ground_station: 这个节点可能是一个地面站程序的一部分,用于与无人机或系统进行通信和控制。launch-prefix 设置了在新标签页中启动该节点。
  • ground_station_msg: 这个节点可能是用来处理地面站的消息传递和交互的程序。

3.2 订阅话题

GimbalBasic::GimbalBasic(ros::NodeHandle &nh)
{
    nh.param<std::string>("multicast_udp_ip", multicast_udp_ip, "224.0.0.88");
    this->communication_ = new Communication(nh);
    //【订阅】吊舱状态数据
    this->gimbal_state_sub_ = nh.subscribe("/gimbal/state", 10, &GimbalBasic::stateCb, this);
    //【订阅】跟踪误差
    this->vision_diff_sub_ = nh.subscribe("/gimbal/track", 10, &GimbalBasic::trackCb, this);
    //【发布】框选 点击 目标
    this->window_position_pub_ = nh.advertise<ground_station_bridge::WindowPosition>("/detection/bbox_draw", 1000);
    //【发布】吊舱控制
    this->gimbal_control_pub_ = nh.advertise<ground_station_bridge::GimbalControl>("/gimbal/control", 1000);
}

3.2.1 订阅(sub)话题实例 :

this->gimbal_state_sub_ = nh.subscribe("/gimbal/state", 10, &GimbalBasic::stateCb, this); 
this->vision_diff_sub_ = nh.subscribe("/gimbal/track", 10, &GimbalBasic::trackCb, this);
  • 这两行代码分别用来订阅两个不同的ROS话题。
  • gimbal_state_sub_ 订阅 /gimbal/state 话题,每次缓存10个消息,当有新消息时调用 GimbalBasic::stateCb 成员函数处理。
  • vision_diff_sub_ 订阅 /gimbal/track 话题,同样每次缓存10个消息,当有新消息时调用 GimbalBasic::trackCb 成员函数处理。
  • &GimbalBasic::stateCb 和 &GimbalBasic::trackCb 是成员函数指针,指向处理收到消息的回调函数。

3.2.2 查看所有话题:

rostopic list 是一个命令行工具命令,用于列出当前ROS系统中所有可用的话题(topics);

3.2.3 命令行终端获得gps话题的输出:

e.g.

rostopic echo /mavros/gpsstatus/gps1/raw

预期输出:

关于话题:

话题(topics)是一种基础的通信机制,用于在ROS节点之间传递消息。话题是一种发布者-订阅者(publisher-subscriber)模型的实现,允许节点(ROS程序)以异步的方式进行通信。以下是关于ROS话题的一些重要信息和特性:

1. 定义和命名

  • 话题名称: 每个话题都有一个唯一的名称,用于在整个ROS系统中标识该话题。话题名称以斜杠 / 开头,例如 /odom/scan 等。
  • 消息类型: 每个话题传递的消息具有特定的数据类型,如传感器数据、控制命令等。消息类型由 ROS 消息定义文件(.msg 文件)定义,并且在编译时生成。

2. 通信模式

  • 发布者(Publishers): 发布者节点向话题发布消息。多个节点可以同时发布到同一个话题。
  • 订阅者(Subscribers): 订阅者节点从话题订阅消息。多个节点可以同时订阅同一个话题。

3. 异步通信

  • ROS话题的通信是异步的,即发布者和订阅者之间不需要直接建立连接。发布者发布消息后,所有订阅该话题的节点都能接收到这些消息,而不需要发布者和订阅者同时在线。

3.3 通过socket传回[+内容筛选]

socket代码如下:

server:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import socket

# 设置服务器的 IP 地址和端口号
SERVER_IP ='192.168.79.60' #'10.128.72.152'#'192.168.1.134'#'192.168.231.77'
SERVER_PORT = 8082

# 创建一个 TCP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
client_socket.connect((SERVER_IP, SERVER_PORT))

# 设置超时时间为 5 秒
client_socket.settimeout(10)

while True:
    # # 发送 "rostopic echo" 命令给服务器
    # message = "rostopic echo"
    # client_socket.sendall(message.encode())
    # 手动输入消息
    message = input("请输入要发送的消息 ('q' to quit): ")
    if message == 'q':
        break
    # 发送消息给服务器
    client_socket.sendall(message.encode())
    # 接收服务器的响应
    try:
        response = client_socket.recv(4096)  # 增加缓冲区大小以确保完整接收响应
        if response:
            response_str = response.decode('gbk')
            print("从服务器收到的响应:", response_str)

            # 截取以“lat:”开头的行
            lat_lines = [line for line in response_str.split('\n') if line.startswith('lat:')]
            print("截取的 lat 行:")
            if lat_lines:
                for line in lat_lines:
                    print(line)
            else:
                print("没有找到以 'lat:' 开头的行")

            # 截取以“lon:”开头的行
            lon_lines = [line for line in response_str.split('\n') if line.startswith('lon:')]
            print("截取的 lon 行:")
            if lon_lines:
                for line in lon_lines:
                    print(line)
            else:
                print("没有找到以 'lon:' 开头的行")
        else:
            print("服务器没有响应")
    except socket.timeout:
        print("操作超时,请重试")



# 关闭连接
client_socket.close()
client[实现基本的实时输入通信]:
import socket

# 设置服务器的 IP 地址和端口号
SERVER_IP ='10.128.74.238'    #'192.168.1.123'
SERVER_PORT = 8080  # 端口号与服务器端口号一致

# 创建一个 UDP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:
    # 输入要发送的数据
    message = input("请输入要发送到服务器的消息(输入 'exit' 退出): \n GPS:")
    if message == 'exit':
        break

    # 发送数据
    client_socket.sendto(message.encode(), (SERVER_IP, SERVER_PORT))

    # 接收服务器的响应
    data, server_address = client_socket.recvfrom(1024)
    print(f"收到来自服务器 {server_address} 的响应:", data.decode())

# 关闭连接
client_socket.close()

3.4 传给本地数据库

[待补充]..

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1839712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

03 - matlab m_map地学绘图工具基础函数 - 设置坐标系(m_coord)

03 - matlab m_map地学绘图工具基础函数 - 设置坐标系&#xff08;m_coord&#xff09; 0. 引言1. m_proj使用方法2. 结语 0. 引言 上一篇介绍了m_proj函数用于初始化投影&#xff0c;本篇介绍的函数m_coord用于初始化地理坐标系或地磁坐标系&#xff0c;地理/地磁坐标系和投影…

图解Linux内核(基于6.x):解读Linux内存反向映射之匿名映射

文章目录 &#x1f4d1;前言一、匿名映射的mapping二、推荐阅读2.1 一图速览2.2 内容简介 &#x1f4d1;前言 内存映射中&#xff0c;我们经常讨论的是由虚拟内存定位物理内存&#xff08;也就是folio或者page&#xff09;&#xff0c;实际上在很多场景中&#xff08;比如内存回…

在Ubuntu中创建Ruby on Rails项目并搭建数据库

新建Rails项目 先安装bundle Ruby gem依赖项工具&#xff1a; sudo apt install bundle 安装Node.js: sudo apt install nodejs 安装npm 包管理器&#xff1a; sudo apt install npm 安装yarn JavaScript包管理工具&#xff1a; sudo apt install yarn 安装webpacker: …

微信小程序毕业设计-电影院订票选座系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

基于riscv架构的DAYU800开发板套件介绍

一、简介 润和-SCDAYU800 开发平台基于平头哥高性能 RISC-V 开源架构曳影 TH1520 芯片&#xff0c;集成4核高性能RISC-V处理器玄铁C910的平头哥曳影1520&#xff0c;AI算力达4TOPs支持蓝牙、音频、视频和摄像头等功能,支持多种视频输入输出接口,并提供丰富的扩展接口&#xff…

即时到账支付系统源码第四方支付平台源码(支付宝/QQ钱包/微信二维码收款+附配套软件)

即时到账支付系统源码第四方支付平台源码价值10万&#xff0c;支付宝/QQ钱包/微信二维码收款&#xff0c;附配套软件 开发语言&#xff1a;phpmysql 这个是一个可以跟码支付一样用自己的二维码收款的网站 还可以作为即时到账 代收款 或者易支付使用后台配置好就行&#xff…

Java基础 - 练习(三)打印空心菱形

Java基础练习 打印空心菱形&#xff0c;先上代码&#xff1a; public static void diamond() {//控制行数for (int i 1; i < 4; i) {//空格的个数for (int k 1; k < 4 - i; k) {System.out.print(" ");}//控制星星个数的时候和行有关for (int j 1; j <…

网络层 IP协议【计算机网络】【协议格式 || 分片 || 网段划分 || 子网掩码】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;前提 二&…

3.什么是计算机语言

什么是计算机语言 ? 计算机语言&#xff08;Computer Language&#xff09;指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器。为了使电子计算机进行各种工作&#xff0c;就需要有一套用以编写计…

面向对象复习(java)

文章目录 包在本地 cmd 编译包规则import(导包&#xff09; thisthis 访问实例方法this 访问构造方法 supersuper 访问父类构造器super访问父类方法super 访问父类属性 构造方法访问权限封装继承细节方法重写(覆盖)子父类同名变量问题关于子父类方法的继承问题 多态向上转型和向…

怎么把webp文件转换为jpg?快来试试这四种转换方法!

怎么把webp文件转换为jpg&#xff1f;Webp是一种不常见的图片格式&#xff0c;这种格式在使用过程中有很多缺点&#xff0c;首先它的浏览器兼容性不是很强&#xff0c;这就代表大家无法随意进行网络传输&#xff0c;可能需要准备特定的操作才能进行&#xff0c;然后编辑webp的工…

513、找二叉树左下角的值

题解&#xff1a;层序遍历简单&#xff0c;此篇记录递归法&#xff0c;要注意左下角的值并不一定是左叶子节点&#xff0c;遍历思路形象化就是按先左后右的顺序遍历每一条分支&#xff0c;若遍历到叶子结点&#xff0c;看此时深度有没有超过之前的值&#xff0c;超过了就记录下…

森林之下延迟高如何处理 森林之下联机卡顿的解决方法

森林之下是一款结合了农场模拟、恐怖生存的游戏&#xff0c;玩家需要管理一个被“闹鬼的树林”包围的农场&#xff0c;种植农作物&#xff0c;拯救、驯服、饲养动物&#xff0c;探索被诅咒的森林&#xff0c;并且收集物品来破除诅咒。这款游戏目前已经开放了demo&#xff0c;不…

韩顺平0基础学java——第26天

p523-547 HashSet扩容时&#xff0c;只要节点到达了阈值就会扩&#xff0c;而不是数组长度到了才扩。 比如长16的数组&#xff0c;索引1放了8个&#xff0c;索引3放了4个&#xff0c;我再加一个他就会扩容。 另外谁能告诉我老师的debug界面是怎么设置的吗忘光了 HashSet存放…

《合金弹头:觉醒》横空出世,腾讯天美工作室携手SNK再塑经典

原标题&#xff1a;腾讯携手SNK发布游戏新作《合金弹头&#xff1a;觉醒》7月18日正式发布 易采游戏网6月19日消息&#xff1a;游戏界迎来一则激动人心的消息&#xff0c;由SNK正版授权&#xff0c;腾讯天美工作室研发的横版动作射击手游《合金弹头&#xff1a;觉醒》正式登陆S…

驾校在线考试系统源码 手机+PC+平板自适应

Thinkphp在线考题源码 驾校在线考试系统 手机PC平板 自适应&#xff0c;机动车驾驶培训学校驾校类网站源码带手机端 运行环境&#xff1a;phpmysql 内附安装说明 驾校在线考试系统源码 手机PC平板自适应

浅谈目标检测之YOLO(You Only Look Once)v1

简介&#xff1a;本文章要介绍的YOLOv1算法&#xff0c;它与之前的目标检测算法如R-CNN等不同&#xff0c;R-NN等目标检测算法是一种两阶段&#xff08;two-stage&#xff09;算法&#xff0c;步骤为先在图片上生成候选框&#xff0c;然后利用分类器对这些候选框进行逐一的判断…

shell中的流程控制

条件判断在流程控制中的重要性 有了条件判断才能进行if判断即分支流程&#xff0c;才能进行case的多分支流程&#xff0c;才能进行for循环和while循环。 单分支流程判断 如上图所示&#xff0c;在shell编程中常使用英文状态下的分号来在Linux控制台一次性执行多条命令&#x…

FPGA中复位电路的设计

复位电路也是数字逻辑设计中常用的电路&#xff0c;不管是 FPGA 还是 ASIC 设计&#xff0c;都会涉及到复位&#xff0c;一般 FPGA或者 ASIC 的复位需要我们自己设计复位方案。复位指的是将寄存器恢复到默认值。一般复位功能包括同步复位和异步复位。复位一般由硬件开关触发引起…

把Deepin塞进U盘,即插即用!Deepin To Go来袭

前言 小伙伴之前在某篇文章下留言说&#xff1a;把Deepin塞进U盘的教程。 这不就来了吗&#xff1f; 事实是可以的。这时候你要先做点小准备&#xff1a; 一个大小为8GB或以上的普通U盘 一个至少64GB或以上的高速U盘 一个Deepin系统镜像文件 普通U盘的大概介绍&#xff1…