目录

  • 学习笔记一
    • 一、ROS1 官方教程1-9章
      • 1、Installing and Configuring Your ROS Environment
        • 1.1 在 Ubuntu16.04 下安装 ROS 的 kinetic 版本
        • 1.2 在 Ubuntu20.04 下安装 ROS 的 Noetic 版本
        • 1.3 创建 ROS 工作空间
      • 2、Navigating the ROS Filesystem
        • 2.1 文件系统概念简介
        • 2.2 文件系统工具
      • 3、Creating a ROS Package
        • 3.1 catkin 工作空间结构
        • 3.2 创建 ROS 软件包
        • 3.3 软件包的依赖关系
      • 4、Building a ROS Package
      • 5、Understanding ROS Nodes
        • 5.1 ROS的基本计算图概念
        • 5.2 运行程序
      • 6、Understanding ROS Topics
      • 7、Understanding ROS Services and Parameters
        • 7.1 使用 rosservice
        • 7.2 使用 rosparam
      • 8、Using rqt_console and roslaunch
        • 8.1 使用 rqt_console 和 rqt_logger_level
        • 8.2 使用 roslaunch
      • 9、Using rosed to edit files in ROS
    • 二、ROS2 Beginner:CLI Tools部分
      • 1、Configuring your ROS 2 environment
      • 2、Introducing turtlesim and rqt
        • 运行 turtlesim
        • 使用 rqt 调用服务
      • 3、Understanding ROS 2 nodes
        • 3.1 ROS2 run
        • 3.2 Rmapping
        • 3.3 ROS2 node info
      • 4、Understanding ROS 2 topics
        • 4.1 Setup & Use rqt_graph
        • 4.2 ROS2 topic list
        • 4.3 ROS2 topic echo
        • 4.4 ROS2 topic info
        • 4.5 ROS2 interface show
        • 4.6 ROS2 topic pub
      • 5、Understanding ROS 2 services
        • 5.1 查看服务列表
        • 5.2 查看服务的数据类型
        • 5.3 查找提供某类型数据的所有服务
        • 5.4 查看服务数据类型的具体结构
        • 5.5 通过终端发送服务请求
      • 6、Understanding ROS 2 parameters
        • 6.1 查看系统中的参数列表
        • 6.2 使用参数值
      • 7、Understanding ROS 2 actions
        • 7.1 了解 action
        • 7.2 查看节点信息
        • 7.3 查看 action 信息
      • 8、Using rqt_console
      • 9、Creating a launch file
      • 10、Recording and playing back data

学习笔记一

一、ROS1 官方教程1-9章

1、Installing and Configuring Your ROS Environment

安装和配置 ROS 环境

1.1 在 Ubuntu16.04 下安装 ROS 的 kinetic 版本

workstation 安装流程:here

ros 安装流程:here

在安装 ROS 的过程中我选择的是清华的源,由于在第五步中出现网速的问题,切换 4G 和 Wifi 均无法解决网速问题。由于可以打开网页所以选择如下的方法,解决rosdep init和rosdep update出现的问题:here

链接中最后写到如果最后不行考虑是dns的问题,我最后也不行,但是可以打开网页自行添加文件,我认为这不算是 DNS 的问题,应该是网速的问题。如果无法打开网页版的文件,考虑是DNS 的问题。

并且在安装 ROS 的过程中学到了 linux 的基础指令:

全局返回: cd
上一级目录: cd ..
创建文件夹: mkdir new_folder_name
创建文件: gedit new_doc_name
删除文件夹: rmdir folder_name
删除文件: rm doc_name

此外这三个链接对我也有很大的启发:1,2,3

1.2 在 Ubuntu20.04 下安装 ROS 的 Noetic 版本

  • 要在安装完 ROS 之后配置环境,否则无法使用 roscore
$ source /opt/ros/noetic/setup.bash
$ echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
  • 在修改目录 /lib/python3/dist-packages/rosdep2 下的 gbpdistro_support.py 文件时,在 205 行使用 tab 会导致编译失败,应该使用空格。之后 rosdep update 成功。

