【ROS2】MOMO的鱼香ROS2(五)ROS2入门篇——ROS2接口与自定义

ROS2接口与自定义

  • 引言
  • 1 ROS2自带接口
    • 1.1 ROS2通用标准消息包
    • 1.2 ROS2传感器消息包
    • 1.3 ROS2几何相关消息包
  • 2 ROS2接口介绍
    • 2.1 常用CLI命令
    • 2.2 原始数据类型与包装类型
  • 3 自定义接口示例
    • 3.1 接口定义
    • 3.2 自定义接口RCLPY

引言

笔者跟着鱼香ROS的ROS2学习之旅
学习参考:
【ROS2机器人入门到实战】
笔者的学习目录

  1. MOMO的鱼香ROS2(一)ROS2入门篇——从Ubuntu操作系统开启
  2. MOMO的鱼香ROS2(二)ROS2入门篇——ROS2初体验
  3. MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点
  4. MOMO的鱼香ROS2(四)ROS2入门篇——ROS2节点通信之话题与服务

1 ROS2自带接口

接口其实是一种规范

1.1 ROS2通用标准消息包

ros2 interface package std_msgs
std_msgs/msg/String
std_msgs/msg/ByteMultiArray
std_msgs/msg/UInt16
std_msgs/msg/UInt64
std_msgs/msg/UInt8
std_msgs/msg/Int64MultiArray
std_msgs/msg/UInt32MultiArray
std_msgs/msg/UInt16MultiArray
std_msgs/msg/Float32MultiArray
std_msgs/msg/MultiArrayDimension
std_msgs/msg/Float64MultiArray
std_msgs/msg/Int8
std_msgs/msg/Byte
std_msgs/msg/Bool
std_msgs/msg/Int32
std_msgs/msg/Int16
std_msgs/msg/Float64
std_msgs/msg/Header
std_msgs/msg/Char
std_msgs/msg/Int64
std_msgs/msg/MultiArrayLayout
std_msgs/msg/Int16MultiArray
std_msgs/msg/Float32
std_msgs/msg/UInt64MultiArray
std_msgs/msg/UInt8MultiArray
std_msgs/msg/Int8MultiArray
std_msgs/msg/Int32MultiArray
std_msgs/msg/UInt32
std_msgs/msg/ColorRGBA
std_msgs/msg/Empty

以下是一些 std_msgs 中的常见消息类型:

Header: 包含 ROS 消息的标准头部信息,如时间戳和坐标系。

uint32 seq
time stamp
string frame_id

String: 代表字符串。

string data

Bool: 代表布尔值。

bool data

Int8, Int16, Int32, Int64: 代表有符号整数,分别为 8 位、16 位、32 位和 64 位。

int8 data
int16 data
int32 data
int64 data

UInt8, UInt16, UInt32, UInt64: 代表无符号整数,分别为 8 位、16 位、32 位和 64 位。

uint8 data
uint16 data
uint32 data
uint64 data

Float32, Float64: 代表单精度和双精度浮点数。

float32 data
float64 data

这些消息类型可以广泛应用于 ROS 中的不同节点,用于传递基本的数据信息。例如,一个节点可以发布一个包含测量值的 Float32 消息,而另一个节点可以订阅这个消息以获取测量值。

1.2 ROS2传感器消息包

ros2 interface package sensor_msgs
sensor_msgs/msg/PointCloud
sensor_msgs/msg/CompressedImage
sensor_msgs/msg/Image
sensor_msgs/msg/PointField
sensor_msgs/msg/LaserEcho
sensor_msgs/msg/BatteryState
sensor_msgs/msg/MultiDOFJointState
sensor_msgs/msg/NavSatFix
sensor_msgs/msg/Joy
sensor_msgs/msg/MultiEchoLaserScan
sensor_msgs/msg/LaserScan
sensor_msgs/msg/JoyFeedbackArray
sensor_msgs/msg/MagneticField
sensor_msgs/msg/ChannelFloat32
sensor_msgs/msg/RegionOfInterest
sensor_msgs/msg/NavSatStatus
sensor_msgs/msg/Range
sensor_msgs/msg/Illuminance
sensor_msgs/msg/RelativeHumidity
sensor_msgs/msg/Temperature
sensor_msgs/msg/FluidPressure
sensor_msgs/msg/JointState
sensor_msgs/srv/SetCameraInfo
sensor_msgs/msg/Imu
sensor_msgs/msg/CameraInfo
sensor_msgs/msg/JoyFeedback
sensor_msgs/msg/TimeReference
sensor_msgs/msg/PointCloud2

