OpenIPC开源FPV之Ardupilot配置

OpenIPC开源FPV之Ardupilot配置

  • 1. 源由
  • 2. 问题
  • 3. 分析
    • 3.1 MAVLINK_MSG_ID_RAW_IMU
    • 3.2 MAVLINK_MSG_ID_SYS_STATUS
    • 3.3 MAVLINK_MSG_ID_BATTERY_STATUS
    • 3.4 MAVLINK_MSG_ID_RC_CHANNELS_RAW
    • 3.5 MAVLINK_MSG_ID_GPS_RAW_INT
    • 3.6 MAVLINK_MSG_ID_VFR_HUD
    • 3.7 MAVLINK_MSG_ID_GLOBAL_POSITION_INT
    • 3.8 MAVLINK_MSG_ID_ATTITUDE
  • 4. 飞控配置
    • 4.1 配置MAVLinkV2串口
    • 4.2 确认MAVLink端口配置数量
    • 4.3 配置定时MAVLink报文
  • 5. 参考资料

1. 源由

为了将折腾2~3天OpenIPC摄像头Ardupilot配置问题整理下,给各位即将碰到,尚未碰到的朋友准备一份小礼品!

OpenIPC FPV摄像头是一个非常原型的开源数字FPV摄像头,有着非常弹性的功能扩展可能性。并且也希望大家能够轻松上手,少折腾,当然如果有机会,可以往产品化方向落地。

  • The OSD icon has not changed at all #53

2. 问题

在《OpenIPC开源IPC之固件sysupgrade升级》中,其实已经提到了为什么要升级固件,主要原因是怀疑兼容性问题。

==》其实,并不是兼容性问题,而是Ardupilot的配置问题。

3. 分析

vdec内部OSD状态变量主要来自MAVLink命令:

  • MAVLINK_MSG_ID_RAW_IMU
  • MAVLINK_MSG_ID_SYS_STATUS
  • MAVLINK_MSG_ID_BATTERY_STATUS
  • MAVLINK_MSG_ID_RC_CHANNELS_RAW
  • MAVLINK_MSG_ID_GPS_RAW_INT
  • MAVLINK_MSG_ID_VFR_HUD
  • MAVLINK_MSG_ID_GLOBAL_POSITION_INT
  • MAVLINK_MSG_ID_ATTITUDE

3.1 MAVLINK_MSG_ID_RAW_IMU

MAVLink传递结构体:

#define MAVLINK_MSG_ID_RAW_IMU 27

MAVPACKED(
typedef struct __mavlink_raw_imu_t {
 uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
 int16_t xacc; /*<  X acceleration (raw)*/
 int16_t yacc; /*<  Y acceleration (raw)*/
 int16_t zacc; /*<  Z acceleration (raw)*/
 int16_t xgyro; /*<  Angular speed around X axis (raw)*/
 int16_t ygyro; /*<  Angular speed around Y axis (raw)*/
 int16_t zgyro; /*<  Angular speed around Z axis (raw)*/
 int16_t xmag; /*<  X Magnetic field (raw)*/
 int16_t ymag; /*<  Y Magnetic field (raw)*/
 int16_t zmag; /*<  Z Magnetic field (raw)*/
 uint8_t id; /*<  Id. Ids are numbered from 0 and map to IMUs numbered from 1 (e.g. IMU1 will have a message with id=0)*/
 int16_t temperature; /*< [cdegC] Temperature, 0: IMU does not provide temperature values. If the IMU is at 0C it must send 1 (0.01C).*/
}) mavlink_raw_imu_t;

OSD全局变量:

telemetry_raw_imu = imu.temperature;

3.2 MAVLINK_MSG_ID_SYS_STATUS

MAVLink传递结构体:

#define MAVLINK_MSG_ID_SYS_STATUS 1