1.3 创建 ROS 工作空间

这些操作方法只适用于ROS Groovy及更新版本

使用以下代码创建一个 catkin 工作空间,其中 catkin_make 是编译整个工作空间的命令,之后会多次使用这一命令。

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
$ source devel/setup.bash
# make sure ROS_PACKAGE_PATH environment variable includes the directory ur in
$ echo $ROS_PACKAGE_PATH /home/<username>/catkin_ws/src:/opt/ros/<distro>/share

2、Navigating the ROS Filesystem

ROS 文件系统导览

2.1 文件系统概念简介

  • Packages: ROS 代码的软件组织单元,每个 Pkg 都包含 libraries,executable 等其他文件
  • package.xml: 定义了包之间的依赖,并记录了包的元信息,如版本、维护者、许可证等。

2.2 文件系统工具

ROS 提供了专门的命令工具来简化操作:

# 获取软件包的所在路径
# $ rospack find [package_name]
$ rospack find roscpp
# 切换到某个软件包的路径中
# $ roscd [locationname[/subdir]]
$ roscd roscpp
# 按软件包的名称执行 ls 命令
# $ rosls [locationname[/subdir]]
$ rosls roscpp_tutorials

3、Creating a ROS Package

创建 ROS 软件包

3.1 catkin 工作空间结构

workspace_folder/        -- WORKSPACEsrc/                   -- SOURCE SPACECMakeLists.txt       -- 'Toplevel' CMake file, provided by catkinpackage_1/CMakeLists.txt     -- CMakeLists.txt file for package_1package.xml        -- Package manifest for package_1...package_n/CMakeLists.txt     -- CMakeLists.txt file for package_npackage.xml        -- Package manifest for package_n

3.2 创建 ROS 软件包

# 在工作空间的源文件空间目录中创建包
# $ cd ~/<workspace_name>/src
$ cd ~/catkin_ws/src
# 声明包的依赖
# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
$ cd ~/catkin_ws
$ catkin_make
# 将工作空间添加到 ROS 环境中
$ . ~/catkin_ws/devel/setup.bash

3.3 软件包的依赖关系

使用 rospack 查看一级依赖包,同时这些包的依赖关系存储在 package.xml 文件中。此外一个一个软件包可以有间接的依赖关系。

$ rospack depends1 beginner_tutorials
# 查看 package.xml
$ roscd beginner_tutorials
$ cat package.xml
# 查看间接依赖
$ rospack depends1 rospy
# 查看所有依赖
$ rospack depends beginner_tutorials

4、Building a ROS Package

构建 ROS 软件包
使用 catkin_make 命令编译后,在 catkin 工作空间生成了新的文件夹:

  • build:构建空间的默认位置,同时cmake和make也是在这里被调用来配置和构建软件包
  • devel:开发空间的默认位置, 在安装软件包之前,这里可以存放可执行文件和库,比如可执行文件生成后就会被放在 ‘./devel/libs’ 的路径下

5、Understanding ROS Nodes

理解 ROS 节点

5.1 ROS的基本计算图概念

计算图(Computation Graph)是一个由ROS进程组成的点对点网络,它们能够共同处理数据。

  • 节点(Nodes):节点是一个可执行文件,它可以通过ROS来与其他节点进行通信,节点可以发布或订阅话题,也可以提供或使用服务
  • 主节点(Master):ROS的命名服务,例如帮助节点发现彼此
  • 消息(Messages):订阅或发布话题时所使用的ROS数据类型
  • 话题(Topics):节点可以将消息发布到话题,或通过订阅话题来接收消息
  • rosout :标准输入/输出
  • roscore :主节点 + rosout + 参数服务器

5.2 运行程序