以下是 sensor_msgs 中的一些常见消息类型:

Image: 用于传递图像数据,包括图像的像素数据、编码格式、时间戳等。

Header header
uint32 height
uint32 width
string encoding
uint8 is_bigendian
uint32 step
uint8[] data

CameraInfo: 包含相机的信息,如相机矩阵、畸变参数等。

Header header
uint32 height
uint32 width
string distortion_model
float64[] D
float64[] K
float64[] R
float64[] P
uint32[] binning_x
uint32[] binning_y
sensor_msgs/RegionOfInterest roi

PointCloud2: 用于传递点云数据,包括点的坐标、颜色等信息。

Header header
bool is_dense
string[] fields
uint8 INT8 = 1
uint8 UINT8 = 2
uint8 INT16 = 3
uint8 UINT16 = 4
uint8 INT32 = 5
uint8 UINT32 = 6
uint8 FLOAT32 = 7
uint8 FLOAT64 = 8
uint8 point_step
uint8[] data
uint32 row_step
uint32 width
uint32 height
sensor_msgs/PointField[] fields
bool is_bigendian
uint32 point_step
uint32 row_step
uint32 data_length
uint8[] data

LaserScan: 用于传递激光扫描数据。

Header header
float32 angle_min
float32 angle_max
float32 angle_increment
float32 time_increment
float32 scan_time
float32 range_min
float32 range_max
float32[] ranges
float32[] intensities

IMU:惯性测量单元的方向、角速度和线性加速度

Header header
geometry_msgs/Quaternion orientation
float64[9] orientation_covariance
geometry_msgs/Vector3 angular_velocity
float64[9] angular_velocity_covariance
geometry_msgs/Vector3 linear_acceleration
float64[9] linear_acceleration_covariance

header: 用于包含时间戳等信息的标准 ROS 消息头。
orientation: 包含四元数表示的方向。
orientation_covariance: 一个长度为 9 的数组,表示方向协方差矩阵。
angular_velocity: 包含角速度信息的三维向量。
angular_velocity_covariance: 一个长度为 9 的数组,表示角速度协方差矩阵。
linear_acceleration: 包含线性加速度信息的三维向量。
linear_acceleration_covariance: 一个长度为 9 的数组,表示线性加速度协方差矩阵。

这些消息类型可以用于在 ROS 系统中传递从各种传感器获得的数据。节点可以发布这些消息,而其他节点则可以订阅它们以获取传感器数据。

1.3 ROS2几何相关消息包

ros2 interface package geometry_msgs
geometry_msgs/msg/Quaternion
geometry_msgs/msg/WrenchStamped
geometry_msgs/msg/Point32
geometry_msgs/msg/Accel
geometry_msgs/msg/Pose
geometry_msgs/msg/Vector3
geometry_msgs/msg/PoseArray
geometry_msgs/msg/PoseWithCovarianceStamped
geometry_msgs/msg/Polygon
geometry_msgs/msg/AccelWithCovarianceStamped
geometry_msgs/msg/AccelStamped
geometry_msgs/msg/PoseWithCovariance
geometry_msgs/msg/TransformStamped
geometry_msgs/msg/PointStamped
geometry_msgs/msg/PolygonStamped
geometry_msgs/msg/Vector3Stamped
geometry_msgs/msg/Inertia
geometry_msgs/msg/Wrench
geometry_msgs/msg/AccelWithCovariance
geometry_msgs/msg/Pose2D
geometry_msgs/msg/InertiaStamped
geometry_msgs/msg/PoseStamped
geometry_msgs/msg/QuaternionStamped
geometry_msgs/msg/Transform
geometry_msgs/msg/Twist
geometry_msgs/msg/TwistStamped
geometry_msgs/msg/TwistWithCovarianceStamped
geometry_msgs/msg/TwistWithCovariance
geometry_msgs/msg/Point

