Ubuntu22.04_如何调试ROS2_humble的源代码

news2025/1/21 9:30:54

这里的源码,是指的ros2 humble的官方源码。如果是自己手撸的节点或相关源码,请参考本人以前的贴子,

Ubuntu20.04+vscode快速调试ROS通用程序_ubuntu20.04vscode那个版本和ros 兼容_高精度计算机视觉的博客-CSDN博客

Ubuntu20.04+gdb/vscode调试ROS(VINS-Mono)程序_ros gdb用terminal_高精度计算机视觉的博客-CSDN博客

第一步,安装ROS2_humble源码

======================================

这一步,只编译debug模式,但不要安装到/usr/bin下,

本来这里不需要贴出来,但由于官方老是更新,所以为了直接反映当前的情况,我直接贴到下面,

https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.html

Ubuntu (source)

Table of Contents

  • System requirements

  • System setup

    • Set locale

    • Add the ROS 2 apt repository

    • Install development tools and ROS tools

  • Get ROS 2 code

  • Install dependencies using rosdep

  • Install additional DDS implementations (optional)

  • Build the code in the workspace

  • Environment setup

    • Source the setup script
  • Try some examples

  • Next steps after installing

  • Using the ROS 1 bridge

  • Additional RMW implementations (optional)

  • Alternate compilers

    • Clang
  • Stay up to date

  • Troubleshooting

  • Uninstall

System requirements

The current Debian-based target platforms for Humble Hawksbill are:

  • Tier 1: Ubuntu Linux - Jammy (22.04) 64-bit

  • Tier 3: Ubuntu Linux - Focal (20.04) 64-bit

  • Tier 3: Debian Linux - Bullseye (11) 64-bit

Other Linux platforms with varying support levels include:

  • Arch Linux, see alternate instructions

  • Fedora Linux, see alternate instructions

  • OpenEmbedded / webOS OSE, see alternate instructions

As defined in REP 2000.

System setup

Set locale

Make sure you have a locale which supports UTF-8.
If you are in a minimal environment (such as a docker container), the locale may be something minimal like POSIX.
We test with the following settings. However, it should be fine if you’re using a different UTF-8 supported locale.

locale # check for UTF-8

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale # verify settings

Add the ROS 2 apt repository

You will need to add the ROS 2 apt repository to your system.

First ensure that the Ubuntu Universe repository is enabled.

sudo apt install software-properties-common
sudo add-apt-repository universe

Now add the ROS 2 GPG key with apt.

sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

Then add the repository to your sources list.

echo “deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main” | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

Install development tools and ROS tools

Install common packages.

sudo apt update && sudo apt install -y
python3-flake8-docstrings
python3-pip
python3-pytest-cov
ros-dev-tools

Install packages according to your Ubuntu version.

sudo apt install -y
python3-flake8-blind-except
python3-flake8-builtins
python3-flake8-class-newline
python3-flake8-comprehensions
python3-flake8-deprecated
python3-flake8-import-order
python3-flake8-quotes
python3-pytest-repeat
python3-pytest-rerunfailures

Get ROS 2 code

Create a workspace and clone all repos:

mkdir -p ~/ros2_humble/src
cd ~/ros2_humble
vcs import --input https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos src

Install dependencies using rosdep

ROS 2 packages are built on frequently updated Ubuntu systems.
It is always recommended that you ensure your system is up to date before installing new packages.

sudo apt upgrade

sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y --skip-keys “fastcdr rti-connext-dds-6.0.1 urdfdom_headers”

Note:
If you’re using a distribution that is based on Ubuntu (like Linux
Mint) but does not identify itself as such, you’ll get an error message
like Unsupported OS [mint]. In this case append --os=ubuntu:jammy to the above command.

Install additional DDS implementations (optional)

If you would like to use another DDS or RTPS vendor besides the default, you can find instructions here.

Build the code in the workspace

