Jetson Orin NX 开发指南(9): MAVROS 的安装、配置与运行

news2024/10/6 12:32:15

一、前言

由于 Jetson 系列开发板常作为自主无人机的机载电脑,而无人机硬件平台如 PX4 和 ArduPilot 等通过 MAVLink 进行发布无人机状态和位姿等信息,要实现机载电脑与 MAVLink 的通信,必须借助 Mavros 功能包,因此,本文主要介绍 Mavros 功能包的安装、配置与使用,主要参考

GitHub - mavlink/mavros at master

https://github.com/mavlink/mavros/blob/master/mavros/README.md#installation

Ubuntu 安装并配置 mavros (USB 连接)_ubuntu安装mavros-CSDN博客

官方给出了直接安装和源码安装两种方法,由于一般 mavros 安装并配置完成后不会轻易改动,且十分常用,因此比较推荐直接安装方法,本文也只介绍直接安装方法。

二、Mavros 的安装

由于 Jetson Orin NX 的 JetPack 5.1.2 对应的是 Ubuntu 20.04,因此我们选择安装 noetic 版本的 mavros 功能包,终端输入

sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras -y

此时可以查看 /usr/share/ 下多了一个 GeographicLib 文件夹,其内容是空的,需要我们自己添加进去

进入 ~/Documents/ 目录,下载脚本文件

wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh

然后给下载好的脚本文件添加可执行权限,

sudo chmod +x ./install_geographiclib_datasets.sh

运行该脚本下载所需文件

sudo ./install_geographiclib_datasets.sh

如果执行报错,就直接去GeographicLib 官网下载(可能要挂梯子。。。)对应的三个包,下载得到三个文件夹:

1.GeographicLib geoids egm96-5 官网下载链接:

Download egm96-5.tar.bz2 (GeographicLib)

2.GeographicLib gravity egm 96官网下载链接

Download egm96.zip (GeographicLib)

3.GeographicLib magnetic emm2015 官网下载链接:

Download emm2015.zip (GeographicLib)

在 /usr/share/GeographicLib/ 路径下,将上面下载的三个压缩包解压后放在这个文件夹内,如下所示

至此,mavros 就安装成功了!

三、Mavrso 的运行

由于 Jetson Orin NX 与飞控(飞行控制器)一般有两种通信连接方式,一种是通过 USB 连接,另一种是通过串口连接,本节将分别介绍两种连接方式使得 Jetson Orin NX 通过 Mavros 实现与飞控的通信。

由于时下最新的 Pixhawk 系列飞控为 Pixhawk 6X,因此本文主要介绍 Jetson Orin NX 与 Pixhawk 6X 的通信,其他电脑与飞控的通信方式也是相同的!

3.1 Jetson Orin NX 与 Pixhawk 6X 实现 USB 通信

运行 Mavros 之前需要现修改 launch 启动文件

打开 /opt/ros/noetic/share/mavros/launch/ 路径下的 px4.launch 文件

可以看到 fcu_url 默认为 /dev/ttyACM0:57600,其中 ttyACM0 表示 USB 连接,57600 表示波特率,这里我们不对这个文件进行修改,而是在当前目录下新建一个

终端输入

cd /opt/ros/noetic/share/mavros/launch/
sudo touch px4_ACM0.launch

打开 px4_ACM0.launch 文件,

sudo gedit px4_ACM0.launch

将其内容改为

<launch>
	<!-- vim: set ft=xml noet : -->
	<!-- example launch script for PX4 based FCU's -->

	<arg name="fcu_url" default="/dev/ttyACM0:921600" />
	<arg name="gcs_url" default="" />
	<arg name="tgt_system" default="1" />
	<arg name="tgt_component" default="1" />
	<arg name="log_output" default="screen" />
	<arg name="fcu_protocol" default="v2.0" />
	<arg name="respawn_mavros" default="false" />

	<include file="$(find mavros)/launch/node.launch">
		<arg name="pluginlists_yaml" value="$(find mavros)/launch/px4_pluginlists.yaml" />
		<arg name="config_yaml" value="$(find mavros)/launch/px4_config.yaml" />

		<arg name="fcu_url" value="$(arg fcu_url)" />
		<arg name="gcs_url" value="$(arg gcs_url)" />
		<arg name="tgt_system" value="$(arg tgt_system)" />
		<arg name="tgt_component" value="$(arg tgt_component)" />
		<arg name="log_output" value="$(arg log_output)" />
		<arg name="fcu_protocol" value="$(arg fcu_protocol)" />
		<arg name="respawn_mavros" default="$(arg respawn_mavros)" />
	</include>