# 运行 roscore
$ roscore
# 查看活跃节点 in a new terminal
$ rosnode list
# 查看指定节点的信息
# $ rosnode info /rosout
# 运行 turtlesim 包中的 turtlesim_node
$ rosrun turtlesim turtlesim_node

6、Understanding ROS Topics

理解 ROS 话题

$ roscore
# new terminal
$ rosrun turtlesim turtlesim_node
# new terminal
# 想要移动乌龟需要选中 turtle_teleop_key 的终端窗口
$ rosrun turtlesim turtle_teleop_key


于是得知:turtlesim_node 节点和 turtle_teleop_key 节点之间是通过一个叫 /turtle1/cmd_vel 的 ROS 话题来相互通信的。turtle_teleop_key 在话题上发布键盘按下的消息,turtlesim 则订阅该话题以接收消息。之后使用 rostopic 工具获取 ROS 话题的信息。

# 数据发布在/turtle1/cmd_vel话题上
$ rostopic echo /turtle1/cmd_vel


此时显示 rostopic 命令也 subscribe 了相同的 topic

7、Understanding ROS Services and Parameters

理解 ROS 服务和参数

ROS 中的服务是节点之间通讯的另一种方式。服务允许节点发送一个请求(request)并获得一个响应(response)。

7.1 使用 rosservice

# 输出活跃服务的信息
$ rosservice list
# 输出服务的类型
# $ rosservice type [service]
$ rosservice type /clear
# 返回 std_srvs/Empty 表示调用这个服务时不需要参数
# 调用服务
# rosservice call [service] [args]
# 清除 turtlesim_node 背景上的轨迹
$ rosservice call /clear
# 查看spawn(产卵)服务的信息
$ rosservice type /spawn | rossrv show
# 返回信息如下:
# float32 x
# float32 y
# float32 theta
# string name
# ---
# string name
# 通过这些信息可以在(x,y)的位置上生成一个偏转角度为 theta 名叫 name 的新乌龟

7.2 使用 rosparam

修改背景的颜色

# rosparam set [param_name]
$ rosparam set /turtlesim/background_r 150
# 调用clear服务使得参数的修改能生效
$ rosservice call /clear

获取背景的绿色通道的值

# rosparam get [param_name]
$ rosparam get /turtlesim/background_g
# output = 86

显示参数服务器上的所有内容

$ rosparam get /

将所有的参数写入params.yaml文件

# rosparam dump [file_name] [namespace]
$ rosparam dump params.yaml
# 可以将yaml文件重载入新的命名空间,例如copy_turtle
$ rosparam load params.yaml copy_turtle

8、Using rqt_console and roslaunch

使用 rqt_console 和 roslaunch

8.1 使用 rqt_console 和 rqt_logger_level

rqt_console 连接到了ROS的日志框架,以显示节点的输出信息。rqt_logger_level 允许我们在节点运行时改变输出信息的详细级别,包括 Debug、Info、Warn 和 Error。使用如下命令启动 Console 窗口和 Logger Level 窗口,查看 turtlesim 启动后发布的所有信息。

$ rosrun rqt_console rqt_console
$ rosrun rqt_logger_level rqt_logger_level

8.2 使用 roslaunch

在一个大型的机器人项目中,经常涉及到多个节点协同工作,每个节点又有很多的参数。为了避免手动 rosrun 每个节点并传入参数,可以将需要启动的节点和需要设置的参数全部写入一个 launch 文件中,然后用 roslaunch 一次性的启动 launch 文件,这样就可以启动所有的节点。并且 roslaunch 命令会自动去启动 roscore。

<!--所有的描述标签都要写在<launch></launch>之间-->
<launch><!--group标签用于将node批量划分到某个命名空间,便于大项目中节点的批量管理--><!--node标签里包含了ROS图中节点的名称属性name、该节点所在的包名pkg、节点的类型type、调试属性output--><group ns="turtlesim1"><node pkg="turtlesim" name="sim" type="turtlesim_node"/></group><group ns="turtlesim2"><node pkg="turtlesim" name="sim" type="turtlesim_node"/></group><node pkg="turtlesim" name="mimic" type="mimic"><!--用于将topic的名称进行重映射,from中填入原来的topic名称,to中填入新的topic名称--><remap from="input" to="turtlesim1/turtle1"/><remap from="output" to="turtlesim2/turtle1"/></node>
</launch>