MAVPACKED(
typedef struct __mavlink_sys_status_t {
 uint32_t onboard_control_sensors_present; /*<  Bitmap showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present.*/
 uint32_t onboard_control_sensors_enabled; /*<  Bitmap showing which onboard controllers and sensors are enabled:  Value of 0: not enabled. Value of 1: enabled.*/
 uint32_t onboard_control_sensors_health; /*<  Bitmap showing which onboard controllers and sensors have an error (or are operational). Value of 0: error. Value of 1: healthy.*/
 uint16_t load; /*< [d%] Maximum usage in percent of the mainloop time. Values: [0-1000] - should always be below 1000*/
 uint16_t voltage_battery; /*< [mV] Battery voltage, UINT16_MAX: Voltage not sent by autopilot*/
 int16_t current_battery; /*< [cA] Battery current, -1: Current not sent by autopilot*/
 uint16_t drop_rate_comm; /*< [c%] Communication drop rate, (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)*/
 uint16_t errors_comm; /*<  Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV)*/
 uint16_t errors_count1; /*<  Autopilot-specific errors*/
 uint16_t errors_count2; /*<  Autopilot-specific errors*/
 uint16_t errors_count3; /*<  Autopilot-specific errors*/
 uint16_t errors_count4; /*<  Autopilot-specific errors*/
 int8_t battery_remaining; /*< [%] Battery energy remaining, -1: Battery remaining energy not sent by autopilot*/
 uint32_t onboard_control_sensors_present_extended; /*<  Bitmap showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present.*/
 uint32_t onboard_control_sensors_enabled_extended; /*<  Bitmap showing which onboard controllers and sensors are enabled:  Value of 0: not enabled. Value of 1: enabled.*/
 uint32_t onboard_control_sensors_health_extended; /*<  Bitmap showing which onboard controllers and sensors have an error (or are operational). Value of 0: error. Value of 1: healthy.*/
}) mavlink_sys_status_t;

OSD全局变量:

telemetry_battery = bat.voltage_battery;
telemetry_current = bat.current_battery;

3.3 MAVLINK_MSG_ID_BATTERY_STATUS

MAVLink传递结构体:

#define MAVLINK_MSG_ID_BATTERY_STATUS 147

MAVPACKED(
typedef struct __mavlink_battery_status_t {
 int32_t current_consumed; /*< [mAh] Consumed charge, -1: autopilot does not provide consumption estimate*/
 int32_t energy_consumed; /*< [hJ] Consumed energy, -1: autopilot does not provide energy consumption estimate*/
 int16_t temperature; /*< [cdegC] Temperature of the battery. INT16_MAX for unknown temperature.*/
 uint16_t voltages[10]; /*< [mV] Battery voltage of cells 1 to 10 (see voltages_ext for cells 11-14). Cells in this field above the valid cell count for this battery should have the UINT16_MAX value. If individual cell voltages are unknown or not measured for this battery, then the overall battery voltage should be filled in cell 0, with all others set to UINT16_MAX. If the voltage of the battery is greater than (UINT16_MAX - 1), then cell 0 should be set to (UINT16_MAX - 1), and cell 1 to the remaining voltage. This can be extended to multiple cells if the total voltage is greater than 2 * (UINT16_MAX - 1).*/
 int16_t current_battery; /*< [cA] Battery current, -1: autopilot does not measure the current*/
 uint8_t id; /*<  Battery ID*/
 uint8_t battery_function; /*<  Function of the battery*/
 uint8_t type; /*<  Type (chemistry) of the battery*/
 int8_t battery_remaining; /*< [%] Remaining battery energy. Values: [0-100], -1: autopilot does not estimate the remaining battery.*/
 int32_t time_remaining; /*< [s] Remaining battery time, 0: autopilot does not provide remaining battery time estimate*/
 uint8_t charge_state; /*<  State for extent of discharge, provided by autopilot for warning or external reactions*/
 uint16_t voltages_ext[4]; /*< [mV] Battery voltages for cells 11 to 14. Cells above the valid cell count for this battery should have a value of 0, where zero indicates not supported (note, this is different than for the voltages field and allows empty byte truncation). If the measured value is 0 then 1 should be sent instead.*/
 uint8_t mode; /*<  Battery mode. Default (0) is that battery mode reporting is not supported or battery is in normal-use mode.*/
 uint32_t fault_bitmask; /*<  Fault/health indications. These should be set when charge_state is MAV_BATTERY_CHARGE_STATE_FAILED or MAV_BATTERY_CHARGE_STATE_UNHEALTHY (if not, fault reporting is not supported).*/
}) mavlink_battery_status_t;