</launch>

至此,Mavros 的启动文件就配置完成了!

然后终端输入

roslaunch mavros px4_ACM0.launch

启动 mavros,发现报错

[FATAL] [1697177878.518260611]: FCU: DeviceError:serial:open: Permission denied

原因是 /dev/ttyACM0 没有可执行权限,需要先添加可执行权限,终端输入

sudo chmod 777 /dev/ttyACM0

然后再次启动 mavros,终端输入

roslaunch mavros px4_ACM0.launch

结果显示

这表示 mavros 成功连接上了飞控!

此时可以查看 mavros 话题,终端输入

rostopic list

打印输出

/diagnostics
/mavlink/from
/mavlink/gcs_ip
/mavlink/to
/mavros/actuator_control
/mavros/adsb/send
/mavros/adsb/vehicle
/mavros/altitude
/mavros/battery
/mavros/cam_imu_sync/cam_imu_stamp
/mavros/camera/image_captured
/mavros/cellular_status/status
/mavros/companion_process/status
/mavros/debug_value/debug
/mavros/debug_value/debug_float_array
/mavros/debug_value/debug_vector
/mavros/debug_value/named_value_float
/mavros/debug_value/named_value_int
/mavros/debug_value/send
/mavros/esc_info
/mavros/esc_status
/mavros/esc_telemetry
/mavros/estimator_status
/mavros/extended_state
/mavros/fake_gps/mocap/tf
/mavros/geofence/waypoints
/mavros/global_position/compass_hdg
/mavros/global_position/global
/mavros/global_position/gp_lp_offset
/mavros/global_position/gp_origin
/mavros/global_position/local
/mavros/global_position/raw/fix
/mavros/global_position/raw/gps_vel
/mavros/global_position/raw/satellites
/mavros/global_position/rel_alt
/mavros/global_position/set_gp_origin
/mavros/gps_input/gps_input
/mavros/gps_rtk/rtk_baseline
/mavros/gps_rtk/send_rtcm
/mavros/gpsstatus/gps1/raw
/mavros/gpsstatus/gps1/rtk
/mavros/gpsstatus/gps2/raw
/mavros/gpsstatus/gps2/rtk
/mavros/hil/actuator_controls
/mavros/hil/controls
/mavros/hil/gps
/mavros/hil/imu_ned
/mavros/hil/optical_flow
/mavros/hil/rc_inputs
/mavros/hil/state
/mavros/home_position/home
/mavros/home_position/set
/mavros/imu/data
/mavros/imu/data_raw
/mavros/imu/diff_pressure
/mavros/imu/mag
/mavros/imu/static_pressure
/mavros/imu/temperature_baro
/mavros/imu/temperature_imu
/mavros/landing_target/lt_marker
/mavros/landing_target/pose
/mavros/landing_target/pose_in
/mavros/local_position/accel
/mavros/local_position/odom
/mavros/local_position/pose
/mavros/local_position/pose_cov
/mavros/local_position/velocity_body
/mavros/local_position/velocity_body_cov
/mavros/local_position/velocity_local
/mavros/log_transfer/raw/log_data
/mavros/log_transfer/raw/log_entry
/mavros/mag_calibration/report
/mavros/mag_calibration/status
/mavros/manual_control/control
/mavros/manual_control/send
/mavros/mission/reached
/mavros/mission/waypoints
/mavros/mocap/pose
/mavros/mount_control/command
/mavros/mount_control/orientation
/mavros/mount_control/status
/mavros/nav_controller_output
/mavros/obstacle/send
/mavros/odometry/in
/mavros/odometry/out
/mavros/onboard_computer/status
/mavros/param/param_value
/mavros/play_tune
/mavros/px4flow/ground_distance
/mavros/px4flow/raw/optical_flow_rad
/mavros/px4flow/raw/send
/mavros/px4flow/temperature
/mavros/radio_status
/mavros/rallypoint/waypoints
/mavros/rc/in
/mavros/rc/out
/mavros/rc/override
/mavros/setpoint_accel/accel
/mavros/setpoint_attitude/cmd_vel
/mavros/setpoint_attitude/thrust
/mavros/setpoint_position/global
/mavros/setpoint_position/global_to_local
/mavros/setpoint_position/local
/mavros/setpoint_raw/attitude
/mavros/setpoint_raw/global
/mavros/setpoint_raw/local
/mavros/setpoint_raw/target_attitude
/mavros/setpoint_raw/target_global
/mavros/setpoint_raw/target_local
/mavros/setpoint_trajectory/desired
/mavros/setpoint_trajectory/local
/mavros/setpoint_velocity/cmd_vel
/mavros/setpoint_velocity/cmd_vel_unstamped
/mavros/state
/mavros/statustext/recv
/mavros/statustext/send
/mavros/target_actuator_control
/mavros/terrain/report
/mavros/time_reference
/mavros/timesync_status
/mavros/trajectory/desired
/mavros/trajectory/generated
/mavros/trajectory/path
/mavros/tunnel/in
/mavros/tunnel/out
/mavros/vfr_hud
/mavros/vision_pose/pose
/mavros/vision_pose/pose_cov
/mavros/vision_speed/speed_twist_cov
/mavros/wind_estimation
/move_base_simple/goal
/rosout
/rosout_agg
/tf
/tf_static