If you have already installed ROS 2 another way (either via Debians
or the binary distribution), make sure that you run the below commands
in a fresh environment that does not have those other installations
sourced.
Also ensure that you do not have source /opt/ros/${ROS_DISTRO}/setup.bash in your .bashrc.
You can make sure that ROS 2 is not sourced with the command printenv | grep -i ROS.
The output should be empty.

More info on working with a ROS workspace can be found in this tutorial.

cd ~/ros2_humble/
colcon build --symlink-install

Note:
if you are having trouble compiling all examples and this is preventing
you from completing a successful build, you can use COLCON_IGNORE in the same manner as CATKIN_IGNORE to ignore the subtree or remove the folder from the workspace.
Take for instance: you would like to avoid installing the large OpenCV library.
Well then simply run touch COLCON_IGNORE in the cam2image demo directory to leave it out of the build process.

Environment setup

Source the setup script

Set up your environment by sourcing the following file.

Replace “.bash” with your shell if you’re not using bash

Possible values are: setup.bash, setup.sh, setup.zsh

. ~/ros2_humble/install/local_setup.bash

Try some examples

In one terminal, source the setup file and then run a C++ talker:

. ~/ros2_humble/install/local_setup.bash
ros2 run demo_nodes_cpp talker

In another terminal source the setup file and then run a Python listener:

. ~/ros2_humble/install/local_setup.bash
ros2 run demo_nodes_py listener

You should see the talker saying that it’s Publishing messages and the listener saying I heard those messages.
This verifies both the C++ and Python APIs are working properly.
Hooray!

Next steps after installing

Continue with the tutorials and demos to configure your environment, create your own workspace and packages, and learn ROS 2 core concepts.

Using the ROS 1 bridge

The ROS 1 bridge can connect topics from ROS 1 to ROS 2 and vice-versa. See the dedicated documentation on how to build and use the ROS 1 bridge.

Additional RMW implementations (optional)

The default middleware that ROS 2 uses is Fast DDS, but the middleware (RMW) can be replaced at runtime.
See the guide on how to work with multiple RMWs.

Alternate compilers

Using a different compiler besides gcc to compile ROS 2 is easy. If you set the environment variables CC and CXX to executables for a working C and C++ compiler, respectively, and retrigger CMake configuration (by using --force-cmake-config or by deleting the packages you want to be affected), CMake will reconfigure and use the different compiler.

Clang

To configure CMake to detect and use Clang:

sudo apt install clang
export CC=clang
export CXX=clang++
colcon build --cmake-force-configure

Stay up to date

See Maintain source checkout to periodically refresh your source installation.

Troubleshooting

Troubleshooting techniques can be found here.

Uninstall

  1. If you installed your workspace with colcon as instructed above,
    “uninstalling” could be just a matter of opening a new terminal and not
    sourcing the workspace’s setup file.
    This way, your environment will behave as though there is no Humble install on your system.

  2. If you’re also trying to free up space, you can delete the entire workspace directory with:

rm -rf ~/ros2_humble

第二步,编译

======================================

《colcon-build-ros2-humble》

cd ~/ros2_humble/

当然,你可以使用,

colcon build --symlink-install

https://autowarefoundation.github.io/autoware-documentation/pr-278/how-to-guides/advanced-usage-of-colcon/

实际上,这里只使用了下面的Debug模式,因为要调试,

colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug

colcon build --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo

colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release

然后,如果下面的命令可以成功执行,就说明编译成功了,

. ~/ros2_humble/install/local_setup.bash
ros2 run demo_nodes_cpp talker

. ~/ros2_humble/install/local_setup.bash
ros2 run demo_nodes_py listener

实际上,ROS2在ubuntu下面的编译几乎没什么难度,所以这里不展开。

第三步,拷贝测试代码并进行编译

======================================

为了避免修改源码,这里我把

/home/matthew/ros2_humble/src/ros2/demos/demo_nodes_cpp,

/home/matthew/ros2_humble/src/ros2/examples,