以下是一些常见的 geometry_msgs 中的消息类型:

Point: 代表三维空间中的点。

float64 x
float64 y
float64 z

Quaternion: 代表四元数,通常用于表示旋转。

float64 x
float64 y
float64 z
float64 w

Pose: 代表包含位置和方向的位姿。

Point position
Quaternion orientation

Transform: 代表变换矩阵。

Vector3 translation
Quaternion rotation

这些消息类型可以用于 ROS 中的各种应用,例如机器人运动、感知、导航等。通过使用这些消息,ROS 中的不同节点可以相互通信,共享几何信息,从而实现协同工作。

2 ROS2接口介绍

2.1 常用CLI命令

查看接口列表

ros2 interface list

查看某一个接口详细的内容

ros2 interface show std_msgs/msg/String

2.2 原始数据类型与包装类型

基本数据类型,每一个都可以在后面加上[]将其变成数组形式(从一个变成多个)

bool
byte
char
float32, float64
int8, uint8
int16, uint16
int32, uint32
int64, uint64
string

对数据类型进行剥洋葱

ros2 interface show sensor_msgs/msg/Image

终端显示如下:

# This message contains an uncompressed image
# (0, 0) is at top-left corner of imagestd_msgs/Header header # Header timestamp should be acquisition time of image
uint32 height                # image height, that is, number of rows
uint32 width                 # image width, that is, number of columns
string encoding       # Encoding of pixels -- channel meaning, ordering, size                     
uint8 is_bigendian    # is this data bigendian?
uint32 step           # Full row length in bytes
uint8[] data          # actual matrix data, size is (step * rows)

对非基类的数据数据类型std_msgs/Header header进行剥洋葱

ros2 interface show std_msgs/msg/Header

终端显示如下:

# Two-integer timestamp that is expressed as seconds and nanoseconds.
builtin_interfaces/Time stamp
# Transform frame with which this data is associated.
string frame_id

对非基类的数据数据类型builtin_interfaces/Time进行剥洋葱

ros2 interface show builtin_interfaces/msg/Time

终端显示如下:

int32 sec
uint32 nanosec

最后只剩下基类了

3 自定义接口示例

说明:这部分笔者主要是将鱼香ROS2的示例成功跑通,具体流程如下:
示例链接:

【ROS2机器人入门到实战】ROS2接口介绍
【ROS2机器人入门到实战】自定义接口RCLPY实战

3.1 接口定义

1.创建接口功能包

ros2 pkg create alian_ros2_interfaces --build-type ament_cmake --dependencies rosidl_default_generators geometry_msgs

注意功能包类型必须为:ament_cmake

依赖rosidl_default_generators:用于生成ROS中的消息、服务和行为的代码。ROS中的消息和服务是通过IDL(接口定义语言)描述的,而rosidl_default_generators
则负责将这些IDL文件转换为各种编程语言的实际代码。

具体来说,rosidl_default_generators 支持将ROS接口定义语言(ROS
IDL)文件转换为C、C++等语言的源代码。这包括生成用于发布/订阅消息、提供/调用服务以及执行行为所需的代码。

2.编写接口脚本文件
接着创建文件夹(msg、srv)和文件(RobotPose.msg、RobotStatus.msg、MoveRobot.srv),如下图。

.
├── CMakeLists.txt
├── msg
│   ├── RobotPose.msg
│   └── RobotStatus.msg
├── package.xml
└── srv└── MoveRobot.srv
2 directories, 5 files

RobotPose.msg

uint32 STATUS_MOVEING = 1
uint32 STATUS_STOP = 2
uint32  status
geometry_msgs/Pose pose

RobotStatus.msg

uint32 STATUS_MOVEING = 1
uint32 STATUS_STOP = 1
uint32  status
float32 pose

MoveRobot.srv

# 前进后退的距离
float32 distance
---
# 当前的位置
float32 pose

3.设置配置文件
CMakeLists.txt

find_package(rosidl_default_generators REQUIRED)
find_package(geometry_msgs REQUIRED)
# 添加下面的内容
rosidl_generate_interfaces(${PROJECT_NAME}"msg/RobotPose.msg""msg/RobotStatus.msg""srv/MoveRobot.srv"DEPENDENCIES geometry_msgs
)