可以查看 IMU 频率,终端输入

rostopic hz /mavros/imu/data

结果显示

此时 IMU 话题频率为 200 左右,至此 Mavros 就安装完成了!

3.2 Jetson Orin NX 与 Pixhawk 6X 实现串口通信

首先查询 Pixhawk 6X 中 TELEM 2 的接口情况,参考

Pixhawk Mini-Base Ports - Holybro Docs

我们发现 TELEM 2 端口的 2 号口是信号输出(TX),3 号口是信号输入 (RX),6号口是地线(GND),因此我们只需要这三个接口连到机载电脑(Jetson Orin NX)即可。

我们需要查询机载电脑的飞控串口(pinout),用于连接飞控,注意到在 Jetson Orin NX 上有 40 个针脚(pinout),Jetson 系列的 PINOUT 主要参考

NVIDIA Jetson Xavier NX GPIO Header Pinout - JetsonHacks

但是其目前没有更新 Jetson Orin NX 的 PINOUT 情况,但是实际上其接口情况是与 Jetson Xavier NX 一致的,这里给出 Jetson Xavier NX 的 部分 PINOUT 的接口情况

我们这里需要的是 6 号串口(GND)、 8 号串口(TX)、10 号串口(RX),它们与飞控的连接方式为 GND —— GND,TX —— RX, RX —— TX,也就是

Jetson Orin NX 端 6 号串口 ——> Pixhawk 6X 端 TELEM 2 的 6 号端口

Jetson Orin NX 端 8 号串口 ——> Pixhawk 6X 端 TELEM 2 的 3 号端口

Jetson Orin NX 端 10 号串口——> Pixhawk 6X 端 TELEM 2 的 2 号端口

接线对应如下图所示(蓝——蓝,白——白,黑——黑)

至此接线就完成了,最后在 Jetson Orin NX 端配置 mavros 启动文件即可实现 Jetson Orin NX 与 Pixhawk 6X 通过串口通信。

在此之前我们先通过下图查看 Jetson Orin NX 的 PINOUT 的 8 号和 10 号接口对应文件为 /dev/ttyTHS0 文件

因此我们在 /opt/ros/noetic/share/mavros/launch/ 路径下创建一个 px4_THS0.launch 文件,其内容修改为(注意到其 fcu_url 的默认值为 /dev/ttyTHS0:921600,分别对应串口文件和波特率)

<launch>
	<!-- vim: set ft=xml noet : -->
	<!-- example launch script for PX4 based FCU's -->

	<arg name="fcu_url" default="/dev/ttyTHS0:921600" />
	<arg name="gcs_url" default="" />
	<arg name="tgt_system" default="1" />
	<arg name="tgt_component" default="1" />
	<arg name="log_output" default="screen" />
	<arg name="fcu_protocol" default="v2.0" />
	<arg name="respawn_mavros" default="false" />

	<include file="$(find mavros)/launch/node.launch">
		<arg name="pluginlists_yaml" value="$(find mavros)/launch/px4_pluginlists.yaml" />
		<arg name="config_yaml" value="$(find mavros)/launch/px4_config.yaml" />

		<arg name="fcu_url" value="$(arg fcu_url)" />
		<arg name="gcs_url" value="$(arg gcs_url)" />
		<arg name="tgt_system" value="$(arg tgt_system)" />
		<arg name="tgt_component" value="$(arg tgt_component)" />
		<arg name="log_output" value="$(arg log_output)" />
		<arg name="fcu_protocol" value="$(arg fcu_protocol)" />
		<arg name="respawn_mavros" default="$(arg respawn_mavros)" />
	</include>
