技术回眸一笑

回忆一下一年前的出差日记吧,那个时候真的是一点经验没有,干硬件又干软件,只能一步一步慢慢摸索,努力过后慢慢成长起来的吧。那个时候甚至开学了都没有正常报道,但是也收获了不少东西,并且也将作为我后来继续沿着科研顶峰攀登的契机。
出差日记
6.19
前一天和姜工联系好了,带上设备和电脑,主要包括8个毫米波雷达,1个惯导,两个相机。5点半启程从北门出发,前往机场。
到达新疆后,与宋老师会合。2点左右,买了吃的便前往农场,开始进行初步部署,整理相关设备,均能正常使用,没有损坏。整理个人在本次出差中的任务分配,其中,我负责:
1)实现对惯导、毫米波雷达等与域控制器的通信,包括惯导标定。
2)跟改装公司确定转向和其他按钮的线控准备,摸清电气规律,我们自己要掌握里面所有的细节
3)和姜工对接,让域控制器运转起来。
任务整体难度极大,没有经验实操的我只能先学习用户手册,摸清CAN通信的相关知识,理解can报文与相关基础知识;配置域控制器相关环境(与张老师沟通,不打算使用比赛用的,便在前一天迅速配置);毫米波雷达与域控通信(1个,没有转接线,只能先用一个);惯导标定看起来非常简单,但是无从下手,只能先学习怎么接收惯导信号。

6.20
上午正式配置域控和传感器的通信,先对相关连线进行处理,

下午整理采棉机的工作流程

6.21
与改装公司的人对接,摸清改装细节

下午测量相关信号并记录

6.22
数据测量的收尾,确定所有的改装方案,整理相关数据

6.23
主要是开会讨论之后的安排。
后面我的工作在于:
1.radar更改模式,并将改好模式了的雷达进行测量,看到底能不能实现、怎么实现目标级的识别。——购买can卡
2.多个radar之间如何进行信息融合与标定,没人做过毫米波,我也需要时间——买转接线
2.组合惯导的配置和初始化,怎么设置,设置哪些参数。能配置的东西很多,但是说明文档没有说清楚怎么配置——这个必须找刘志师兄了,需要给我讲配哪些,怎么配置。
3.组合惯导的数据解析。拿到正确的组合惯导数据,写解析文件
4.相机接入域控并拿到相关的数据话题,这里面的接口我来做
当然也有一些问题,组合惯导没有带回,我该怎么学习配置呢

(wo kao)
./install_for_noetic.sh

以上是我的第一次出差,什么都不是很懂呢!!!!

中间又去了一次,找不到记录了,那一次是进步最大的一次,我成功打通了所有环节,让采棉机能够实现循迹了,还是很开心的吧。但是我也意识到无人驾驶还是有很多的缺陷。然后来到了第三次出差的时候。

8.20
今天是前往兵团的日子,我们的飞机在9点半就要登机,于是我们7点多8点不到就到达了机场,但是很遗憾,天公不作美,不一会乌云密布,大雨滂沱。
请添加图片描述

于是开始看一些机器学习的概念。机器学习是一种通过从数据中学习模式和规律来使计算机系统具备学习和自适应能力的方法。它的主要目标是通过从数据中自动推断出模型,并利用这些模型来进行预测、分类、聚类等任务。
以下是机器学习的一般过程:

  1. 数据收集:首先,你需要收集与你的问题相关的数据。数据可以是结构化的(如表格数据)或非结构化的(如文本、图像、音频等)。数据的质量和多样性对机器学习的结果至关重要,因此要确保收集的数据具有代表性。
  2. 数据预处理:在进入模型训练之前,你需要对数据进行预处理。这包括去除噪声、处理缺失值、处理异常值,以及对数据进行归一化或标准化等操作。此外,你还可以进行特征选择和提取,以提取出对问题最有用的特征。
  3. 模型选择和训练:在选择模型之前,你需要确定问题的类型。根据问题的类型,你可以选择监督学习、无监督学习或强化学习等方法。选择合适的模型后,你需要将数据划分为训练集和测试集。然后,使用训练集来训练模型,通过调整模型的参数和优化算法来最小化预测误差。
  4. 模型评估:训练完成后,使用测试集来评估模型的性能。常见的评估指标包括准确率、精确率、召回率、F1 分数等。评估模型的性能有助于了解模型的泛化能力和预测能力,并帮助你判断模型是否满足需求。
  5. 模型优化和调参:如果模型的性能不理想,你可以尝试优化模型。这包括调整模型的超参数(如学习率、正则化参数等)、尝试不同的优化算法,或者尝试其他模型结构。通过反复实验和调整,你可以逐步改进模型的性能。
  6. 模型部署和应用:当你对模型满意后,可以将其部署到实际应用中。这可能涉及将模型集成到现有系统中,或者创建一个可以接收输入并生成预测输出的 API。在部署模型之后,你还需要进行监控和维护,以确保模型的稳定性和性能。
    需要注意的是,机器学习是一个迭代的过程。你可能需要多次调整和改进模型,甚至重新回到数据收集和预处理阶段,以获取更好的结果。