package.xml

<buildtool_depend>ament_cmake</buildtool_depend><depend>rosidl_default_generators</depend><depend>geometry_msgs</depend><member_of_group>rosidl_interface_packages</member_of_group> #添加这一行<test_depend>ament_lint_auto</test_depend><test_depend>ament_lint_common</test_depend>

4.编译接口功能包

colcon build --packages-select example_ros2_interfaces

3.2 自定义接口RCLPY

1.创建功能包和节点

cd colcon_ws/  # 自定义的工作空间
ros2 pkg create example_interfaces_rclpy --build-type ament_python --dependencies rclpy example_ros2_interfaces --destination-directory src --node-name example_interfaces_robot_02
touch src/example_interfaces_rclpy/example_interfaces_rclpy/example_interfaces_control_02.py

2. 编写节点脚本
example_interfaces_robot_02.py

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from example_ros2_interfaces.msg import RobotStatus
import math
from time import sleep
from example_ros2_interfaces.srv import MoveRobotclass Robot():def __init__(self) -> None:self.current_pose_ = 0.0self.target_pose_ = 0.0self.status_ = RobotStatus.STATUS_STOPdef get_status(self):return self.status_def get_current_pose(self):return self.current_pose_def move_distance(self,distance):self.status_ = RobotStatus.STATUS_MOVEING # 更新状态为移动、self.target_pose_ += distance # 更新目标位置while math.fabs(self.target_pose_ - self.current_pose_) > 0.01:step = distance / math.fabs(distance) * math.fabs(self.target_pose_ - self.current_pose_) * 0.1 # 计算一步移动距离self.current_pose_  += step # 移动一步print(f"移动了:{step}当前位置:{self.current_pose_}")sleep(0.5) #休息0.5sself.status_ = RobotStatus.STATUS_STOP # 更新状态为停止return self.current_pose_      class ExampleInterfacesRobot02(Node):def __init__(self,name):super().__init__(name)self.get_logger().info("节点已启动:%s!" % name)self.robot = Robot()self.move_robot_server_ = self.create_service(MoveRobot,"move_robot", self.handle_move_robot) self.robot_status_publisher_ = self.create_publisher(RobotStatus,"robot_status", 10) self.publisher_timer_ = self.create_timer(0.5, self.publisher_timer_callback)def publisher_timer_callback(self):"""定时器回调发布数据函数"""msg = RobotStatus() #构造消息msg.status = self.robot.get_status()msg.pose = self.robot.get_current_pose()self.robot_status_publisher_.publish(msg) # 发布消息self.get_logger().info(f'发布了当前的状态:{msg.status} 位置:{msg.pose}')def handle_move_robot(self,request, response):self.robot.move_distance(request.distance)response.pose = self.robot.get_current_pose()return responsedef main(args=None):rclpy.init(args=args) # 初始化rclpynode = ExampleInterfacesRobot02("example_interfaces_robot_02")  # 新建一个节点rclpy.spin(node) # 保持节点运行,检测是否收到退出指令(Ctrl+C)rclpy.shutdown() # 关闭rclpy

example_interfaces_control_02.py

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from example_ros2_interfaces.msg import RobotStatus
from example_ros2_interfaces.srv import MoveRobotclass ExampleInterfacesControl02(Node):def __init__(self,name):super().__init__(name)self.get_logger().info("节点已启动:%s!" % name)self.client_ = self.create_client(MoveRobot,"move_robot") self.robot_status_subscribe_ = self.create_subscription(RobotStatus,"robot_status",self.robot_status_callback,10)def robot_status_callback(self,msg):self.get_logger().info(f"收到状态数据位置:{msg.pose} 状态:{msg.status}")def move_result_callback_(self, result_future):response = result_future.result()self.get_logger().info(f"收到返回结果:{response.pose}")def move_robot(self, distance):while rclpy.ok() and self.client_.wait_for_service(1)==False:self.get_logger().info(f"等待服务端上线....")request = MoveRobot.Request()request.distance = distanceself.get_logger().info(f"请求服务让机器人移动{distance}")self.client_.call_async(request).add_done_callback(self.move_result_callback_)def main(args=None):rclpy.init(args=args) # 初始化rclpynode = ExampleInterfacesControl02("example_interfaces_control_02")  # 新建一个节点node.move_robot(5.0) #移动5米rclpy.spin(node) # 保持节点运行,检测是否收到退出指令(Ctrl+C)rclpy.shutdown() # 关闭rclpy