</launch>

修改完成后保存,然后将 Jetson Orin NX 与 Pixhawk 6X 通过串口连接,如下图所示

可以看到此时 Pixhawk 6X 是通过电池供电的(也可以通过 USB 方式供电),并且 Pixhawk 6X 与 Jetson Orin NX 只有 Pixhawk 6X 的 TELEM 2 端口 到 Jetson Orin NX 的 PINOUT 6 号、8 号、10 号接口的接线(并没有 USB 线连接),因此如果在 Jetson Orin NX 上如果能够接收到来自 Pixhawk 6X 的飞控信息,那么通信数据必然是通过串口传输的!

连接后我们先给 /dev/ttyTHS0 授予可执行权限

sudo chmod 777 /dev/ttyTHS0

接下来我们启动 mavros,终端输入

roslaunch mavros px4_THS0.launch

结果显示

这表示 mavros 成功连接上了飞控!

此时可以查看 mavros 话题,终端输入

rostopic list

可以受到如下话题

/diagnostics
/mavlink/from
/mavlink/gcs_ip
/mavlink/to
/mavros/actuator_control
/mavros/adsb/send
/mavros/adsb/vehicle
/mavros/altitude
/mavros/battery
/mavros/cam_imu_sync/cam_imu_stamp
/mavros/camera/image_captured
/mavros/cellular_status/status
/mavros/companion_process/status
/mavros/debug_value/debug
/mavros/debug_value/debug_float_array
/mavros/debug_value/debug_vector
/mavros/debug_value/named_value_float
/mavros/debug_value/named_value_int
/mavros/debug_value/send
/mavros/esc_info
/mavros/esc_status
/mavros/esc_telemetry
/mavros/estimator_status
/mavros/extended_state
/mavros/fake_gps/mocap/tf
/mavros/geofence/waypoints
/mavros/global_position/compass_hdg
/mavros/global_position/global
/mavros/global_position/gp_lp_offset
/mavros/global_position/gp_origin
/mavros/global_position/local
/mavros/global_position/raw/fix
/mavros/global_position/raw/gps_vel
/mavros/global_position/raw/satellites
/mavros/global_position/rel_alt
/mavros/global_position/set_gp_origin
/mavros/gps_input/gps_input
/mavros/gps_rtk/rtk_baseline
/mavros/gps_rtk/send_rtcm
/mavros/gpsstatus/gps1/raw
/mavros/gpsstatus/gps1/rtk
/mavros/gpsstatus/gps2/raw
/mavros/gpsstatus/gps2/rtk
/mavros/hil/actuator_controls
/mavros/hil/controls
/mavros/hil/gps
/mavros/hil/imu_ned
/mavros/hil/optical_flow
/mavros/hil/rc_inputs
/mavros/hil/state
/mavros/home_position/home
/mavros/home_position/set
/mavros/imu/data
/mavros/imu/data_raw
/mavros/imu/diff_pressure
/mavros/imu/mag
/mavros/imu/static_pressure
/mavros/imu/temperature_baro
/mavros/imu/temperature_imu
/mavros/landing_target/lt_marker
/mavros/landing_target/pose
/mavros/landing_target/pose_in
/mavros/local_position/accel
/mavros/local_position/odom
/mavros/local_position/pose
/mavros/local_position/pose_cov
/mavros/local_position/velocity_body
/mavros/local_position/velocity_body_cov
/mavros/local_position/velocity_local
/mavros/log_transfer/raw/log_data
/mavros/log_transfer/raw/log_entry
/mavros/mag_calibration/report
/mavros/mag_calibration/status
/mavros/manual_control/control
/mavros/manual_control/send
/mavros/mission/reached
/mavros/mission/waypoints
/mavros/mocap/pose
/mavros/mount_control/command
/mavros/mount_control/orientation
/mavros/mount_control/status
/mavros/nav_controller_output
/mavros/obstacle/send
/mavros/odometry/in
/mavros/odometry/out
/mavros/onboard_computer/status
/mavros/param/param_value
/mavros/play_tune
/mavros/px4flow/ground_distance
/mavros/px4flow/raw/optical_flow_rad
/mavros/px4flow/raw/send
/mavros/px4flow/temperature
/mavros/radio_status
/mavros/rallypoint/waypoints
/mavros/rc/in
/mavros/rc/out
/mavros/rc/override
/mavros/setpoint_accel/accel
/mavros/setpoint_attitude/cmd_vel
/mavros/setpoint_attitude/thrust
/mavros/setpoint_position/global
/mavros/setpoint_position/global_to_local
/mavros/setpoint_position/local
/mavros/setpoint_raw/attitude
/mavros/setpoint_raw/global
/mavros/setpoint_raw/local
/mavros/setpoint_raw/target_attitude
/mavros/setpoint_raw/target_global
/mavros/setpoint_raw/target_local
/mavros/setpoint_trajectory/desired
/mavros/setpoint_trajectory/local
/mavros/setpoint_velocity/cmd_vel
/mavros/setpoint_velocity/cmd_vel_unstamped
/mavros/state
/mavros/statustext/recv
/mavros/statustext/send
/mavros/target_actuator_control
/mavros/terrain/report
/mavros/time_reference
/mavros/timesync_status
/mavros/trajectory/desired
/mavros/trajectory/generated
/mavros/trajectory/path
/mavros/tunnel/in
/mavros/tunnel/out
/mavros/vfr_hud
/mavros/vision_pose/pose
/mavros/vision_pose/pose_cov
/mavros/vision_speed/speed_twist_cov
/mavros/wind_estimation
/move_base_simple/goal
/rosout
/rosout_agg
/tf
/tf_static