等测试文件夹直接拷贝到这里,

/home/matthew/test/src/demo_nodes_cpp

然后test就相当于workspace,教程上一般会用ros2_ws这样的目录,本质上是一样的,其下一定要有src目录,方便管理。

cd ~/test
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug

一切正常的话就会生成debug版本的talker等一系列可执行文件,其中talker的位置在这里,

/home/matthew/test/install/demo_nodes_cpp/lib/demo_nodes_cpp

后面我会调试talker和publisher_member_function。

第四步,VSCODE准备工作

======================================

用VSCODE打开文件夹,

/home/matthew/test/

然后通过vscode的运行调试按钮添加launch.json(这里只调试talker),内容如下,

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/install/demo_nodes_cpp/lib/demo_nodes_cpp/talker",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

快捷键ctrl+shift+p,找到Tasks:Configure Task,添加tasks.json文件;

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: clang-14 生成活动文件",
			"command": "/usr/bin/clang-14",
			"args": [
				"-fcolor-diagnostics",
				"-fansi-escape-codes",
				"-g",
				"${file}",
				"-o",
				"${fileDirname}/${fileBasenameNoExtension}"
			],
			"options": {
				"cwd": "${fileDirname}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",
			"detail": "编译器: /usr/bin/clang-14"
		}
	]
}

快捷键ctrl+shift+p,找到C/C++ :Edit configurations (JSON),添加c_cppproperties.json文件,