一直等到下午6、7点,才陆续开始有飞机起飞。我们的飞机也在8点多开始登记,9点多顺利起飞,这一次延误还是让我学会了买机票要看一下天气。终于在凌晨2点半左右到达了酒店。收拾行李,检查设备,然后简单使用了一下打点仪,比思南的操作难度小很多,很快就能上手了。
请添加图片描述

8.21
第一天到兵团,车辆正常启动。但是基本还没有办法跑寻迹。以下是遇到的几个问题:
0.车辆手柄完全失效,vcu控制完全失效,测量电压也完全为0
排查所有的继电器和保险,但是无一断开。
下午重新来启动机器,发现一切恢复正常,除了采头落不下去。
1.车辆不能定位。(定位数据出现严重的延迟)
解析程序使用了调库(但是不是根本问题,我觉得直接调库中设置了45和现在的解析应该是差别不大的)
解决:把gps的上位机发送频率设置为50hz。再跑gps数据,可以正常显示一条直线了
2.规划算法完全跑不出来
解决:适应正确的规划顺序,多次校验不同点的情况,而且一直在改解析程序。最后下定决心,就先使用原有的解析规则。
当然,也带着连会在烈日下测量场地的数据。我很担心他受不了这样的环境。但是他并没有一点抱怨,真正做好了打点侠任务。(我以前都是只能自己干这样的活,还没看到一个没有一点抱怨,没有一点不情愿)
3.cpe连不上网
解决:刚充了600块钱,但是却发现那张卡没有办法在新疆等地区用。准备用自己的手机卡联网。
请添加图片描述

8.22
今天继续修改代码。
宋老师提出了一些改进的意见:我们要先确认一下定位、闭环控制以及通信。以上的问题,我觉得,不一定是线控执行的问题。
1)定位:人开车沿着目标轨迹走,看看CTE和dHead对不对。
2)闭环控制:如果把那个车轮转角从±38度约束到正负5度,看看还会不会乱走。这种失控,一个看控制参数是不是太激进了,另外,确认实时性有没有问题(因为print或者ros.login搞的程序算不过来了也有可能;或者控制器本身哪里状态不对了);
3)看看我们的目标转角下发指令是不是及时的。
实测的定位点也找到了:
以这个位置做寻迹,走的是规划出来的直线。
看直线的寻迹数据,没有把+5变成38时,算的cte和dhead中dhead是有问题的,最后算出的方向盘角度变化也是比较大,100°以上了,正负的。
需要检查一下gps里的head和规划里面的航向有没有问题。
连会和我再多测试几组数据,总结规律。贾哥继续优化QT界面,刘博继续建模工作。也算是第一次发布任务,所幸大家都是毫无怨言的执行。

8.23
1.CPE问题确认出在卡上,用手机卡换上去是照常能用的,需要联系技术解决
2.寻迹上:规划的直线轨迹确认没有问题。确定了是gps的数据解析出现了问题(可能是从上位机到解析程序,都有改过一些东西),明天解决,复现7.31时的寻迹功能。
另外,明天要把launch写一版,一键启动写一版,向日葵装上。
直线过程的目标方向盘转角不对。
直线过程的GPS数据不对
后面遇到的问题:
寻迹功能已恢复(轨迹是规划的直线)。向日葵装好能用了。CPE现在用的自己的手机卡。
线控部分的接收程序依然是有问题的,换成两个dbc也不行,需要debug。反馈数据现在只能从原始can信号拿到。
上位机中惯导发送频率50hz
解析程序我小改过,重新换回去了,但不是根本原因。通信都没有动过,大概率是发送频率调小了。走之前应该是把它调成10hz了。