可以查看 IMU 频率,终端输入

rostopic hz /mavros/imu/data

结果显示

我们IMU 话题频率为 150 左右,这比 USB 连接时数据的接收频率要慢(USB 连接是 IMU 话题频率为 200 HZ 左右),这是正常现象,至此,我们就实现了 Jetson Orin NX 与 Pixhawk 6X 的串口通信!

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

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

相关文章

分页机制详解

分页机制详解 《操作系统真象还原》第五章笔记 内存不足&#xff0c;需要分页机制 我们所写的代码仅仅是完成了某件事的一部分而已&#xff0c;也许是大部分&#xff0c;还有一部分是 CPU 硬件上负责的&#xff0c;这部分咱们不用管&#xff0c;由 CPU 自动完成。比如&#x…

内网渗透——隧道代理

文章目录 代理代理使用场景VPS建立隧道frpMSF木马生成监听开启frp服务端和客户端执行exe木马文件 代理 实验环境&#xff1a; 攻击机kali&#xff1a;192.168.188.133&#xff08;NAT模式&#xff09; 模拟的公网服务器&#xff08;本机&#xff09;&#xff1a;10.9.75.239 …

Python学习基础笔记六十八——循环

循环是编程语言常见的流程控制。 Python语句要让计算机反复地做一些事情&#xff0c;就要用到循环语句。 有While和for循环。 while循环&#xff1a; command input("请输入命令:") while command ! exit:print(f输入的命令是{command})command input("请输…

15. Java反射和注解

Java —— 反射和注解 1. 反射2. 注解 1. 反射 动态语言&#xff1a;变量的类型和属性可以在运行时动态确定&#xff0c;而不需要在编译时指定 常见动态语言&#xff1a;Python&#xff0c;JavaScript&#xff0c;Ruby&#xff0c;PHP&#xff0c;Perl&#xff1b;常见静态语言…

SAP报错CX_SY DYN CALL PARAM MISSING

DYN CALL METH PARAM MISSING CX_SY DYN CALL PARAM MISSING 在 ABAP 中&#xff0c;当你定义一个方法时&#xff0c;可以选择将方法的参数标记为可选&#xff08;可选参数&#xff09;或必需&#xff08;必需参数&#xff09;。如果你不勾选可选参数选项&#xff0c;那么该参…

【AI视野·今日Sound 声学论文速览 第二十五期】Fri, 13 Oct 2023

AI视野今日CS.Sound 声学论文速览 Fri, 13 Oct 2023 Totally 8 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Impact of time and note duration tokenizations on deep learning symbolic music modeling Authors Nathan Fradet, Nicolas Gutowski,…

Sentinel-2 命名规则(Naming Convention)