9、Using rosed to edit files in ROS

rosed 可以直接通过软件包名编辑包中的文件,而无需键入完整路径

$ rosed [package_name] [filename]
$ rosed roscpp Logger.msg

二、ROS2 Beginner:CLI Tools部分

1、Configuring your ROS 2 environment

配置你的 ROS2 环境

ROS2 安装教程
ROS1 和 ROS2 共存时切换方法

2、Introducing turtlesim and rqt

介绍 turtlesim 和 rqt

  • Turtlesim is a lightweight simulator for learning ROS 2
  • rqt is a GUI tool for ROS 2

运行 turtlesim

使用 rqt 调用服务

创建新的小乌龟

3、Understanding ROS 2 nodes

  • 和ROS1一样,ROS2中的各项资源也是通过计算图联系到一起的。计算图是一个由各种ROS2元素组成的网络,共同完成数据的传输,其中每一个完成具体功能的模块称之为“节点”(Node),节点之间通过话题(Topic)、服务(Service)、动作(Actions)或者参数(Parameter)实现数据的收发
  • 在ROS2中,每一个可执行程序(C++、Python)可以包含1个或者多个节点

3.1 ROS2 run

参见上一章的内容

3.2 Rmapping

ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

修改节点的名称后会出现仿真节点,仿真节点不会和原来的节点产生冲突,因为新启动的仿真节点叫做“my_turtle”,并不是默认的“turtlesim”

3.3 ROS2 node info

  • 了解节点更多的信息
# $ ros2 node info <node_name>
$ ros2 node info /my_turtle

4、Understanding ROS 2 topics

一个节点可以通过多个话题向外发布数据,也可以同时订阅多个其他节点发布的话题,相当于话题是一个多对多的订阅/发布模型。话题是节点之间实现数据传输的重要途径,也是机器人各个子系统之间交换数据的重要方式

4.1 Setup & Use rqt_graph

$ ros2 run turtlesim turtlesim_node
$ ros2 run turtlesim turtle_teleop_key
$ rqt_graph

4.2 ROS2 topic list

  • 返回最近活跃的节点
$ ros2 topic list
  • 返回所有话题的列表,和每个话题传输的数据类型
$ ros2 topic list -t

4.3 ROS2 topic echo

  • 返回话题之间传输的数据内容
# $ ros2 topic echo <topic_name>
$ ros2 topic echo /turtle1/cmd_vel

4.4 ROS2 topic info

  • 返回话题的详细信息
$ ros2 topic info /turtle1/cmd_vel

4.5 ROS2 interface show

  • 查看 cmd_vel 数据类型的具体数据结构
$ ros2 interface show geometry_msgs/msg/Twist

cmd_vel 就是在 ROS 中常用的标准速度指令,以上内容表示在 geometry_msgs 包的 msg 中有一个数据类型 Twist,Twist 中包含了两个三维向量,分别表示线速度和角速度

4.6 ROS2 topic pub

  • 通过命令行发布话题消息,–once 表示只发布一次
# $ ros2 topic pub <topic_name> <msg_type> '<args>'
$ ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
  • –rate 1 表示以 1 Hz 的频率发布
$ ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
  • 查看话题发布的频率
$ ros2 topic hz /turtle1/pose

5、Understanding ROS 2 services

topic 通信方式是基于订阅/发布机制的,无论有没有订阅者,发布者都会周期发布数据,这种模式适合持续数据的收发,比如传感器数据。

机器人系统中还有另外一些配置性质的数据,并不需要周期处理,此时就要用到另外一种ROS通信方式——服务(Service)。 服务是基于客户端/服务器模型的通信机制,服务器端只在接收到客户端请求时才会提供反馈数据。