8.24
惯导上位机会有一些问题:
有时候rtk客户端不能正常登录,此时只能重启惯导了,不然就是卫导模式而不是组合惯导模式。
qt界面效果非常智能,贾哥非常专业了。后面我是一定会学习c++的。
gps解析分成两个msg发了,验证了没有问题。
线控的程序问题解决了,dbc文件的数据格式和msg冲突了,需要修改dbc文件。现在已能正常接收反馈的转角信号了。但是还没测试和比较目标和反馈的数据。
24号晚上,能转弯了,转弯误差最大在0.5m左右,直线误差在6cm左右。
请添加图片描述

8.25
一键启动基本实现。
界面框架基本搭建完成,接下来接入ros。
全局规划程序已验证,完成了一半。剩下完整轨迹的规划、通信相关测试。
线控部分,有几个信号数据格式是有问题的(未解决),现在直接注释掉了。今天测了3组寻迹数据,待处理。
请添加图片描述

8.26
今天测了三组数据,其后休息一天。

请添加图片描述

基本上也有了一些解决问题的思路,首先要吧路径从2/3增加到3/4,然后开始准备使用某种数据结构来直接寻找最近点,现在的二分法也是有一些bug的。

8.27
继续修改代码,上午修改,下午去实车测试。
同时这一阶段开始学习和使用其他的传感器,从zed2双目相机开始,到激光雷达,到毫米波雷达,大家基本只用了两天左右就掌握了数据处理部分,后面的算法开发也是完全没有问题。
车上的程序这一阶段调整不大。

同时,细读了域控制器的使用手册,学会了更多技能:
首先,使用的Orin芯片和单片机TC297,后面有机会一定要把单片机用起来(MCU(Micro Controller Unit) 芯片是一种微控制器芯片),传感器的接口:摄像头的gmsl2,雷达的以太网,CAN,串口通信,等等(注意到usb转rs232)。
挂载一个500G的磁盘:

然后:
sudo chown -R 用户名 /home/nvidia/Documents
对于其默认的库而言,主要有以下:

除了以上的内容之外,还有挺多新东西的,参照以下文件:
请添加图片描述

8.28
循迹问题,咱们分析数据后,用仿真复现这个现象,然后发展一版算法。现在的循迹效果,应该算是一个保底版本了。
同时改进了规划算法,从3变到了4转向非常的漂亮。继续配置相关的传感器。

请添加图片描述

8.29
1) 功能:一键启动,能够按照规划的路径运行,中间可以停车避障,循迹比较准确,具备初步的故障诊断功能(搜星、差分、组合导航、CAN通信丢失,等),通过GUI界面可以启动车辆、设定目标点,显示故障。改装组升级车辆线控系统的硬件。
2) 数据:车速、方向盘转角、车辆位姿(用于建模), 全局规划的路径和棉花垄线的对应关系,以确认现在的方案能不能简单应用;采头触觉传感器的信号特征,模拟车辆采棉花,看这个信号什么特点,如何辅助循迹或者局部路径的修正。
以上任务已经具备大部分了。

8.30
在10月份,我们有没有可能,在开始的时候,多采集几个点,把地头的十来米打点打出来,后面就循迹?这些轨迹,我们可以放在一个EXCEL表格中,批量导入。
我们直接做精细化的路径采集,然后循迹。其实,采集这些路径,比收棉花效率高多了。我们用这种方式,先让采棉机可以用。然后,收集数据回来,做我们自己的感知、规划和控制的工作。
这是新的规划的想法。我其实并不支持,打点需要的资源人力还是比较大的。
以及拍摄全流程视频。

9.1
在开学的这一天我们依然坚守!明天宋老师他们就要过来了,我们的工作也基本完成了90%,其中使用的一键启动主要用到了.sh脚本+桌面快捷方式这两个关键功能。
首先是建立一个desktop:
cd /usr/share/applications
sudo gedit pycharm.desktop
里面需要加入的是:
[Desktop Entry]
Type=Application
Name=cotton start
GenericName= cotton start
Comment= cotton start
Exec=“/home/cyun/cotton_ws/src/self_start/cotton_one_step_start.sh” %f
Icon=/home/cyun/cotton_ws/src/self_start/ cotton_one_step_start.png
Terminal=pycharm
Categories=Pycharm;
(基本思路是这样)
第一版的启动脚本只有一个,但是我发现只使用一个会占用大量的空间,屏幕是看不了的。所有把1个脚本分成了两个:

# 规划程序

sleep 2s
gnome-terminal --tab --title=“Plan” – bash -c “cd /home/nvidia/cotton_ws;source devel/setup.bash;cd /home/nvidia/cotton_ws; rosrun planning global_path_planning.py; exec bash”
one_step_start1.sh:
sleep 1s