OSD全局变量:

telemetry_current_consumed = batt.current_consumed;

3.4 MAVLINK_MSG_ID_RC_CHANNELS_RAW

MAVLink传递结构体:

#define MAVLINK_MSG_ID_RC_CHANNELS_RAW 35


typedef struct __mavlink_rc_channels_raw_t {
 uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
 uint16_t chan1_raw; /*< [us] RC channel 1 value.*/
 uint16_t chan2_raw; /*< [us] RC channel 2 value.*/
 uint16_t chan3_raw; /*< [us] RC channel 3 value.*/
 uint16_t chan4_raw; /*< [us] RC channel 4 value.*/
 uint16_t chan5_raw; /*< [us] RC channel 5 value.*/
 uint16_t chan6_raw; /*< [us] RC channel 6 value.*/
 uint16_t chan7_raw; /*< [us] RC channel 7 value.*/
 uint16_t chan8_raw; /*< [us] RC channel 8 value.*/
 uint8_t port; /*<  Servo output port (set of 8 outputs = 1 port). Flight stacks running on Pixhawk should use: 0 = MAIN, 1 = AUX.*/
 uint8_t rssi; /*<  Receive signal strength indicator in device-dependent units/scale. Values: [0-254], UINT8_MAX: invalid/unknown.*/
} mavlink_rc_channels_raw_t;

OSD全局变量:

telemetry_rssi = rc_channels_raw.rssi;
telemetry_throttle = (rc_channels_raw.chan4_raw - 1000) / 10;
telemetry_arm = rc_channels_raw.chan5_raw;
telemetry_resolution = rc_channels_raw.chan8_raw;    // used for resolution script, like a trigger

3.5 MAVLINK_MSG_ID_GPS_RAW_INT

MAVLink传递结构体:

#define MAVLINK_MSG_ID_GPS_RAW_INT 24

MAVPACKED(
typedef struct __mavlink_gps_raw_int_t {
 uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
 int32_t lat; /*< [degE7] Latitude (WGS84, EGM96 ellipsoid)*/
 int32_t lon; /*< [degE7] Longitude (WGS84, EGM96 ellipsoid)*/
 int32_t alt; /*< [mm] Altitude (MSL). Positive for up. Note that virtually all GPS modules provide the MSL altitude in addition to the WGS84 altitude.*/
 uint16_t eph; /*<  GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX*/
 uint16_t epv; /*<  GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX*/
 uint16_t vel; /*< [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX*/
 uint16_t cog; /*< [cdeg] Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX*/
 uint8_t fix_type; /*<  GPS fix type.*/
 uint8_t satellites_visible; /*<  Number of satellites visible. If unknown, set to UINT8_MAX*/
 int32_t alt_ellipsoid; /*< [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.*/
 uint32_t h_acc; /*< [mm] Position uncertainty.*/
 uint32_t v_acc; /*< [mm] Altitude uncertainty.*/
 uint32_t vel_acc; /*< [mm] Speed uncertainty.*/
 uint32_t hdg_acc; /*< [degE5] Heading / track uncertainty*/
 uint16_t yaw; /*< [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.*/
}) mavlink_gps_raw_int_t;

OSD全局变量:

telemetry_sats = gps.satellites_visible;
telemetry_lat = gps.lat;
telemetry_lon = gps.lon;

telemetry_lat_base
telemetry_lon_base
telemetry_distance

3.6 MAVLINK_MSG_ID_VFR_HUD

MAVLink传递结构体:

#define MAVLINK_MSG_ID_VFR_HUD 74