{
    "configurations": [
        {
            "name": "testconfig",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/src/demo_nodes_cpp_native/include",
                "${workspaceFolder}/src/demo_nodes_cpp/include",
                "/usr/include/**",
                "/home/matthew/ros2_humble/installed/include/**",
                "/home/matthew/ros2_humble/installed/include/rclcpp/**",
                "/home/matthew/ros2_humble/installed/include/rclcpp/**",
                "/home/matthew/ros2_humble/installed/include/rclcpp/**",
                "/home/matthew/ros2_humble/installed/include/actionlib_msgs/**",
                "/home/matthew/ros2_humble/installed/include/action_msgs/**",
                "/home/matthew/ros2_humble/installed/include/action_tutorials_interfaces/**",
                "/home/matthew/ros2_humble/installed/include/ament_index_cpp/**",
                "/home/matthew/ros2_humble/installed/include/benchmark/**",
                "/home/matthew/ros2_humble/installed/include/builtin_interfaces/**",
                "/home/matthew/ros2_humble/installed/include/camera_calibration_parsers/**",
                "/home/matthew/ros2_humble/installed/include/camera_info_manager/**",
                "/home/matthew/ros2_humble/installed/include/class_loader/**",
                "/home/matthew/ros2_humble/installed/include/composition_interfaces/**",
                "/home/matthew/ros2_humble/installed/include/dds/**",
                "/home/matthew/ros2_humble/installed/include/ddsc/**",
                "/home/matthew/ros2_humble/installed/include/diagnostic_msgs/**",
                "/home/matthew/ros2_humble/installed/include/example_interfaces/**",
                "/home/matthew/ros2_humble/installed/include/examples_rclcpp_cbg_executor/**",
                "/home/matthew/ros2_humble/installed/include/fastcdr/**",
                "/home/matthew/ros2_humble/installed/include/fastdds/**",
                "/home/matthew/ros2_humble/installed/include/fastrtps/**",
                "/home/matthew/ros2_humble/installed/include/foonathan_memory/**",
                "/home/matthew/ros2_humble/installed/include/geometry_msgs/**",
                "/home/matthew/ros2_humble/installed/include/gmock/**",
                "/home/matthew/ros2_humble/installed/include/gtest/**",
                "/home/matthew/ros2_humble/installed/include/iceoryx/**",
                "/home/matthew/ros2_humble/installed/include/idl/**",
                "/home/matthew/ros2_humble/installed/include/idlc/**",
                "/home/matthew/ros2_humble/installed/include/image_tools/**",
                "/home/matthew/ros2_humble/installed/include/image_transport/**",
                "/home/matthew/ros2_humble/installed/include/interactive_markers/**",
                "/home/matthew/ros2_humble/installed/include/intra_process_demo/**",
                "/home/matthew/ros2_humble/installed/include/kdl_parser/**",
                "/home/matthew/ros2_humble/installed/include/keyboard_handler/**",
                "/home/matthew/ros2_humble/installed/include/laser_geometry/**",
                "/home/matthew/ros2_humble/installed/include/libstatistics_collector/**",
                "/home/matthew/ros2_humble/installed/include/libyaml_vendor/**",
                "/home/matthew/ros2_humble/installed/include/lifecycle_msgs/**",
                "/home/matthew/ros2_humble/installed/include/logging_demo/**",
                "/home/matthew/ros2_humble/installed/include/map_msgs/**",
                "/home/matthew/ros2_humble/installed/include/mcap_vendor/**",
                "/home/matthew/ros2_humble/installed/include/message_filters/**",
                "/home/matthew/ros2_humble/installed/include/mimick/**",
                "/home/matthew/ros2_humble/installed/include/moodycamel/**",
                "/home/matthew/ros2_humble/installed/include/nav_msgs/**",
                "/home/matthew/ros2_humble/installed/include/OGRE/**",
                "/home/matthew/ros2_humble/installed/include/osrf_testing_tools_cpp/**",
                "/home/matthew/ros2_humble/installed/include/pendulum_msgs/**",
                "/home/matthew/ros2_humble/installed/include/performance_test_fixture/**",
                "/home/matthew/ros2_humble/installed/include/pluginlib/**",
                "/home/matthew/ros2_humble/installed/include/qt_gui_cpp/**",
                "/home/matthew/ros2_humble/installed/include/rcl/**",
                "/home/matthew/ros2_humble/installed/include/rcl_action/**",
                "/home/matthew/ros2_humble/installed/include/rclcpp/**",
                "/home/matthew/ros2_humble/installed/include/rclcpp_action/**",
                "/home/matthew/ros2_humble/installed/include/rclcpp_components/**",
                "/home/matthew/ros2_humble/installed/include/rclcpp_lifecycle/**",
                "/home/matthew/ros2_humble/installed/include/rcl_interfaces/**",
                "/home/matthew/ros2_humble/installed/include/rcl_lifecycle/**",
                "/home/matthew/ros2_humble/installed/include/rcl_logging_interface/**",
                "/home/matthew/ros2_humble/installed/include/rcl_yaml_param_parser/**",
                "/home/matthew/ros2_humble/installed/include/rcpputils/**",
                "/home/matthew/ros2_humble/installed/include/rcutils/**",
                "/home/matthew/ros2_humble/installed/include/resource_retriever/**",
                "/home/matthew/ros2_humble/installed/include/rmw/**",
                "/home/matthew/ros2_humble/installed/include/rmw_connextdds/**",
                "/home/matthew/ros2_humble/installed/include/rmw_dds_common/**",
                "/home/matthew/ros2_humble/installed/include/rmw_fastrtps_cpp/**",
                "/home/matthew/ros2_humble/installed/include/rmw_fastrtps_dynamic_cpp/**",
                "/home/matthew/ros2_humble/installed/include/rmw_fastrtps_shared_cpp/**",
                "/home/matthew/ros2_humble/installed/include/robot_state_publisher/**",
                "/home/matthew/ros2_humble/installed/include/ros2cli_test_interfaces/**",
                "/home/matthew/ros2_humble/installed/include/rosbag2_compression/**",
                "/home/matthew/ros2_humble/installed/include/rosbag2_compression_zstd/**",
                "/home/matthew/ros2_humble/installed/include/rosbag2_cpp/**",
                "/home/matthew/ros2_humble/installed/include/rosbag2_interfaces/**",
                "/home/matthew/ros2_humble/installed/include/rosbag2_storage/**",
                "/home/matthew/ros2_humble/installed/include/rosbag2_storage_default_plugins/**",
                "/home/matthew/ros2_humble/installed/include/rosbag2_storage_mcap_testdata/**",
                "/home/matthew/ros2_humble/installed/include/rosbag2_test_common/**",
                "/home/matthew/ros2_humble/installed/include/rosbag2_transport/**",
                "/home/matthew/ros2_humble/installed/include/rosgraph_msgs/**",
                "/home/matthew/ros2_humble/installed/include/rosidl_runtime_c/**",
                "/home/matthew/ros2_humble/installed/include/rosidl_runtime_cpp/**",
                "/home/matthew/ros2_humble/installed/include/rosidl_typesupport_c/**",
                "/home/matthew/ros2_humble/installed/include/rosidl_typesupport_cpp/**",
                "/home/matthew/ros2_humble/installed/include/rosidl_typesupport_fastrtps_c/**",
                "/home/matthew/ros2_humble/installed/include/rosidl_typesupport_fastrtps_cpp/**",
                "/home/matthew/ros2_humble/installed/include/rosidl_typesupport_interface/**",
                "/home/matthew/ros2_humble/installed/include/rosidl_typesupport_introspection_c/**",
                "/home/matthew/ros2_humble/installed/include/rosidl_typesupport_introspection_cpp/**",
                "/home/matthew/ros2_humble/installed/include/rqt_gui_cpp/**",
                "/home/matthew/ros2_humble/installed/include/rttest/**",
                "/home/matthew/ros2_humble/installed/include/rviz_common/**",
                "/home/matthew/ros2_humble/installed/include/rviz_default_plugins/**",
                "/home/matthew/ros2_humble/installed/include/rviz_rendering/**",
                "/home/matthew/ros2_humble/installed/include/rviz_visual_testing_framework/**",
                "/home/matthew/ros2_humble/installed/include/sensor_msgs/**",
                "/home/matthew/ros2_humble/installed/include/shape_msgs/**",
                "/home/matthew/ros2_humble/installed/include/statistics_msgs/**",
                "/home/matthew/ros2_humble/installed/include/std_msgs/**",
                "/home/matthew/ros2_humble/installed/include/std_srvs/**",
                "/home/matthew/ros2_humble/installed/include/stereo_msgs/**",
                "/home/matthew/ros2_humble/installed/include/test_msgs/**",
                "/home/matthew/ros2_humble/installed/include/tf2/**",
                "/home/matthew/ros2_humble/installed/include/tf2_bullet/**",
                "/home/matthew/ros2_humble/installed/include/tf2_eigen/**",
                "/home/matthew/ros2_humble/installed/include/tf2_eigen_kdl/**",
                "/home/matthew/ros2_humble/installed/include/tf2_geometry_msgs/**",
                "/home/matthew/ros2_humble/installed/include/tf2_kdl/**",
                "/home/matthew/ros2_humble/installed/include/tf2_msgs/**",
                "/home/matthew/ros2_humble/installed/include/tf2_ros/**",
                "/home/matthew/ros2_humble/installed/include/tf2_sensor_msgs/**",
                "/home/matthew/ros2_humble/installed/include/tlsf/**",
                "/home/matthew/ros2_humble/installed/include/tlsf_cpp/**",
                "/home/matthew/ros2_humble/installed/include/tracetools/**",
                "/home/matthew/ros2_humble/installed/include/trajectory_msgs/**",
                "/home/matthew/ros2_humble/installed/include/turtlesim/**",
                "/home/matthew/ros2_humble/installed/include/unique_identifier_msgs/**",
                "/home/matthew/ros2_humble/installed/include/urdf/**",
                "/home/matthew/ros2_humble/installed/include/urdfdom/**",
                "/home/matthew/ros2_humble/installed/include/urdfdom_headers/**",
                "/home/matthew/ros2_humble/installed/include/urdf_parser_plugin/**",
                "/home/matthew/ros2_humble/installed/include/visualization_msgs/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/clang-14",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "linux-clang-x64"
        }
    ],
    "version": 4
}