开roscore

gnome-terminal --tab --title=“roscore” – bash -c “source /opt/ros/noetic/setup.bash;roscore; exec bash”

开gps

sleep 1s
gnome-terminal --tab --title=“gps_imu_pub” – bash -c “cd /home/nvidia/cotton_ws;source devel/setup.bash;cd /home/nvidia/cotton_ws; rosrun perception gps_imu_pub.py ; exec bash”
sleep 2s
gnome-terminal --tab --title=“camera” – bash -c “cd /home/nvidia/cotton_ws;source devel/setup.bash;cd /home/nvidia/cotton_ws; rosrun usb_cam img_publisher ; exec bash”

# 开人机交互界面(点指令下发)

sleep 5s
gnome-terminal --tab --title=“Hmi” – bash -c “cd /home/nvidia/cotton_ws;source devel/setup.bash;cd /home/nvidia/cotton_ws; rosrun hmi hmi_node ; exec bash”
sleep 5s
gnome-terminal --tab --title=“fault_diagnosis” – bash -c “cd /home/nvidia/cotton_ws;source devel/setup.bash;cd /home/nvidia/cotton_ws; rosrun faultdiagnosis fault_diagnosis.py ; exec bash”
sleep 4s
gnome-terminal --tab --title=“radar” – bash -c “cd /home/nvidia/cotton_ws;source devel/setup.bash;cd /home/nvidia/cotton_ws; roslaunch pro_can radar_nodes.launch ; exec bash”

one_step_start2.sh:

# 控制

sleep 2s
gnome-terminal --tab --title=“Control” – bash -c “cd /home/nvidia/cotton_ws;source devel/setup.bash;cd /home/nvidia/cotton_ws; rosrun control path_speed_control.py; exec bash”

显示CTE等信息

sleep 2s
gnome-terminal --tab --title=“CTE_visual” – bash -c “cd /home/nvidia/cotton_ws;source devel/setup.bash;cd /home/nvidia/cotton_ws; rosrun control cte_visual.py; exec bash”

线控程序

sleep 5s
gnome-terminal --tab --title=“Wirecontrol” – bash -c “cd /home/nvidia/cotton_ws;source devel/setup.bash;cd /home/nvidia/cotton_ws; rosrun wirecontrol wired_control.py ; exec bash”

sleep 4s

record

gnome-terminal --tab --title=“Recorder” – bash -c “cd /home/nvidia/cotton_ws;source devel/setup.bash;rosbag record -O /home/nvidia/Documents/database/$(date +%m-%d_%H-%M) -a;exec bash”
后面打算把一键功能和开机自启结合一下。
带着老师他们把现在的车上的算法过了一遍,
请添加图片描述

9.2
修改了几个规划的bug,同时开始进行算法的验证
修改了故障诊断算法,适配诊断的任务需要。
探索c++版的ros通信研究,主要包括一下部分:
首先是msg的建议,这个和之前的并没有区别,但是要注意后面不再是import,而是include实现,同时也不再支持一次include多个msg了。以下是需要的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0.2)
project(car_interfaces)

Compile as C++11, supported in ROS Kinetic and newer

add_compile_options(-std=c++11)

Find catkin macros and libraries

if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)

is used, also find other catkin packages