typedef struct __mavlink_vfr_hud_t {
 float airspeed; /*< [m/s] Vehicle speed in form appropriate for vehicle type. For standard aircraft this is typically calibrated airspeed (CAS) or indicated airspeed (IAS) - either of which can be used by a pilot to estimate stall speed.*/
 float groundspeed; /*< [m/s] Current ground speed.*/
 float alt; /*< [m] Current altitude (MSL).*/
 float climb; /*< [m/s] Current climb rate.*/
 int16_t heading; /*< [deg] Current heading in compass units (0-360, 0=north).*/
 uint16_t throttle; /*< [%] Current throttle setting (0 to 100).*/
} mavlink_vfr_hud_t;

OSD全局变量:

telemetry_gspeed = vfr.groundspeed * 3.6;
telemetry_vspeed = vfr.climb;
telemetry_altitude = vfr.alt;

3.7 MAVLINK_MSG_ID_GLOBAL_POSITION_INT

MAVLink传递结构体:

#define MAVLINK_MSG_ID_GLOBAL_POSITION_INT 33

typedef struct __mavlink_global_position_int_t {
 uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
 int32_t lat; /*< [degE7] Latitude, expressed*/
 int32_t lon; /*< [degE7] Longitude, expressed*/
 int32_t alt; /*< [mm] Altitude (MSL). Note that virtually all GPS modules provide both WGS84 and MSL.*/
 int32_t relative_alt; /*< [mm] Altitude above ground*/
 int16_t vx; /*< [cm/s] Ground X Speed (Latitude, positive north)*/
 int16_t vy; /*< [cm/s] Ground Y Speed (Longitude, positive east)*/
 int16_t vz; /*< [cm/s] Ground Z Speed (Altitude, positive down)*/
 uint16_t hdg; /*< [cdeg] Vehicle heading (yaw angle), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX*/
} mavlink_global_position_int_t;

OSD全局变量:

telemetry_hdg = global_position_int.hdg / 100;

3.8 MAVLINK_MSG_ID_ATTITUDE

MAVLink传递结构体:

#define MAVLINK_MSG_ID_ATTITUDE 30

typedef struct __mavlink_attitude_t {
 uint32_t time_boot_ms; /*< [ms] Timestamp (time since system boot).*/
 float roll; /*< [rad] Roll angle (-pi..+pi)*/
 float pitch; /*< [rad] Pitch angle (-pi..+pi)*/
 float yaw; /*< [rad] Yaw angle (-pi..+pi)*/
 float rollspeed; /*< [rad/s] Roll angular speed*/
 float pitchspeed; /*< [rad/s] Pitch angular speed*/
 float yawspeed; /*< [rad/s] Yaw angular speed*/
} mavlink_attitude_t;

OSD全局变量:

telemetry_pitch = att.pitch * (180.0 / 3.141592653589793238463);
telemetry_roll = att.roll * (180.0 / 3.141592653589793238463);
telemetry_yaw = att.yaw * (180.0 / 3.141592653589793238463);

4. 飞控配置

MAVLink协议具有可配置的属性,而默认情况下,上述报文并不一定发送。其发送完全取决于当前Ardupilot的配置情况。

在Ardupilot 4.5.6版本情况下,需要进行以下步骤的配置:

4.1 配置MAVLinkV2串口

鉴于,当前硬件上使用了飞控UART8,飞控端配置如下:

注:OpenIPC FPV摄像头默认使用了115200波特率,请根据实际情况调整。

在这里插入图片描述

4.2 确认MAVLink端口配置数量

从这里可以计算出,一共2个MAVLink端口,依次计算出SRn_xxx,编号n。

  • UART0 //SR0_
  • UART8 //SR1_

在这里插入图片描述

4.3 配置定时MAVLink报文

  • MAVLINK_MSG_ID_RAW_IMU //SR1_RAW_SENS
  • MAVLINK_MSG_ID_SYS_STATUS //SR1_EXT_STAT
  • MAVLINK_MSG_ID_BATTERY_STATUS //SR1_EXTRA3
  • MAVLINK_MSG_ID_RC_CHANNELS_RAW //SR1_RC_CHAN
  • MAVLINK_MSG_ID_GPS_RAW_INT //SR1_EXT_STAT
  • MAVLINK_MSG_ID_VFR_HUD //SR1_EXTRA2
  • MAVLINK_MSG_ID_GLOBAL_POSITION_INT //SR1_POSITION
  • MAVLINK_MSG_ID_ATTITUDE //SR1_EXTRA1