这里面,为什么include path会这么多,因为我把所有的install下面的include拷贝到/home/matthew/test/installed下面去了,然后通过脚本自动添加了这些路径。

脚本的指令如下,

find . -type d > output.txt

or tree

tree -d > output.txt

or,

ls > list.txt

我用的ls指令,然后通过文件处理器弄好这些include path就OK了。

第五步,VSCODE调试运行ros2-humble源码

======================================

到这里,一切准备就绪,vscode里打开一个terminal,输入,

$ cd ~/test
$ . ~/ros2_humble/install/setup.bash
$ . ./install/setup.bash

这里要注意 ,一定是要在左边已经选择(gdb) Launch的情况 下,在右侧的cppdbg:publisher_member_function窗口中输入setup.bash指令 ,不是bash窗口,如下图的右下角所示,否则会找不到librclcpp.so等库文件 而无法调试。

然后,就可以在talker里随便打断点,进入ros2 humble的源码了,截图如

在这里插入图片描述可以看到,成功进入了ros2 humble的源码
在这里插入图片描述本文结束

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

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

相关文章

【pygame】01 pygame制作游戏的最小系统

这次使用sublimepython进行pygame的游戏开发,目的是学习使用python的基本操作和常用模块 添加一个文件夹到工程 最小系统 import pygame import sys ##导入sys模块 主要是为了 exit函数 from pygame.locals import * #导入一些常用的函数和常量pygame.init() …