5.1 查看服务列表

$ ros2 service list

5.2 查看服务的数据类型

# $ ros2 service type <service_name>
$ ros2 service type /clear

查看所有服务的数据类型

$ ros2 service type list -t

5.3 查找提供某类型数据的所有服务

ROS2 允许查看所有提供同样数据类型的的服务,比如可以查找所有提供std_srvs/srv/Empty数据类型的服务

# $ ros2 service find <type_name>
$ ros2 service find std_srvs/srv/Empty

5.4 查看服务数据类型的具体结构

可以通过下面的命令查看数据类型具体的数据结构

# $ ros2 interface show <type_name>.srv
$ ros2 interface show std_srvs/srv/Empty.srv
$ ros2 interface show turtlesim/srv/Spawn.srv

5.5 通过终端发送服务请求

通过终端可以发送一个服务请求,同样可以生成一个小乌龟

# $ ros2 service call <service_name> <service_type> <arguments>
$ ros2 service call /clear std_srvs/srv/Empty
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"

6、Understanding ROS 2 parameters

在 ROS2 中,每个节点都有自己的参数,参数的主要作用是对节点功能的配置,这些参数可以用整型数、浮点数、布尔型数、字符串和列表来描述

6.1 查看系统中的参数列表

$ ros2 param list

6.2 使用参数值

  • 获取参数值
# $ ros2 param get <node_name> <parameter_name>
$ ros2 param get /turtlesim background_g
  • 设置参数值
# $ ros2 param set <node_name> <parameter_name> <value>
$ ros2 param set /turtlesim background_r 150
  • 保存参数值
# $ ros2 param dump <node_name>
$ ros2 param dump /turtlesim
  • 加载参数文件
# $ ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
$ ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml

7、Understanding ROS 2 actions

如果要让机械臂抓取一个物体,我们不仅要发出指令,还需要获取机械臂的实时反馈,如果直接用话题和服务也可以实现,不过一下得上好几个,有点麻烦。

所以针对类似的场景,ROS推出了一个应用级的通信机制——动作(action),主要解决需要运行一段时间的机器人任务。action也并不是一个全新的机制,而是由底层的三个话题和服务组成:任务目标(Goal,服务),执行结果(Result,服务),周期数据反馈(Feedback,话题)。action是可抢占式的,可以随时发送取消指令,动作终止。如果执行过程中发送一个新的action目标,则会直接中断上一个目标开始执行最新的任务目标。总体上来讲,action是一个客户端/服务器的通信模型,客户端发送一个任务目标,服务器端根据收到的目标执行并周期反馈状态,执行完成后反馈一个执行结果。

7.1 了解 action

启动小乌龟后根据第二行信息提示的指令,通过action来控制海龟转动到指定方向的。 按键 G | B | V | C | D | E | R | T 都是围绕 F 的,以 F 为中心,对应方向的按键就表示控制小海龟的转动到的方向,F 用来发送 action 终止命令

  • 按下 C 小乌龟开始旋转,action 完成,返回给客户端第一行的内容
  • 按下 C 和 E 键后,后一个 action 的执行中断了前一个 action 的执行,返回客户端一个警告信息,体现了 action 的可抢占
  • 按下 C 和 F 键后,F 终止了上一个 action,并返回客户端任务取消的信息

7.2 查看节点信息

  • 查看乌龟仿真器节点的 action
$ ros2 node info /turtlesim

  • 查看键盘控制节点的 action
ros2 node info /teleop_turtle


由此可以得知,键盘控制节点作为 action 的客户端发送 action 目标,海龟仿真器作为 action 的服务器端执行 action 并反馈,action 名为 /turtle1/rotate_absolute,并且 action 的数据类型为 /turtlesim/action/RotateAbsolute。
除此之外,还可以通过这样的方法查看 action

$ ros2 action list
$ ros2 action list - t