在这里插入图片描述

5. 参考资料

【1】Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考
【2】OpenIPC开源FPV之工程编译
【3】OpenIPC开源FPV之工程框架
【4】OpenIPC开源FPV之重要源码包
【5】OpenIPC开源FPV之重要源码启动配置
【6】OpenIPC开源FPV之固件sysupgrade升级

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

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

相关文章

ActiveMQ消息模式Queue和Topic机制讲解

Docker安装ActiveMQ镜像以及通过Java生产消费activemq示例_docker activemq-CSDN博客 背景 周末由于服务器异常宕机&#xff0c;导致业务系统重启后出现ActiveMQ中的数据没有被正常消费&#xff0c;运维认为是消息积压&#xff0c;便联系博主排查。 最终发现并不存在消息积压…

GIS常见前端开发框架

#1024程序员节&#xff5c;征文# 伴随GIS的发展&#xff0c;陆续出现了众多开源地图框架&#xff0c;这些地图框架与众多行业应用融合&#xff0c;极大地拓展了GIS的生命力&#xff0c;这里介绍几个常见的GIS前端开发框架&#xff0c;排名不分先后。 1.Leaflet https://leafl…

Spring--1

spring是一个轻量级的&#xff0c;采用IOC与AOP编程思想的java后端开发框架&#xff0c;简化了企业级的应用开发。 Spring体系 数据访问层&#xff0c;Web层&#xff0c;配置中心&#xff0c;测试区 IOC 控制反转&#xff0c;将创建对象的控制权交由Spring框架&#xff0c;需…

Tongweb7049m4+THS6010-6012版本 传真实ip到后端(by yjm+lwq)

遇到客户需要通过ths传真实ip到后端也就是部署到tongweb的需求&#xff0c;在ths的httpserver.conf里的location块配置了以下内容&#xff1a; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwar…

Redis技术解析(基于Redis的项目实战)

本项目源码请从作者仓库中拉取 Redis复盘: 本项目将通过实战讲解Redis的应用&#xff0c;包括使用Redis共享session实现短信登录、处理商户查询缓存问题、进行优惠券秒杀活动、基于GEOHash定位附近商户、实现UV统计、管理用户签到、构建好友关注系统&#xff0c;以及使用List和…

数字后端实现静态时序分析STA Timing Signoff之min period violation

今天给大家分享一个在高性能数字IC后端实现timing signoff阶段经常遇到的min period violation。大部分时候出现memory min period问题基本上都是需要返工重新生成memory的。这是非常致命的错误&#xff0c;希望大家在做静态时序分析时一定要查看min period violation。 什么是…

Oracle 常见索引扫描方式概述,哪种索引扫描最快!

一.常见的索引扫描方式 INDEX RANGE SCANINDEX FAST FULL SCANINDEX FULL SCAN(MIN/MAX)INDEX FULL SCAN 二.分别模拟使用这些索引的场景 1.INDEX RANGE SCAN create table t1 as select rownum as id, rownum/2 as id2 from dual connect by level<500000; create inde…

Unity RPG梦幻场景素材(附下载链接)

Unity RPG梦幻场景素材 点击下载资源 效果图&#xff1a; 资源链接

CORS预检请求配置流程图 srpingboot和uniapp

首先要会判断预检请求 还是简单请求 简单请求 预检请求 #mermaid-svg-1R9nYRa7P9Pll4AK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1R9nYRa7P9Pll4AK .error-icon{fill:#552222;}#mermaid-svg-1R9nYRa7P9Pll4…

geoserver解析元数据获取图层相关参数

需求&#xff1a; 1、通过geoserver地址获取所有图层名称&#xff1b; 2、加载wms服务&#xff0c;实现自动定位。 获取图层名和范围视图有两种思路&#xff1a; 1、调取geoserver的rest接口。缺点就是需要验证登录。 rest接口官方文档&#xff1a;GeoServer API Docs 2、…