3.修改配置文件setup.py

entry_points={'console_scripts': ['example_interfaces_control_02 = example_interfaces_rclpy.example_interfaces_control_02:main','example_interfaces_robot_02 = example_interfaces_rclpy.example_interfaces_robot_02:main'],},

4.编译功能包+运行测试

# 新终端
colcon build --packages-up-to example_interfaces_rclpy
source install/setup.bash
ros2 run example_interfaces_rclpy example_interfaces_robot_02
# 新终端
source install/setup.bash
ros2 run example_interfaces_rclpy example_interfaces_control_02

在这里插入图片描述
上图则说明自定义接口测试成功!!!

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

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

相关文章

印刷企业MES管理系统需求分析时哪些方面需要注意

随着数字化和智能化技术的快速发展&#xff0c;MES管理系统在印刷企业中扮演着越来越重要的角色。为了确保MES管理系统的成功实施&#xff0c;对需求进行深入分析是至关重要的。本文将探讨在印刷企业MES管理系统需求分析中&#xff0c;哪些方面是值得特别关注的。 1、生产流程的…

代码随想录刷题笔记(DAY 7)

今日总结&#xff1a;前端开始学习 vue3 的新特性&#xff0c;花费时间比较多&#xff0c;今天的题目后面有点难度&#xff0c;明天抽时间复习一下。 Day 7 01. 四数相加 II&#xff08;No. 454&#xff09; 题目链接 代码随想录题解 1.1 题目 给你四个整数数组 nums1、nu…

上海亚商投顾:创业板指低开低走 煤炭等周期股逆势走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日弱势震荡&#xff0c;创业板指低开低走&#xff0c;尾盘跌超1.8%&#xff0c;北证50指数则拉升涨超2%…

x-cmd pkg | trafilatura - 网络爬虫和搜索引擎优化工具

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 trafilatura 是一个用于从网页上提取文本的命令行工具和 python 包: 提供网络爬虫、下载、抓取以及提取主要文本、元数据和评论等功能可帮助网站导航和从站点地图和提要中提取链接无需数据库&#xff0c;输出即可转换…

【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Docker-compose使用全解 一)

Docker-compose使用全解 Compose介绍Compose的作用和职能 Compose和Docker兼容性安装docker-compose添加可执行权限 Docker Compose常用配置imagebuildcontext上下文指定镜像名args构建环境变量 commanddepends_onports特殊映射关系 volumesenvironment Docker Compose命令详解…

关于简单的数据可视化

1. 安装数据可视化必要的openpyxl、pandas&#xff0c;matplotlib等软件包 使用清华源&#xff0c;命令如下&#xff1a; pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn pandaspip install -i https://pypi.tuna.tsingh…

ModStartCMS v7.9.0 内容推荐支持,用户授权升级

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

SomeIP/CommonAPI与Franca IDL使用教程(一)

回顾 SomeIP/CommonAPI环境搭建可以看我上一篇博客&#xff1a;Ubuntu环境下SomeIP/CommonAPI环境搭建详细步骤 什么是SomeIP SOME/IP&#xff08;Service-Oriented Middleware over IP&#xff09;是一种基于IP网络的通信协议&#xff0c;旨在支持汽车电子系统和嵌入式系统…

WSL 与真实 linux 环境区别有多大?

随着 Windows 系统的不断发展和完善&#xff0c;WSL&#xff08;Windows Subsystem for Linux&#xff09;作为 Windows 10 的一个功能&#xff0c;为 Windows 用户提供了一个可以在 Windows 环境下运行 Linux 二进制可执行文件的环境。然而&#xff0c;尽管 WSL 为用户提供了一…

海外SaaS应用加速难题如何破解?

随着云计算和软件即服务&#xff08;SaaS&#xff09;的发展&#xff0c;海外SaaS软件展现的优势逐渐体现&#xff0c;越来越多企业开始利用其进行降本增效。但是&#xff0c;海外SaaS软件的使用过程中常有问题出现&#xff0c;下文将介绍这些难题以及如何进行海外SaaS应用加速…