7.3 查看 action 信息

  • 查看 action 的详情,并且可以知道提供该 action 的服务器和客户端的数量
$ ros2 action info /turtle1/rotate_absolute
  • 如果想要发送一个 goal,就需要知道 action 的具体的数据结构,由此查看 action 的数据结构
$ ros2 interface show turtlesim/action/RotateAbsolute.action

其中第一段描述客户端发送的请求目标,第二段描述的是action执行完成后的反馈结果,第三段描述的是action执行过程中的周期反馈

  • 发布 goal
# $ ros2 action send_goal <action_name> <action_type> <values>
# $ ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"
# 想要看到周期性反馈,需要添加 --feedback
$ ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: -1.57}" --feedback


在 action 执行完成前,终端中会不断周期刷新类似反馈信息,而且是可以抢占或终止的。

8、Using rqt_console

在终端中运行ROS2节点时,节点的日志信息会在终端中显示出来,rqt_console 是专门用于管理日志信息的可视化工具。打开 rqt_console,将小乌龟运行到边界时,终端和 rqt_console 会显示错误信息。

$ ros2 run rqt_console rqt_console


也可以修改允许发布的日志级别,如果只想显示 Warn 级别以上的日志,Info 和 Debug 级别的日志都是看不到的,这样就可以快速找到想要看到的日志,提高调试、测试、开发的效率

ros2 run turtlesim turtlesim_node --ros-args --log-level WARN

9、Creating a launch file

ROS2 也专门设计了launch启动文件,可以一起启动多个节点并允许在文件中对节点进行配置

Node(package='turtlesim',namespace='turtlesim1',executable='turtlesim_node',name='sim'
),
Node(package='turtlesim',namespace='turtlesim2',executable='turtlesim_node',name='sim'
),

这里是启动了两个海龟仿真器,通过命名空间区分开,不然会有同名节点的问题。

