ROS Master多设备连接
Bash Shell
Shell是位于用户与操作系统内核之间的桥梁,当用户在终端敲入命令后,这些输入首先会进入内核中的tty子系统,TTY子系统负责捕获并处理终端的输入输出流,确保数据正确无误的在终端和系统内核之中。Shell在此过程不仅仅是一个监听者,还会积极地从tty子系统读取用户的命令输入,并对其进行解析来识别用户意图(比如当你输入ls
时,是Shell解析这个命令并调用/bin/ls
文件的来直接解析)。Bash Shell(基础 shell)是 Linux/Unix 系统中用户与操作系统内核交互的基本命令行界面,它是系统启动后为用户提供的默认命令解释器环境。
Bash和Shell其实是包含关系。Shell是命令行解释器的统称 ,有Bash、Zsh、Fish、Dash等多种命令行解释器,Bash是Shell的最流行方式,Ubuntu系统默认使用的也是Bash,当然你可以通过在终端中输入特定命令行可以切换(一般这几种命令行解释器的命令是兼容的,但是存在一些语法和交互功能的差异),一般使用Bash就足够了。
Bash Shell与终端不同点:Bash Shell是命令行解释器程序,终端则是输入输出设备/界面。可以理解为终端是"显示器+键盘",而Bash是运行在这个显示器上的"智能程序"。一般的执行流程是-------你在终端输入命令 → 终端将输入传给Shell → Shell解释执行 → 结果返回终端显示
.sh脚本文件
我们平常为了方便而写的脚本文件,实际上就是一个纯文本文件,包含一系列 Shell 命令(如 Bash、Zsh 等支持的语法),将需要手动逐条输入的命令,预先整体写入文件,实现 自动化执行。比如,以下脚本文件(文件名demo.sh),Shell解析器就会一行一行的解析每一行(即每一条)内容。
#!/bin/bash
echo "Hello World"
ls -l
date
执行的.sh文件的方式有以下几种
- bash demo.sh:显式指定解释器(bash),启动一个新的子 Shell 进程来执行脚本。直接调用
/bin/bash
程序,将demo.sh
作为参数传递给它,忽略 Shebang 行(即首行的#!/bin/bash)。 - ./demo.sh:依赖脚本首行的 Shebang(如
#!/bin/bash
)。与bash的区别还有重要的一点就是bash demo.sh不需要赋予文件执行权限,而./demo.sh必须赋予文件执行权限 - source demo.sh(也可以简写为. demo.sh):不启动子Shell,直接在当前 Shell 进程中逐行执行脚本,并且会忽视Shebang。脚本中定义的变量、函数、别名等会影响当前 Shell。而前两种执行方式脚本中定义的变量、函数不会影响当前 Shell 环境。一般用于加载环境配置,比如
# 加载环境配置(如 ~/.bashrc)
source ~/.bashrc# 脚本中修改当前 Shell 的工作目录
source change_dir.sh # 脚本内容: cd /some/path
.bashrc文件
.bashrc
文件是 Linux 系统中非常重要的配置文件,它与是否安装 ROS 无关,是 Bash shell的标准配置文件(它是一个纯文本文件,使用 Bash 语法 编写),"rc" 通常代表 "run commands" (运行命令)。文件名中的点(.)表示它是隐藏文件,在Linux系统用户主目录下,按ctrl+h键可以显示隐藏文件。
.bashrc的内容语法(完全遵循Bash语法):
- export PATH="$PATH:/my/custom/path" 变量定义。用来设置环境变量,影响所有子进程
- alias ll='ls -alF' 起别名,在终端输入ll就相当于输入ls -alF
- greet() { echo "Hello, $USER!"; } 函数定义
- if [ -d ~/projects ]; then
echo "Projects directory exists"
fi 条件循环判断
.bashrc如何运行?
当启动非登录的交互式 Bash shell 时,打开新的终端时,通过bash命令启动新的Shell时,.bashrc文件都会自动启动
除此之外还有.bash_profile和.profile文件。.bashrc在非登录的交互式Bash Shell(不需要重新认证的子会话,如图形终端新建窗口、bash
命令启动等,直接继承父 Shell 的环境变量)自动加载;.bash_profile在Bash登录Shell(需要用户认证的完整会话,如系统登录、SSH 连接等,全新环境(会重新读取配置))自动加载,也就是说.bash_profile登录时一次性设置。.profile是在所有Shell的登录会话都会加载,但是前提是.bash_profile不存在。也就是说只有在用户使用Bash并且存在./bash_profile时才会跳过.profile的加载,如果用户使用其他命令解释器则会自动加载.profile,所以说.profile是跨 Shell 的通用环境变量。
1,网络配置
确保所有设备(PC端,嵌入式端等等)连接在同一个局域网下,在每台设备的终端输入ifconfig查看IP地址,由于不同网络下IP地址经常改变,所有推荐将每台设备设置为静态IP地址。
使用ping
命令测试各PC之间的连通性,如果都能ping通后就可以开始下一步了
2,环境变量配置
在所有PC上编辑~/.bashrc
文件,添加以下环境变量:
export ROS_MASTER_URI=http://<master_ip>:11311 # 主机的IP地址。ROS 默认使用 11311 端口 作为 roscore 的通信端口,这是由 ROS 的设计者设定的标准配置。
export ROS_IP=<local_ip> # 本机的IP地址
export ROS_HOSTNAME=<local_ip> # 本机的IP地址
然后执行
source ~/.bashrc
3,主机名解析
主机名解析就是将上面的ROS_MASTER_URI=http://<master_ip>:11311中的master_ip用一个名字来代替,比如master-pc=192.168.1.1,这时只需要将192.168.1.1替换为master-pc即可,类似于变量赋值。当然,你也可以直接输入为192.168.1.1而不需要主机解析,但是这样的话如果主机的ip地址频繁变换,就需要在每个从机的./bashrc中重新修改主机的ip地址,从机数量少的话还可以,从机数量多的话就会很麻烦。
主机名解析的实现方式一般有以下几种:
1,使用/etc/hosts文件:
首先,在所有参与ROS通信的计算机上编辑/etc/hosts
文件,添加所有ROS计算机的IP和主机名映射,格式如下:
192.168.1.100 master-pc
192.168.1.101 slave1-pc
192.168.1.102 slave2-pc
保存文件后测试解析:
ping master-pc
ping slave1-pc
但是这种方式看起来是使用了主机解析,但它只是增强了可读性,而没有解决频繁手动修改IP的缺点,如果 Master 的 IP 地址变了,还是需要手动修改所有从机的/etc/hosts文件的配置
2,使用DNS:
DNS一般是用于学校或者企业,适用于本地有DNS服务器或路由器支持DNS绑定的场景
在路由器或 DNS 服务器上,将主机名(如 master-pc
)绑定到 Master 的 IP。所有从机自动通过 DNS 解析 master-pc
,无需手动改 IP。这样IP地址变动时,只需改DNS记录所有从机自动生效
3,使用mDNS:
适用于小型网络,如实验室或者家用
确保所有机器安装 avahi-daemon
(Linux 默认通常已安装):
sudo apt install avahi-daemon # Ubuntu/Debian
直接使用 .local
主机名(无需配置 /etc/hosts
):
export ROS_MASTER_URI=http://master-pc.local:11311
4,使用静态DHCP绑定:
适用于家用/实验室路由器支持DHCP静态绑定的场景
在路由器后台,将 Master 的 MAC 地址绑定到一个固定 IP(如 192.168.1.100
)。所有从机直接用这个 IP,因为 Master 的 IP 永远不会变。
4,防火墙配置
UFW(Uncomplicated Firewall)是一款基于 iptables 的简单易用的防火墙配置工具,广泛应用于基于 Debian 和 Ubuntu 的 Linux 系统中,用于管理和配置网络防火墙规则。UFW 支持允许或拒绝特定的网络连接。即使系统中没有安装 UFW,也不意味着没有防火墙阻拦网络连接。UFW 只是一个简化的防火墙管理工具,而在 Linux 系统中,底层的防火墙功能通常由 iptables 或 nftables 实现(iptables 是 Linux 系统中强大的防火墙配置工具,但它的命令复杂,规则编写难度较大,对普通用户不太友好。UFW 则提供了一种简化的接口,使用户可以用更直观、简洁的命令来管理防火墙规则,比如,启用防火墙只需执行sudo ufw enable
,而使用 iptables 则需要编写多条复杂的命令)。
先使用命令查看防火墙配置工具ufw是否安装
dpkg -l | grep ufw
如果 ufw
已经安装,会显示相关的软件包信息;如果没有任何输出,说明 ufw
未安装。此时需要输入命令进行安装:
sudo apt update
sudo apt install ufw
安装后查看防火墙活跃状态
sudo ufw status
如果输出Status: inactive,表示防火墙处于未启用状态,网络端口处于相对开放状态,外界可以直接访问系统暴露的端口。
如果防火墙处于活跃状态,则需要确保所有PC的防火墙允许ROS通信(默认端口11311)
sudo ufw allow 11311/tcp
就能允许外部设备通过 22 端口(通常用于 SSH 服务)访问本地系统
5,测试连接
在主PC上启动ROS Master:
roscore
在其他PC上测试连接:
rostopic list
如果连接成功,会显示 Master 上已发布的 Topic 列表。如果 Master 刚启动 roscore
,默认只有 /rosout
和 /rosout_agg
$ rostopic list
/rosout
/rosout_agg
6,同步时间
需要时可以选用此功能
在ROS多机通信中,时间同步(Time Synchronization)是一个关键但容易被忽视的配置。指的是让所有参与ROS通信的计算机保持高度一致的系统时间(最好误差在毫秒级)。
通常使用NTP来实现时间同步 :
NTP是一种网络协议,用于同步计算机的系统时间,计算机通过NTP客户端从时间服务器(如ntp.ubuntu.com
)获取精确时间,局域网内通常可达毫秒级同步
基本原理
NTP(Network Time Protocol)实现时间同步的原理是一个分层、多源校正的精密时间同步体系,其核心设计目标是在不可靠的网络环境中实现高精度的时间同步(局域网内通常可达毫秒级,理想条件下可达亚毫秒级)。
NTP采用层级化的时间源结构,类似于金字塔:
-
Stratum 0
最顶层,直接连接原子钟、GPS或铯钟等高精度物理时钟设备,不直接参与网络通信。-
示例:实验室原子钟、卫星时间信号。
-
-
Stratum 1
直接与Stratum 0设备同步的NTP服务器(时间误差通常<100μs)。-
示例:国家授时中心服务器、Google的
time.google.com
。
-
-
Stratum 2
从Stratum 1同步的服务器,误差逐层递增(每层增加约1ms)。-
示例:企业级NTP服务器、公共NTP池(如
pool.ntp.org
)。
-
-
Stratum 3及以下
更低层级的同步节点,适用于普通客户端设备。
NTP通过以下四个时间戳计算时间偏差(Clock Offset)和网络延迟(Round-Trip Delay):
假设客户端(A)与服务器(B)交互:
-
T₁:客户端发送请求时的本地时间(A的时钟)。
-
T₂:服务器收到请求时的本地时间(B的时钟)。
-
T₃:服务器回复响应时的本地时间(B的时钟)。
-
T₄:客户端收到响应时的本地时间(A的时钟)。
最终时间偏差是多次测量的统计结果(通常采用最小二乘法或Marzullo算法过滤异常值)。
中国的NTP服务架构是分层级的,国家授时中心是stratum1,其他运营商比如阿里云,腾讯云等部署了多台次级服务器。所以你执行命令时会使自己的PC端自动连接到附近最优的服务器,由于所有的NTP服务器本身已经同步(都溯源到国家授时中心或GPS/原子钟) ,所以连接了NTP的各个服务器就可以实现同步。
比如下面的方式一就是将其连接到了最优的服务器,但是如果你需要更高的精度,还可以指定同一NTP服务器,这时就需要在文件/etc/systemd/timesyncd.conf,添加如下内容指定特定服务器(比如阿里云)
[Time]
NTP=ntp.aliyun.com
实现方式(Ubuntu系统)
方法一:使用系统默认的timesyncd(使用简单)
如果使用 systemd-timesyncd
(即 timedatectl
管理的 NTP 客户端),通常不需要额外安装 ntp
或 ntpdate
,因为 timesyncd
已经是一个轻量级的 NTP 客户端,默认集成在 systemd
中。
# 检查当前同步状态
timedatectl status# 如果未启用NTP,运行:
sudo timedatectl set-ntp on# 手动强制同步
sudo systemctl restart systemd-timesyncd
方法二:安装完成的ntp包(更精确控制)
sudo apt install ntp
sudo systemctl restart ntp # 启动或重启 NTP 服务,立即应用配置并开始同步。# 查看同步状态
ntpq -p
ntpq -p输出示例如下
remote refid st t when poll reach delay offset jitter
============================================================================
*ntp.ubuntu.com .POOL. 16 u 25 64 1 5.123 -0.432 0.871
+time.google.com .GOOG. 1 u 12 64 7 1.234 0.567 0.123
-
*
表示当前主同步源。 -
offset
:本地时钟与服务器的偏差(单位:毫秒)。 -
jitter
:网络延迟的波动程度。
验证时间同步:
ntpdate -q 192.168.1.100 # 查询与某台机器的时间差
7,共享ROS包
此功能如果需要可以选用,不做详细解释
方法1:同步工作空间
-
使用rsync或git同步工作空间
-
确保所有PC上的包路径相同
方法2:NFS共享
-
设置NFS服务器共享工作空间
-
其他PC挂载该共享目录
方法3:独立编译
-
在各PC上独立维护代码库
-
确保版本一致
8,启动管理
可以使用roslaunch
在多台机器上启动节点:
<launch><machine name="pc1" address="192.168.1.101" user="user" password="pass" env-loader="/opt/ros/noetic/env.sh"/><machine name="pc2" address="192.168.1.102" user="user" password="pass" env-loader="/opt/ros/noetic/env.sh"/><node machine="pc1" name="node1" pkg="your_pkg" type="node1"/><node machine="pc2" name="node2" pkg="your_pkg" type="node2"/>
</launch>
相关文章:
ROS Master多设备连接
Bash Shell Shell是位于用户与操作系统内核之间的桥梁,当用户在终端敲入命令后,这些输入首先会进入内核中的tty子系统,TTY子系统负责捕获并处理终端的输入输出流,确保数据正确无误的在终端和系统内核之中。Shell在此过程不仅仅是…...
【Mysql】数据库备份与恢复
一、备份类型 物理备份:直接对数据库的数据文件、日志文件、索引文件进行备份 逻辑备份:对数据库对象(库、表)以SQL语句的形式导出进行备份 二、备份工具 1、使用tar、gzip等方式压缩打包数据库文件(完全备份、物理冷…...
Java HttpURLConnection修仙指南:从萌新到HTTP请求大能的渡劫手册
一、筑基篇:初识HttpURLConnection 1.1 基础开光(创建连接) URL url new URL("https://api.example.com/data"); HttpURLConnection conn (HttpURLConnection) url.openConnection(); // 注意!此处可能抛出Malforme…...
python 重要易忘 语言基础
Collections 1、Counter 计数器 counter:计数器 类似字典 统计可迭代对象中元素的出现次数, Counter({b: 3, c: 2, a: 1, d: 1}) 相当于字典{b: 3, c: 2, a: 1, d: 1} a.items() 取键值对 对应为dict_items([(a, 1), (b, 3), (c, 2), (d, 1)]) 也可以是 list(a.items…...
【新能源汽车研发测试数据深度分析:从传感器到智能决策的硬核方法论】
摘要: 本文系统性解构新能源汽车(NEV)研发测试中的数据采集、处理及分析全链条,覆盖传感器融合、大数据清洗、AI算法优化等核心技术,并引入行业顶级案例(如特斯拉Autopilot验证、宁德时代BMS算法迭代&#…...
GD32H759IMT6 Cortex-M7 OpenHarmony轻量系统移植——接管中断修改为不接管
笔者在去年利用国庆时间,将Cortex-M7 的国产厂商兆易创新GD32H459移植OpenHarmony轻量系统,但是适配不太完善——只能选择liteos-m接管中断。这样导致使用中断非常麻烦。于是笔者最近将接管中断模式修改为不接管,这样可以方便的使用gd32提供的…...
MySQL基础学习笔记
学习笔记 1. 基础小知识1.1 数据库分类1.2 下载安装、变量配置过程(略)1.3 连接命令1.4 连接mysql服务端的软件选择1.4.1 要求不高的话,选择有很多1.4.2 适合做企业级管理的工具(适合团队协作)1.4.3 总结 1.5 编程语言…...
[Linux]进程状态、僵尸进程处理回收、进程优先级 + 图例展示
目录 一、进程状态 1.一般操作系统学科的进程状态 二、Linux操作系统的进程状态 运行状态(R) 睡眠状态(S) 深度睡眠状态(D) 暂停状态(T) 追踪暂停状态&#x…...
2022 年 6 月青少年软编等考 C 语言七级真题解析
目录 T1. 有多少种二叉树思路分析T2. 城堡问题T3. 快速堆猪思路分析T4. 重建二叉树思路分析T1. 有多少种二叉树 题目链接:SOJ D1189 输入 n ( 1 < n < 13 ) n\ (1<n<13) n (1<n<13),求 n n n 个结点的二叉树有多少种形态? 思路分析 此题考查 C a…...
flutter修改 Container 中的 Text 和 Image 的样式
在Flutter中,Container 是一个常用的布局组件,它可以包含子组件(如文本、图片等),并允许你通过设置各种属性来自定义样式。如果你需要修改 Container 中的 Text 和 Image 的样式,可以通过以下方式实现。 1.…...
零基础入门unity游戏开发——动画篇】Animation动画窗口,创建编辑动画
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、…...
【设计模式】命令模式
简介 假设你有一个智能家居遥控器,上面有多个按钮,每个按钮对应不同的设备操作(如开灯、关灯、调空调温度)。 命令模式的解决方案是: 将每个操作(如“开灯”)封装成一个独立的命令对象&#x…...
Python作业3 字符田字格绘制
字符田字格绘制:编写程序,用字符方式打印输出一个简单的田字格,要求采用函数方式,以田字格宽度为参数,能够根据参数绘制任意大小的田字格。 def draw(n):line 3 * n 1for i in range(1, line 1):if i % 3 1:print(n * " —— —— ", end"&quo…...
文章记单词 | 第23篇(六级)
一,单词释义 occupy /ˈɒkjupaɪ/v. 占用,占领,使忙碌thermal /ˈθɜːml/adj. 热的,热量的,保暖的;n. 热气流persistent /pəˈsɪstənt/adj. 执着的,坚持不懈的,持续存在的wee…...
【算法】滑动窗口
什么是滑动窗口算法? 滑动窗口算法本质上就是双指针的一种情况,当两个指针进行移动的方向是同一个方向,并且这两个指针并不会向后回退,一直是往一个方向进行移动的。这也就是滑动窗口的使用场景。 滑动窗口算法的一般步骤 进窗…...
可视化工具
在PyTorch中,可视化工具对于模型调试、性能分析和结果解释至关重要。以下是常用的可视化工具及其应用场景: 1. 训练过程监控 TensorBoard (PyTorch官方集成) 用途:跟踪训练指标(损失、准确率)、可视化模型结构、分析…...
hashtable遍历的方法有哪些
在 Java 中,遍历 Hashtable(或其现代替代品 HashMap)有多种方式,以下是 6 种常用方法的详细说明和代码示例: 1. 使用 keySet() 增强 for 循环 Hashtable<String, Integer> table new Hashtable<>(); // …...
LeetCode --- 443周赛
题目列表 Q1. 到达每个位置的最小费用 Q2. 子字符串连接后的最长回文串 I Q3. 子字符串连接后的最长回文串 II Q4. 使 K 个子数组内元素相等的最少操作数 一、到达每个位置的最小费用 题目要求返回从队尾到达任意位置的最小费用,规则:如果下标 i i i …...
从零构建大语言模型全栈开发指南:附录与资源-3.面试与进阶-200道大模型面试真题与职业发展路线图-基础理论篇50题
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 附录与资源-3. 面试与进阶:200道大模型面试真题与职业发展路线图一、大模型面试真题分类与解析1. 基础理论篇(50+题精选)2. 进阶实战篇(50+题精选)3. 应用场景篇(70题精选)二、职业发展路线图1. …...
使用Android Studio开发基于Java+xml的安卓app之环境搭建
以下是使用Android Studio搭建基于Java和XML的Android应用开发环境的详细步骤: 一、系统要求 操作系统:Windows 7/8/10/11(64位)内存:建议8GB及以上磁盘空间:至少5GB空闲(建议预留10GB以上&…...
GD32H759IMT6 Cortex-M7 OpenHarmony轻量系统移植——4.1版本升级到5.0.3
笔者在去年利用国庆时间,将Cortex-M7 的国产厂商兆易创新GD32H459移植OpenHarmony轻量系统,但是适配不太完善——只能选择liteos-m接管中断。这样导致使用中断非常麻烦。于是笔者最近将接管中断模式修改为不接管,这样可以方便的使用gd32提供的…...
学习汇编随手记
学习汇编随手记 前言 本笔记是关于王爽汇编的笔记,覆盖不全,到了内中断就完结了,听从学长建议,我跑去学xv6了,x86告辞。 1. 寄存器 1.1 寄存器初步 (A,B,C,D)X是通用寄存器,通常存放一般性数据&#x…...
打造高效英文单词记忆系统:基于Python的实现与分析
在当今全球化的世界中,掌握一门外语已成为必不可少的技能。对于许多学习者来说,记忆大量的英文单词是一个漫长而艰难的过程。为了提高学习效率,我们开发了一个基于Python的英文单词记忆系统。这个系统结合了数据管理、复习计划、学习统计和测试练习等多个模块,旨在为用户提…...
【漫话机器学习系列】182.噪声修正线性单元(Noisy ReLU)
噪声修正线性单元(Noisy ReLU)详解 1. 引言 在深度学习中,修正线性单元(ReLU, Rectified Linear Unit) 是一种常见的激活函数,具有计算简单、梯度稳定等优点。然而,ReLU 也有一些缺点…...
连续数据离散化与逆离散化策略
数学语言描述: 在区间[a,b]中有一组符合某分布的数据: 1.求相同区间中另一组符合同样分布的数据与这组数据的均方误差 2.求区间中点与数据的均方误差 3.求在区间中均匀分布的一组数据与这组数据的均方误差 一:同分布数据随机映射 假设在…...
《安富莱嵌入式周报》第352期:手持开源终端,基于参数阵列的定向扬声器,炫酷ASCII播放器,PCB电阻箱,支持1Ω到500KΩ,Pebble智能手表代码重构
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版 https://www.bilibili.com/video/BV1DEf3YiEqE/ 《安富莱嵌入式周报》第352期:手持开源终端&#x…...
游戏引擎学习第205天
回顾 我们今天要实现的是一些实体浏览功能,原本是昨天就计划好的,但因为渲染上的一些问题耽搁了一些时间。 实际上,我们遇到的并不是一个真正的bug,尽管我们花了大约40分钟才搞清楚,最终发现它只是渲染方式的一个正常…...
Boost库搜索引擎项目(版本1)
Boost库搜索引擎 项目开源地址 Github:https://github.com/H0308/BoostSearchingEngine Gitee:https://gitee.com/EPSDA/BoostSearchingEngine 版本声明 当前为最初版本,后续会根据其他内容对当前项目进行修改,具体见后续版本…...
复古千禧Y2风格霓虹发光酸性镀铬金属短片音乐视频文字标题动画AE/PR模板
踏入时光机,重温 21 世纪初大胆、未来主义和超光彩的美学!这是一个动态的 After Effects 模板,旨在重现千禧年的标志性视觉效果——铬反射、霓虹灯发光、闪亮的金属和流畅的动态图形。无论您是在制作时尚宣传片、怀旧音乐视频还是时尚的社交媒…...
如何高效使用 Ubuntu 中文官方网站
Ubuntu 中文官方网站 一、快速导航与核心模块 首页焦点区 顶部菜单栏:快速访问「下载」「文档」「支持」「商店」等核心功能。轮播图区:展示最新版本(如 Ubuntu 24.04 LTS)和特色功能(如 Ubuntu Pro 订阅服务)。搜索框:支持中文关键词搜索(如 "边缘计算"),…...
简单多状态dp问题 + 总结(一)
文章目录 按摩师题解代码 打家劫舍II题解代码 删除并获得点数题解代码 粉刷房子题解代码 按摩师 题目链接 题解 1. 细节处理:题目是有没有客人的时候,所有n等于零时返回零 2. 状态表示:到达i位置时的最长预约时长 3. 状态转移方程…...
2022 CCF CSP-S2.假期计划
题目 4732. 假期计划 算法标签: 搜索, 枚举, 贪心 思路 最多转车 k k k次等价于路线长度小于等于 k 1 k 1 k1, 经过的点没有限制, 注意到点的数量 2500 2500 2500, 因此 n 2 n ^ 2 n2的时间复杂度是可以考虑的, 边的数量 10000 10000 10000, n m n \times m nm时间复杂…...
STM32低功耗模式详解:睡眠、停机、待机模式原理与实践(下) | 零基础入门STM32第九十三步
主题内容教学目的/扩展视频低功耗模式什么是低功耗,模式介绍,切换方法。为电池设备开发做准备。 师从洋桃电子,杜洋老师 📑文章目录 一、低功耗模式基本工作原理1.1 功耗层级对比1.2 工作流程 二、睡眠模式实践2.1 测试程序解析2.…...
【Docker】在Orin Nano上使用Docker
1、安装Docker 1)使用 SDKManager 烧写系统时,选择NVIDIA Container Runtime,将会安装Docker, 并将 NVIDIA GPU 暴露给容器中的应用程序,这样可以在Docker中使用GPU等NVIDIA的特性。 2)使用命令安装 添加源 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \…...
C# 程序脱壳,去除强签名StrongNameRemove
由于.net程序的运行机制,利用Reflector,ilspy等反射工具很容易就能看到原代码。很多程序都做了代码混淆,加壳。代码混淆后反编译乱码,不容易理解;加壳使反编译工具不能正常反射,提示无效的程序集。 需要做…...
【mongodb】mongodb和MySQL体系结构的对比
目录 1. 说明2. 数据存储模型2.1 MySQL2.2 MongoDB 3. 扩展性3.1 MySQL3.2 MongoDB 4. 查询语言4.1 MySQL4.2 MongoDB 5. 索引和性能5.1 MySQL5.2 MongoDB 6. 一致性模型6.1 MySQL6.2 MongoDB 7. 架构组件7.1 MySQL7.2 MongoDB 8. 使用场景7.1 MySQL7.2 MongoDB 9. 总结对比表 …...
【深度学习新浪潮】视觉与多模态大模型文字生成技术研究进展与产品实践
一、研究进展 跨模态架构创新 原生多模态模型:微软KOSMOS系列通过统一框架支持文本、图像、语音等多模态输入输出,实现跨模态推理与迁移。例如,KOSMOS-2.5可处理文本密集图像,生成结构化文本描述,并通过重采样模块优化视觉与语言的对齐。混合专家架构:第三代模型(如Deep…...
麒麟系统桌面版本v10安装教程
下载地址 共享文件下载 - Kylin Distro 虚拟机安装教程 选择默认兼容 内核数量选择2个 内存给2g 存储为单个文件的话,占用你内存大,多个文件的话,用多少就占多少内存 打开虚拟机 开机 补充 安装来源 Live 安装:通过镜像文件进行…...
Python-文件操作
1. 文件操作基础 1.1 打开文件 在Python中使用open()函数来打开文件: file open(example.txt, r) # 以只读模式打开文件文件打开模式: r - 只读(默认)w - 写入,会覆盖已有文件a - 追加,写入到文件末尾…...
Apache 配置负载均衡详解(含配置示例)
Apache 是互联网上最受欢迎的 Web 服务器之一。除了基本的网页服务,它还能通过模块扩展出丰富的功能。其中一个重要用途就是将 Apache 配置成负载均衡器,用于在多个后端服务器之间分配流量,提升网站的性能和稳定性。Google Gemini中国版调用G…...
文章记单词 | 第24篇(六级)
一,单词释义 liner:名词,意为 “班轮;邮轮;衬里;画线者”convention:名词,意为 “大会;会议;习俗;惯例;公约;协定”lavat…...
日本汽车规模性经济计划失败,日产三大品牌的合并合作共赢,还是绝地求生?本田与日产合并确认失败,将成为世界第三大汽车集团愿景失败
本田与日产(含三菱汽车)的合并计划最终因核心矛盾无法调和而宣告失败,这一事件揭示了传统车企在行业变革期的深层困境。以下从合并动机、失败原因、本质判断及未来影响等方面综合分析: 一、合并的初衷:生存压力主导的被动策略 市场危机与财务困境 中国市场溃败:日系品牌在…...
人工智能赋能工业制造:智能制造的未来之路
一、引言 随着人工智能技术的飞速发展,其应用场景不断拓展,从消费电子到医疗健康,从金融科技到交通运输,几乎涵盖了所有行业。而工业制造作为国民经济的支柱产业,也在人工智能的浪潮中迎来了深刻的变革。智能制造&…...
支持selenium的chrome driver更新到135.0.7049.42
最近chrome释放新版本:135.0.7049.42 如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only su…...
C++/Qt 模拟sensornetwork的工作
C/Qt 可视化模拟sensornetwork的工作 C/Qt 模拟sensornetwork的工作 C/Qt 可视化模拟sensornetwork的工作内容简介(一) 需求和规格说明(1)问题描述(2)设计目的(3)基本要求࿰…...
无状态版的DHCPv6是不是SLAAC? 笔记250405
无状态版的DHCPv6是不是SLAAC? 笔记250405 无状态版 DHCPv6 不是 SLAAC,但二者在 IPv6 网络中可协同工作。以下是核心区别与协作关系: 本质区别 特性SLAAC无状态 DHCPv6主要功能生成 IPv6 地址(基于路由器通告的前缀)分发 DNS、…...
前端判断值相等的方法和区别
1. (宽松相等) 在比较之前会进行类型转换 可能导致一些意外的结果 0 // true 0 0 // true false 0 // true null undefined // true [1,2,3]1,2,3 // true2. (严格相等) 不进行类型转换 类型和值都必须相同 0 // false 0 0 // false false 0 /…...
AWS全球化低延迟架构实战:助力APP快速上架欧美、加拿大、澳大利亚
作者:AWS解决方案架构师 关键词:AWS全球架构、低延迟优化、多区域部署、Serverless、GDPR合规 一、客户需求分析 客户计划将APP上架至欧美(欧盟)、加拿大、澳大利亚等地区,并要求: 全球用户低延迟访问&…...
Maven使用
配置 Maven repository 教学视频 windows环境 idea配置 Maven项目结构 src:主项目文件 main:项目文件,其中java存放java文件,resource存放其他文件如图片文件等;test存放测试文件,如果需要也可以自己创建一个resources文件 target:主要存放我运行后的jar包等,以及一些…...
笔试强训题(7)
目录 1. Day371.1 旋转字符串(字符串)1.2 合并k个已排序的链表(链表)1.3 滑雪(记忆化搜索) 2. Day382.1 天使果冻(递推 DP)2.2 dd爱旋转(模拟)2.3 小红取数&…...