计算机网络第四章——网络层(上)

提示:朝碧海而暮苍梧,睹青天而攀白日 文章目录 网络层是路由器的最高层次,通过网络层就可以将各个设备连接到一起,从而实现这两个主机的数据通信和资源共享,之前学的数据链路层和物理层也是将两端连接起来,但是却没有网…

C语言——指针进阶(2)

继续上次的指针,想起来还有指针的内容还没有更新完,今天来补上之前的内容,上次我们讲了函数指针,并且使用它来实现一些功能,今天我们就讲一讲函数指针数组等内容,废话不多说,我们开始今天的学习…

ESP32蓝牙主从站模式:主站发送,从站接收,同时附加简单通信协议

主站发送:WXAiBj,六个字符 蓝牙模式是一个字符一个字符发送 主站和从站设置通信协议 使得六个字符一句话完整接收,同时打印出接收完成信息 硬件电路连接如下: 主从站为两个ESP32,只使用了其中的蓝牙功能 代码如下: 主站: //主机模式 #include <Arduino.h> …

ARM指令集--数据处理指令

数据处理指令&#xff1a;数学运算&#xff0c;逻辑运算 立即数 立即数的本质 就是包含在指令当中的数&#xff0c;属于指令的一部分 立即数的优点&#xff1a;取指的时候就可以将其读取到CPU&#xff0c;不用单独去内存读取&#xff0c;速度快 立即数的缺点&#xff1a;不…

vue学习之内容渲染

内容渲染 创建 demo2.html,内容如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</…

敏捷项目管理完整流程及实践管理方法

​Scrum是目前运用最为广泛的敏捷开发方法&#xff0c;是一个轻量级的项目管理和产品研发管理框架&#xff0c;旨在最短时间内交付最大价值。 Leangoo领歌是一款永久免费的专业敏捷研发管理工具&#xff0c;提供敏捷研发解决方案&#xff0c;解决研发痛点&#xff0c;打造成功…

学习机器学习需要哪些数学知识?

作为一门以数据及其模型为 研究对象的学科&#xff0c;优化模型、分析模型性能等都需要数学手段的帮助。和其他学科一样&#xff0c;数学 可以帮我们更清晰地描述和理解机器学习算法&#xff0c;也可以从理论上证明算法的有效性&#xff0c;是机器学习中必不可少的一环。 1 向…