Node(package='turtlesim',executable='mimic',name='mimic',remappings=[('/input/pose', '/turtlesim1/turtle1/pose'),('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),]
)

最后一个节点启动的是 turtlesim 功能包中的 mimic 节点,其中主要是在配置 mimc 的 remapping 重映射参数。mimic 的输入话题从 /input/pose 重映射为 /turtlesim1/turtle1/pose,输出话题从 /output/cmd_vel 重映射为 /turtlesim2/turtle1/cmd_vel。mimic 节点通过订阅 turtle1 的位置,转换成对 turtle2 的速度指令发布出去,最后可以达到让 turtle2 模仿 turtle1 完成同样的运动

10、Recording and playing back data

  • 录制话题数据
# $ ros2 bag record <topic_name>
$ ros2 bag record /turtle1/cmd_vel
  • 录制多个话题
$ ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
  • 显示录制文件信息
# $ ros2 bag info <bag_file_name>
$ ros2 bag info subset
  • 回放数据
$ ros2 bag play subset

学习笔记 9.22 - 9.29相关推荐

  1. 深度学习笔记(22) Padding

    深度学习笔记(22) Padding 1. 卷积的缺陷 2. Padding 3. Valid卷积 4. Same卷积 5. 奇数的过滤器 1. 卷积的缺陷 为了构建深度神经网络,需要学会使用的一个基 ...

  2. 几何光学学习笔记(22)- 5.5 光学系统的景深

    几何光学学习笔记(22)- 5.5 光学系统的景深 5.5 光学系统的景深 1.光学系统的空间像 2.光学系统的景深 5.5 光学系统的景深 1.光学系统的空间像 前面讨论的只是垂直于光轴的物平面上的 ...

  3. java学习笔记(22)java输入标签,单选框,复选框,添加文件,文本域,下拉框

    通过输入标签来制作如图所示的输入框: <body>账号:<input type="text" /><br />密码:<input type ...

  4. STM32CubeMX学习笔记(22)——CRC接口使用

    一.CRC简介 CRC(Cyclic Redundancy Check),即循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者 ...

  5. 小白终是踏上了这条不归路----小文的mysql学习笔记(22)--------函数

    ** 小白终是踏上了这条不归路----小文的mysql学习笔记(1) 小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询 小白终是踏上了这条不归路----小文的mysql学 ...

  6. 【流畅的Python学习笔记】2023.4.29

    此栏目记录我学习<流畅的Python>一书的学习笔记,这是一个自用笔记,所以写的比较随意,随缘更新 泛映射类型 collections.abc 模块中有 Mapping 和 Mutable ...

  7. ESP32学习笔记(22)——ADC接口使用

    一.概述 ESP32 集成了 2 个 12 位逐次逼近模数转换器 (SARADC),支持 18 个测量通道(模拟使能引脚). 支持以下通道: ADC1: 8通道:GPIO32 - GPIO39 ADC ...

  8. Python学习笔记:22 HTML5基础和CSS基础

    了解一些HTML5的基础知识和CSS基础知识有助于爬虫的学习,在学习这些基础知识之前,首先要安装HBuiderX工具.直接到官网下载标准版即可. HTML基础 可以到HTML教程学习一下HTML基础知 ...

  9. RHCE 学习笔记(22) 网络用户

    这一节主要学习了ldap的基本知识,并了解两个产品openldap和IPA的基本配置. ldap是轻量目录访问协议,以树的形式保存数据,支持跨平台的操作. 熟悉windows的管理员对活动目录并不陌生 ...

  10. 【内网学习笔记】22、PsExec 和 WMI 的使用

    1.PsExec PsExec.exe PsExec 在之前的文章里提到过一次,参见https://teamssix.com/210802-181052.html,今天来着重学习一下. PsExec ...

最新文章

  1. python 局域网共享
  2. Windows7 WIN 7 64位 环境编译6sv2.1版本的大气传输模型
  3. 哈哈,做个广告,宁波要租房的朋友进来看看
  4. 信号与系统参考书推荐
  5. iOS逆向之深入解析如何Hook所有+load方法及Category的处理
  6. java代码编写的文本特征提取_Test1 java语言写的特征提取源代码,有搞文字识别的可以下载一看,简单易学 Develop 274万源代码下载- www.pudn.com...
  7. 安装SQL2005提示“SQL Server 2005 COM+ 目录要求”警告 解决方法
  8. HEVC代码学习31:xCheckRDCostMerge2Nx2N函数
  9. Xcode使用githut做代码版本管理
  10. WSO2 文件上传 (CVE-2022-29464)漏洞复现
  11. ChatGPT 的狂飙之路
  12. 【Shader】基于图像的光照(Image Based Lighting,IBL)
  13. date类、calendar类与dateformat类
  14. Français littérature
  15. 解决Win10任务栏图标消失
  16. win7打开仅计算机黑屏,黑屏只剩鼠标指针,详解win7打开电脑黑屏只剩鼠标指针的解决教程...
  17. oracle utl_file权限,Oracle内建包UTL_FILE使用说明
  18. 考据党伤不起 - 东京首都大学发表《新世纪福音战士: Q》解说
  19. ROS软路由试玩脚本一拖四十一键修改mac,ssid,ip脚本
  20. kis服务器组装,金蝶标准版KIS安装流程

热门文章

  1. 【BZOJ 3990】 [SDOI2015]排序
  2. 基于C#的MongoDB数据库开发应用(2)--MongoDB数据库的C#开发
  3. 如何将松散的dll打包进需要发布的exe
  4. JinlinOJ 通化邀请赛 E.GCD and LCM 最大公约数最小公倍数 关系
  5. iPhone Application Programming Guide, Ch4
  6. JavaScript MD5加密实现
  7. 命令行模式下导入导出MySQL数据库
  8. Linux下Oracle进程CPU使用率过高处理方式
  9. 阻止事件冒泡(event.stopPropagation())/阻止默认事件(event.preventDefault())
  10. Thingsboard 3.1.0 - 规则链:外部结点REST API