Java项目:107SpringBoot房屋租赁网站

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 房屋租赁网站基于SpringBootMybatis开发&#xff0c;系统分为管理员和普通用户两种角色。 管理员功能如下&#xff1a; 登录修改密码查看用户房屋管理图…

图像的腐蚀与膨胀

图像的腐蚀与膨胀 设集合 B B B的反射为 B ^ \hat{B} B^&#xff0c;其定义如下 B ^ { w ∣ w − b , b ∈ B } \hat{B}\begin{Bmatrix}w|w-b,b\in B\end{Bmatrix} B^{w∣w−b,b∈B​} 设集合 B B B按照点 z ( z 1 , z 2 ) z(z_1,z_2) z(z1​,z2​)平移得到集合 ( B ) z (…

数据结构学习 jz46把数字翻译成字符串

关键词&#xff1a;动态规划 字符串 数组 滚动数组优化 这道题还算简单&#xff0c;调滚动数组废了点时间&#xff0c;dp状态和转移方程比较容易推出。 用时28mins。 题目&#xff1a; 思路&#xff1a; 把ciphertext拆成一个一个数字的方法&#xff1a; 求10的余数得到最…

AI边缘计算智能分析网关V4如何配置周界入侵检测算法

旭帆科技的智能分析网关V4内含近40种智能分析算法&#xff0c;包括人体、车辆、消防、环境卫生、异常检测等等&#xff0c;在消防安全、生产安全、行为检测等场景应用十分广泛&#xff0c;如常见的智慧工地、智慧校园、智慧景区、智慧城管等等&#xff0c;还支持抓拍、记录、告…

一个人去广东怎么找工作

广东这么大&#xff0c;不用怕没有学历活不下去。没有学历想好好活下去&#xff0c;就得卖力气。 广东找工作上 吉鹿力招聘网 打开 吉鹿力招聘网 “注册账号”&#xff0c;然后输入个人基本信息&#xff0c;进行注册&#xff08;可使用手机号注册&#xff0c;也可以使用邮箱注…

stable diffusion 基础教程-提示词之光的用法

基图 prompt: masterpiece,best quality,1girl,solo,looking at viewer,brown hair,hair between eyes,bangs,very long hair,red eyes,blush,bare shoulders,(white sundress),full body,leaning forward,medium breasts,unbuttoned clothes,Negative prompt: EasyNegativ…

【MPC学习笔记】02:MPC详细简介(Lecture 1_1 Unconstrained MPC)

本笔记来自北航诸兵老师的课程 课程地址&#xff1a;模型预测控制&#xff08;2022春&#xff09;lecture 1-1 Unconstrained MPC 接上一篇&#xff1a;【MPC学习笔记】01&#xff1a;MPC简介&#xff08;Lecture 1_1 Unconstrained MPC&#xff09; 文章目录 1 详细介绍1.1 状…

用python实现调用海康SDK

海康威视&#xff08;Hikvision&#xff09;提供了Python SDK&#xff0c;用于与他们的摄像头和其他设备进行交互。为了使用这些SDK&#xff0c;首先需要在你的系统上安装海康威视的Python库。 下面是如何在Python中使用海康威视的SDK来调用摄像头的方法&#xff1a; python复…

BUUCTF——Reverse——Java逆向解密

1、题目 2、工具 jd-gui&#xff1a;Java反汇编器。 ​python&#xff1a;编写自动化脚本。 3、方法 下载压缩包&#xff0c;解压得到一个.class文件。 ​题目已经说了是java逆向&#xff0c;所以使用jd-gui打开该文件。 代码如下&#xff1a; import java.io.PrintStream; …

大模型笔记 【1】 大模型初探

以下是Andrej Karpathy一小时讲解chatgpt的笔记。 Andrej Karpathy做自动驾驶的人应该比较熟悉&#xff0c;他是李飞飞的学生。在openAI做了一年半的科学家之后&#xff0c;去了特斯拉。在Tesla AI day讲解tesla自动驾驶方案的就是他。 这里我的主要收获是两个 大模型是一个有…