【数据结构】AVL树的插入与验证

文章目录 一、基本概念1.发展背景2.性质 二、实现原理①插入操作1.平衡因子1.1平衡因子的更新1.1.1树的高度变化1.1.2树的高度不变 2. 旋转2.1左旋2.2右旋2.3右左双旋2.4 左右双旋 ②验证1.求二叉树高度2. 判断是否为AVL树 源码总结 一、基本概念 1.发展背景 普通的二叉搜索树…

Linux常见进程类别

目录 常见进程类别 守护进程&精灵进程 任务管理 进程组 作业 作业 | 进程组 会话 w命令 守护进程 守护进程的创建 setsid()函数 daemon()函数 模拟实现daemon函数 前台进程 | 后台进程 僵尸进程 | 孤儿进程 僵尸进程的一些细节 守护进程 | 后台进程 守护…

基于SSM的人事管理信息系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

原生js实现的轮盘抽奖案例

来到大学也是有二年了&#xff0c;吃饭最多的地方就是在食堂&#xff0c;经过这么久的时间&#xff0c;已经几乎是把每个窗口的菜都吃腻了&#xff0c;所以我打算做个轮盘抽奖的形式来决定我每天要吃些什么。 目录 实现效果图&#xff1a; 静态搭建 js代码 1.实现此功能的思路…

回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览…

静态链表处理

静态链表是指使用数组来表示节点。在C中&#xff0c;可以使用数组来创建静态列表&#xff0c;其中每个元素都有固定的位置和索引。可以通过下标寻址的方式来访问和操作列表中的元素。 单向列表&#xff1a; struct linkednode{int data;int next; }node[N]; 双向链表&#x…

uniapp分包

1.配置manifest.json “mp-weixin”: { “optimization”:{“subPackages”:true} } 第二步&#xff1a; 然后我们需要把页面放在这个几个分包中。 然后打开pages.json: "subPackages": [{//分包的所有的路径都在该方法中声明 { "root&qu…

电子信息工程专业课复习知识点总结:(二)模电

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言第一章 绪论1.信号2.信号的频谱3.模拟信号和数字信号4.放大电路模型 第二章 运算放大器1.集成电路运算放大器&#xff08;Integrated Circuit-OPA&#xff09;2…

【实践篇】Redis最强Java客户端(三)之Redisson 7种分布式锁使用指南

文章目录 0. 前言1. Redisson 7种分布式锁使用指南1.1 简单锁&#xff1a;1.2 公平锁&#xff1a;1.3 可重入锁&#xff1a;1.4 红锁&#xff1a;1.5 读写锁&#xff1a;1.6 信号量&#xff1a;1.7 闭锁&#xff1a; 2. Spring boot 集成Redisson 验证分布式锁3. 参考资料4. 源…

测开之路:大厂测试开发工作四年的感悟

经历 在两个大厂分别做了两年的测试开发工作&#xff0c;暂且成为 N 厂和 A 厂吧。负责过游戏自动化框架开发、专项测试工具开发、版本质量保障、Devops 平台开发&#xff0c;也带过小团队。每个厂&#xff0c;每份工作都力求突破&#xff0c;过程辛苦&#xff0c;自然结果都是…

MYSQL的索引使用注意

索引并不是时时都会生效的&#xff0c;比如以下几种情况&#xff0c;将导致索引失效 最左前缀法则 如果使用了联合索引&#xff0c;要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始&#xff0c; 并且不跳过索引中的列。如果跳跃某一列&#xff0c;索引将会部分…

【PTA】浙江大学计算机与软件学院2019年考研复试上机自测

个人学习记录&#xff0c;代码难免不尽人意。 呃&#xff0c;今天做了做19年的复试上机题&#xff0c;死在hash表上了&#xff0c;后面详细解释。心态要好&#xff0c;心态要好 7-1 Conway’s Conjecture John Horton Conway, a British mathematician active in recreational…