C++(标准输入输出流、命名空间、string字符串、引用)

C特点及优势 &#xff08;1&#xff09;实现了面向对象&#xff0c;在高级语言中&#xff0c;处理运行速度是最快&#xff1b; &#xff08;2&#xff09;非常灵活&#xff0c;功能非常强大&#xff0c;相对于C的指针优势&#xff0c;C的优势为性能和类层次结构&#x…

书生营 L0G4000 玩转HF/魔搭/魔乐社区

模型下载 在codespace上给环境装包&#xff0c;按照教材即可 运行后下载成功 建立下载json文件 新建下载internlm2_5-chat-1_8b的json文件 运行结果 基本上没啥问题&#xff0c;照着教程来就行 模型上传&#xff08;可选&#xff09; push的时候需要先认证token 最后的…

人工智能+医学

医学影响的内型&#xff1a;(X光片、计算机断层扫描、磁共振成像、超声波&#xff09; ITK snap医学图像读取 医学影像领域常见任务: 图像分类、语义分割、疾病预测、目标检测、图像配准、图像生成(应用少)、图像增强、生成放射学报告。 需要有很强的可解释…

Xshell上Linux的基础指令

目录 1、Xshell的使用 2、Linux的常用命令 2.1 位置跳转命令 1、ls 2、cd 3、pwd 2.2 文件操作 1、touch 2、cat 3、echo 4、vim 2.3 目录操作 1、mkdir 2、rm 2.4 移动操作 1、mv 2、cp 2.5 命令手册 2.6 查找操作 2.7 进程展示 2.8 网络信息 3、搭建w…

JS | 详解图片懒加载的6种实现方案

目录 一、什么是懒加载&#xff1f; 二、为什么要懒加载&#xff1f; 三、图片懒加载的实现原理 四、图片懒加载实现方式 3.1 方案一&#xff1a;设置 img 标签属性 loading“lazy” 3.2 方案二&#xff1a;利用JS监听scroll滚动事件 3.3 方案三&#xff1a;利用元素的…

Aatrox-Bert-VITS2部署指南

一、模型介绍 【AI 剑魔 ①】在线语音合成&#xff08;Bert-Vits2&#xff09;&#xff0c;将输入文字转化成暗裔剑魔亚托克斯音色的音频输出。 作者&#xff1a;Xz 乔希 https://space.bilibili.com/5859321 声音归属&#xff1a;Riot Games《英雄联盟》暗裔剑魔亚托克斯 …

Redis——缓存

目录 前言 一、缓存基本概念 1.概念 2.二八定律 二、使用 Redis 作为缓存 三、缓存的更新策略 1.定期生成 2.实时生成 四、Redis 内存淘汰机制 1.通用淘汰策略 &#xff08;1&#xff09;FIFO &#xff08;2&#xff09;LRU &#xff08;3&#xff09;LFU &#…

机器学习在智能水泥基复合材料中的应用与实践

在人工智能与复合材料技术融合的背景下&#xff0c;复合材料的研究和应用正迅速发展&#xff0c;创新解决方案层出不穷。从复合材料性能的精确预测到复杂材料结构的智能设计&#xff0c;从数据驱动的材料结构优化到多尺度分析&#xff0c;人工智能技术正以其强大的数据处理能力…

Linux 权限的理解

内容摘要 本文内容包括shell的运行原理&#xff0c;包括外壳程序的原理、理解、和意义&#xff0c;以及从两个方面对于权限的理解&#xff08;人和事物的属性&#xff09;、修改文件的权限&#xff0c;包括修改文件的拥有者、修改文件拥有者所在的组的用户以及修改文件的三类用…

【linux】线程(二)

10. pthread_t 类型 注意&#xff1a; 每一个线程的库级别的tcb的起始地址&#xff0c;就是线程的 tid每一个线程都有自己独立的栈结构线程和线程之间&#xff0c;也是可以被其他线程看到并访问的&#xff08;比如全局函数&#xff09; 代码 如果想要进程拥有私人的全局变量(即…