下述命名规则是2019年12月6日颁布的&#xff0c;自此之后的L1C级别产品都按照这个规则命名&#xff08;其他级别的产品官网没说&#xff09;。 下载下来的文件是个zip&#xff0c;解压后是个与zip同名的 .SAFE 文件。 MMM_MSIXXX_YYYYMMDDHHMMSS_Nxxyy_ROOO_Tnnmab_<Produ…

Modelsim查看波形窗口内断言(SVA)消息指示器

步骤1&#xff1a;创建工程并编译完成 在相应目录下创建好工程并编译无错误后&#xff1b; 步骤二&#xff1a; 在菜单栏中选择“Simulate”—>“Start Simulation”—>“Others”,在“Others Vsim Options”中输入 -msgmode both -displaymsgmode both 步骤三&#xf…

Leetcode——数组的改变、移动练习

453. 最小操作次数使数组元素相等 本人答案超时 class Solution { public:int minMoves(vector<int>& nums) {int len nums.size();int count 0;if (len 1) {count 0;}else {while (nums[0] ! nums[1] || nums[len - 2] ! nums[len - 1]) {for (int i 0; i <…

搭建一个vscode+uni+vue的小程序项目

我们使用 vue2 创建工程作为示例&#xff0c;uni-app中Vue2版的组件库和插件也比较多&#xff0c;稳定、问题少&#xff0c;可以先参考下官方文档:uni-app官网 既然是使用vue脚手架&#xff0c;那肯定要全局安装vue/cli&#xff0c;已安装的可以跳过。 注意&#xff1a;Vue2创…

面试题-React(十二):React中不可变数据的力量

一、不可变数据的概念 不可变数据意味着数据一旦创建&#xff0c;就不能被更改。在React中&#xff0c;每次对数据的修改都会返回一个新的数据副本&#xff0c;而不会改变原始数据。这种方式确保了数据的稳定性和一致性。 二、Props中的不可变数据 在React中&#xff0c;组件…

【数据结构】:二叉树与堆排序的实现

1.树概念及结构(了解) 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的有一个特殊的结点&#…

湖南省人才档案查询

湖南省人才档案查询 微信中查询智慧人社公众号 进入智慧人社公众号&#xff0c;点击智慧人社按钮 点击人才档案查询 查看档案信息

chapter8 Dimensionality Reduction(降维)

设置 首先&#xff0c;确保代码在python2和python3中都能正常工作&#xff0c;导入一些通用模块&#xff0c;确保MatplotLib以内联方式绘制图形&#xff0c;并准备一个函数来保存这些图形: from __future__ import division,print_function,unicode_literalsimport numpy as …

异星工场入门笔记-01

两年前玩过一点&#xff0c;不看教程&#xff0c;单纯地开放世界自己探索&#xff0c;没有同类游戏经验&#xff0c;因此很难有获得感所以放弃了。现在正版游戏涨到130&#xff0c;看在逆势上涨的份上&#xff0c;我倒想继续探索下这个游戏的价值。 玩魔方&#xff0c;记教程步…

深度学习之使用CSDN的InsCode的服务器

CSDN开启了一个InsCode的栏目&#xff0c;在里面可以部署自己的项目&#xff0c;同时可以租赁GPU服务器&#xff1a; 由于博主在CSDN有些积蓄&#xff0c;因此便来测评一下&#xff0c;博主购买了3090这个型号 接下来便是登录使用了&#xff0c;博主使用的是Mobaxterm这个软件&…

彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

彻底解决Qt中文乱码以及汉字编码的问题&#xff08;UTF-8/GBK&#xff09; Chapter1 (彻底解决Qt中文乱码以及汉字编码的问题&#xff08;UTF-8/GBK&#xff09;一、Qt Creator环境设置二、编码知识科普Qt常见的两种编码是:UTF-8和GBK 三、编码转换四、QString显示中文乱码的原…

铜死亡+多组机器学习+WGCNA+分型

今天给同学们分享一篇铜死亡多组机器学习WGCNA分型的生信文章“Machine learning screening for Parkinsons disease-related cuproptosis-related typing development and validation and exploration of personalized drugs for cuproptosis genes”&#xff0c;这篇文章于20…

3.3 封装性

思维导图&#xff1a; 3.3.1 为什么要封装 ### 3.3.1 为什么要封装 **封装**&#xff0c;在Java的面向对象编程中&#xff0c;是一个核心的思想。它主要是为了保护对象的状态不被外部随意修改&#xff0c;确保数据的完整性和安全性。 #### **核心思想&#xff1a;** - 保护…