find_package(catkin REQUIRED COMPONENTS
message_generation
message_runtime
roscpp
rospy
std_msgs
)
add_message_files(
FILES
GlobalPathPlanningInterface.msg
GpsImuInterface.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(

INCLUDE_DIRS include

LIBRARIES car_interfaces

CATKIN_DEPENDS message_generation message_runtime roscpp rospy std_msgs

DEPENDS system_lib

)
include_directories(

include

${catkin_INCLUDE_DIRS}
)
Package.xml:

<?xml version="1.0"?> car_interfaces 0.0.0 The car_interfaces package cyun catkin message_generation message_runtime roscpp rospy std_msgs roscpp rospy std_msgs message_runtime message_generation roscpp rospy std_msgs 此外,需要适应

9.3
修改人机交互界面,最终版本的确定。
人机交互界面加入了视觉相机,相机的使用。发现了多个相机不适配控制器的问题,这个不容易解决,后面再看型号怎么办。
相机的话题发布:
#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui.hpp>
#include <opencv2/calib3d.hpp>
#include <cv_bridge/cv_bridge.h>
#include

int main(int argc, char** argv)
{
ros::init(argc, argv, “img_publisher”);
ros::NodeHandle nh;
image_transport::ImageTransport it(nh);
image_transport::Publisher pub = it.advertise(“camera/image”, 1);

cv::VideoCapture cap;
cv::Mat frame;
int deviceID=0;
if(argc>1)
deviceID=argv[1][0]-‘0’;
int apiID=cv::CAP_ANY;
cap.open(deviceID+apiID);
if(!cap.isOpened()){
std::cerr<<“ERROR! Unable to open camera”<<std::endl;
return -1;
}

ros::Rate loop_rate(30);
while (nh.ok()) {
cap.read(frame);
if(!frame.empty()){
sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), “bgr8”, frame).toImageMsg();
pub.publish(msg);
}
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
这是之后的目标
1.把这个结构给完全理解并深入掌握
2.按照相应的规则重新写线程

请添加图片描述

9.4
最后的一天,主要内容是拍摄相关的纪录片,对于我来说,感受还是挺深的。其实是一个关于倒计时的故事。赶在老师到来前,日夜的调试,实现了既定目标90%,不成熟是肯定的。看到我们团队的同学顶着烈日采集重要数据毫无抱怨,看到我们设计的算法跑在祖国的北疆大地上,看到我们的成果受到肯定,还是很高兴的。
整个团队中,从改装组的吕工,硬件的黄工和线控的小姜工,以及安装工作的姜工等,从他们那学到了很多的知识,专业性非常强。同时还有和我一起出差的小伙伴们,能够一起坚持下来。
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue——组件数据传递与props校验

文章目录 前言组件数据传递的几种类型简单字符串类型数据专递其他类型数据(数字、数组、对象)传递注意事项 数据传递值校验限定数据类型 type给定默认值 default指定必选项 required 前言 组件与组件之间并不是完全独立的&#xff0c;他们之间可以进行一些数据的传递操作。传递…

10个高清视频素材库分享,高清高质量的分享给你

今天&#xff0c;我将为各位介绍几个极具价值的高清视频素材库。无论您是短视频创作者、自媒体运营者还是影视后期制作专家&#xff0c;这些素材库将大大提升您作品的质量。现在&#xff0c;让我们直接深入主题&#xff0c;探索这些优秀的资源平台&#xff01; 蛙学府视频素材…

使用cesiumLab使shp转为3dtlies

过程不做赘述&#xff0c;网上大把&#xff0c;说下注意事项。 1. 存储3DTiles 选项 若是打开则输出的文件为glb格式文件,因为glb文件好储存易传输跨平台。cesium可以使用但无法处理&#xff0c;例如改变颜色&#xff0c;改着色器等。若是不打开则输出的文件为bm3d格式文件,此…

ShowDoc item_id 未授权SQL注入漏洞复现

0x01 产品简介 ShowDoc 是一个开源的在线文档协作平台,它支持Markdown、图片等多种格式,方便团队成员共同编辑和分享文档。企业常见使用场景是使用其进行接口文档、内部知识库管理。 0x02 漏洞概述 2024年6月,ShowDoc官方发布新版本修复了一个SQL注入漏洞。鉴于该漏洞无前…

k8s怎么监听自定义资源的变更?(2)

接上一篇当生成下面代码之后怎么去使用呢&#xff1f; 1.生成crd文件 这里我们通过kubebuilder的一个子项目 controller-gen 来生成crd文件 https://github.com/kubernetes-sigs/controller-tools curl -L -o https://github.com/kubernetes-sigs/controller-tools; go ins…

【前端】响应式布局笔记——flex

二、Flex Flex(FlexiableBox:弹性盒子&#xff0c;用于弹性布局&#xff0c;配合rem处理尺寸的适配问题)。 1、flex-direction:子元素在父元素盒子中的排列方式。 父级元素添加&#xff1a;flex-direction: row; 父级元素添加&#xff1a;flex-direction: row-reverse; 父…

基于百度接口的实时流式语音识别系统

目录 基于百度接口的实时流式语音识别系统 1. 简介 2. 需求分析 3. 系统架构 4. 模块设计 4.1 音频输入模块 4.2 WebSocket通信模块 4.3 音频处理模块 4.4 结果处理模块 5. 接口设计 5.1 WebSocket接口 5.2 音频输入接口 6. 流程图 程序说明文档 1. 安装依赖 2.…

RPA-UiBot6.0数据采集机器人(海量信息一网打尽)内附RPA师资培训课程

前言 友友们是否曾为海量的数据信息而头疼,不知道如何从中精准抓取你所需的数据?小北的这篇博客将为你揭晓答案,让我们一起学习如何运用RPA数据采集机器人,轻松实现海量信息的快速抓取与整理,助力你的工作效率翻倍! 诚邀各位友友参与小北博客的评论,共同开启自动…

C++ Primer 总结索引 | 第十五章:面向对象程序设计

继承和动态绑定 对程序的编写 有两方面的影响&#xff1a;一是 我们可以更容易地定义与其他类相似 但不完全相同的新类&#xff1b;二是 在使用这些彼此相似的类编写程序时&#xff0c;我们可以在一定程度上 忽略掉它们的区别 在很多程序中都存在着一些相互关联 但是有细微差别…

【机器学习300问】107、自然语言处理(NLP)领域有哪些子任务?

自然语言处理&#xff08;NLP&#xff09;是计算机科学、人工智能和语言学领域的一个交叉学科&#xff0c;致力于让计算机能够理解、解析、生成和与人类的自然语言进行互动。自然语言指的是人们日常交流使用的语言&#xff0c;如英语、汉语等&#xff0c;与计算机编程语言相对。…

IO流----字节流

字节流 字节流&#xff1a;操作&#xff1a;文件字节输入输出流 &#xff1a;写入数据&#xff1a;读取数据&#xff1a;文件拷贝&#xff1a; 带缓冲区的字节输入输出流&#xff1a;拷贝文件&#xff1a;写入数据&#xff1a;读取数据: 深入 带缓冲区的字节输出流 &#xff1a…

C语言基础学习之位运算

枚举类型 enum 枚举名 { 枚举常量 //名字 }; 注意: 1.c语言中 对于枚举类型 实际上是 当作整型处理的 2.提高代码可读性&#xff0c; 写成枚举&#xff0c;可以做语法检查 3.枚举常量&#xff0c;之间用逗号隔开 4.枚举常量&#xff0c;可以给初值&#xff0c;给了初值之后&…

React(五)useEffect、useRef、useImperativeHandle、useLayoutEffect

(一)useEffect useEffect – React 中文文档 useEffect hook用于模拟以前的class组件的生命周期&#xff0c;但比原本的生命周期有着更强大的功能 1.类组件的生命周期 在类组件编程时&#xff0c;网络请求&#xff0c;订阅等操作都是在生命周期中完成 import React, { Com…

二叉树练习题(2024/6/5)

1翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,3,1]…

空间不够用了怎么办

空间告急啊哥们 整理一下清理空间有用的一些blog吧。 【linux】公共服务器如何清理过多的.cache缓存 linux根目录空间不足&#xff0c;追加空间到根目录下 【linux】linux磁盘空间 目录查看清理 和 文件查看清理

windows系统 flutter 开发环境配置

1、管理员运行powershell&#xff0c;安装&#xff1a;Chocolatey 工具&#xff0c;粘贴复制运行下列脚本: Chocolatey 官方安装文档 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManage…

韩顺平0基础学Java——第17天

p342-373 上课的时候一部分在纸上写过了&#xff0c;就不在这里复盘了。 this可以调用本类的所有方法&#xff0c;super可以调用父类的非private方法 Test Demo Rose Jack John jack 重写equals方法&#xff1a; 15&#xff1a; 1.调用C的有参构造器 2.进入B的有参构造器…

数字化营销有哪些模式?企业采用数字营销方式有什么意义?

在当今快速发展的商业环境中&#xff0c;营销已经远远超越了传统的推广和销售概念&#xff0c;演变成一种复杂而全面的组织职能。随着信息技术的飞速发展&#xff0c;数字化营销应运而生&#xff0c;为企业与消费者之间的互动带来了革命性的改变。数字化营销不仅为企业提供了全…

Spark SQL - 操作数据帧

本教程将通过一个具体的案例来演示如何在Spark SQL中操作数据帧。我们将从获取学生数据帧开始&#xff0c;包括两种方法&#xff1a;一是由数据集转换而来&#xff0c;二是直接读取文件生成数据帧。然后&#xff0c;我们将对数据帧进行各种操作&#xff0c;如投影、过滤、统计和…

SpringCache 缓存 - @Cacheable、@CacheEvict、@CachePut、@Caching、CacheConfig 以及优劣分析

目录 SpringCache 缓存 环境配置 1&#xff09;依赖如下 2&#xff09;配置文件 3&#xff09;设置缓存的 value 序列化为 JSON 格式 4&#xff09;EnableCaching 实战开发 Cacheable CacheEvict CachePut Caching CacheConfig SpringCache 的优势和劣势 读操作…