【ROS2大白话】三、给turtlebot3安装realsense深度相机

系列文章目录

【ROS2大白话】一、ROS2 humble及cartorgrapher安装
【ROS2大白话】二、turtlebot3安装
【ROS2大白话】三、给turtlebot3安装realsense深度相机
【ROS2大白话】四、ROS2非常简单的传参方式


文章目录

  • 系列文章目录
  • 效果展示
  • 一、修改model.sdf文件
    • 1. 路径位置
    • 2. 修改代码
  • 二、修改urdf文件
    • 1. 路径位置
    • 2. 修改代码


我们做视觉slam时会用到深度相机,但是gazebo的turtlebot3中只有rgb相机,没有深度,因此本节会修改代码,来给我们的小乌龟增加一个rgbd相机。

效果展示

在这里插入图片描述

  • 发布topic如下图
    图片大小都是640*480
    在这里插入图片描述

一、修改model.sdf文件

1. 路径位置

/opt/ros/humble/share/turtlebot3_gazebo/models/turtlebot3_waffle/model.sdf

2. 修改代码

最好将原来的model.sdf做一个备份。然后将下面的代码全部复制替换。

<?xml version="1.0" ?>
<sdf version="1.5"><model name="turtlebot3_waffle">  <pose>0.0 0.0 0.0 0.0 0.0 0.0</pose><link name="base_footprint"/><link name="base_link"><inertial><pose>-0.064 0 0.048 0 0 0</pose><inertia><ixx>0.001</ixx><ixy>0.000</ixy><ixz>0.000</ixz><iyy>0.001</iyy><iyz>0.000</iyz><izz>0.001</izz></inertia><mass>1.0</mass></inertial><collision name="base_collision"><pose>-0.064 0 0.048 0 0 0</pose><geometry><box><size>0.265 0.265 0.089</size></box></geometry></collision><visual name="base_visual"><pose>-0.064 0 0 0 0 0</pose><geometry><mesh><uri>model://turtlebot3_waffle/meshes/waffle_base.dae</uri><scale>0.001 0.001 0.001</scale></mesh></geometry></visual></link><link name="imu_link"><sensor name="tb3_imu" type="imu"><always_on>true</always_on><update_rate>200</update_rate><imu><angular_velocity><x><noise type="gaussian"><mean>0.0</mean><stddev>2e-4</stddev></noise></x><y><noise type="gaussian"><mean>0.0</mean><stddev>2e-4</stddev></noise></y><z><noise type="gaussian"><mean>0.0</mean><stddev>2e-4</stddev></noise></z></angular_velocity><linear_acceleration><x><noise type="gaussian"><mean>0.0</mean><stddev>1.7e-2</stddev></noise></x><y><noise type="gaussian"><mean>0.0</mean><stddev>1.7e-2</stddev></noise></y><z><noise type="gaussian"><mean>0.0</mean><stddev>1.7e-2</stddev></noise></z></linear_acceleration></imu><plugin name="turtlebot3_imu" filename="libgazebo_ros_imu_sensor.so"><ros><!-- <namespace>/tb3</namespace> --><argument>~/out:=imu</argument></ros></plugin></sensor></link><link name="base_scan">    <inertial><pose>-0.052 0 0.111 0 0 0</pose><inertia><ixx>0.001</ixx><ixy>0.000</ixy><ixz>0.000</ixz><iyy>0.001</iyy><iyz>0.000</iyz><izz>0.001</izz></inertia><mass>0.125</mass></inertial><collision name="lidar_sensor_collision"><pose>-0.052 0 0.111 0 0 0</pose><geometry><cylinder><radius>0.0508</radius><length>0.055</length></cylinder></geometry></collision><visual name="lidar_sensor_visual"><pose>-0.064 0 0.121 0 0 0</pose><geometry><mesh><uri>model://turtlebot3_waffle/meshes/lds.dae</uri><scale>0.001 0.001 0.001</scale></mesh></geometry></visual><sensor name="hls_lfcd_lds" type="ray"><always_on>true</always_on><visualize>true</visualize><pose>-0.064 0 0.121 0 0 0</pose><update_rate>5</update_rate><ray><scan><horizontal><samples>360</samples><resolution>1.000000</resolution><min_angle>0.000000</min_angle><max_angle>6.280000</max_angle></horizontal></scan><range><min>0.120000</min><max>3.5</max><resolution>0.015000</resolution></range><noise><type>gaussian</type><mean>0.0</mean><stddev>0.01</stddev></noise></ray><plugin name="turtlebot3_laserscan" filename="libgazebo_ros_ray_sensor.so"><ros><!-- <namespace>/tb3</namespace> --><argument>~/out:=scan</argument></ros><output_type>sensor_msgs/LaserScan</output_type><frame_name>base_scan</frame_name></plugin></sensor></link><link name="wheel_left_link"><inertial><pose>0.0 0.144 0.023 -1.57 0 0</pose><inertia><ixx>0.001</ixx><ixy>0.000</ixy><ixz>0.000</ixz><iyy>0.001</iyy><iyz>0.000</iyz><izz>0.001</izz></inertia><mass>0.1</mass></inertial><collision name="wheel_left_collision"><pose>0.0 0.144 0.023 -1.57 0 0</pose><geometry><cylinder><radius>0.033</radius><length>0.018</length></cylinder></geometry><surface><!-- This friction pamareter don't contain reliable data!! --><friction><ode><mu>100000.0</mu><mu2>100000.0</mu2><fdir1>0 0 0</fdir1><slip1>0.0</slip1><slip2>0.0</slip2></ode></friction><contact><ode><soft_cfm>0</soft_cfm><soft_erp>0.2</soft_erp><kp>1e+5</kp><kd>1</kd><max_vel>0.01</max_vel><min_depth>0.001</min_depth></ode></contact></surface></collision><visual name="wheel_left_visual"><pose>0.0 0.144 0.023 0 0 0</pose><geometry><mesh><uri>model://turtlebot3_waffle/meshes/left_tire.dae</uri><scale>0.001 0.001 0.001</scale></mesh></geometry></visual></link><link name="wheel_right_link"><inertial><pose>0.0 -0.144 0.023 -1.57 0 0</pose><inertia><ixx>0.001</ixx><ixy>0.000</ixy><ixz>0.000</ixz><iyy>0.001</iyy><iyz>0.000</iyz><izz>0.001</izz></inertia><mass>0.1</mass></inertial><collision name="wheel_right_collision"><pose>0.0 -0.144 0.023 -1.57 0 0</pose><geometry><cylinder><radius>0.033</radius><length>0.018</length></cylinder></geometry><surface><!-- This friction pamareter don't contain reliable data!! --><friction><ode><mu>100000.0</mu><mu2>100000.0</mu2><fdir1>0 0 0</fdir1><slip1>0.0</slip1><slip2>0.0</slip2></ode></friction><contact><ode><soft_cfm>0</soft_cfm><soft_erp>0.2</soft_erp><kp>1e+5</kp><kd>1</kd><max_vel>0.01</max_vel><min_depth>0.001</min_depth></ode></contact></surface></collision><visual name="wheel_right_visual"><pose>0.0 -0.144 0.023 0 0 0</pose><geometry><mesh><uri>model://turtlebot3_waffle/meshes/right_tire.dae</uri><scale>0.001 0.001 0.001</scale></mesh></geometry></visual></link><link name='caster_back_right_link'><pose>-0.177 -0.064 -0.004 0 0 0</pose><inertial><mass>0.001</mass><inertia><ixx>0.00001</ixx><ixy>0.000</ixy><ixz>0.000</ixz><iyy>0.00001</iyy><iyz>0.000</iyz><izz>0.00001</izz></inertia></inertial><collision name='collision'><geometry><sphere><radius>0.005000</radius></sphere></geometry><surface><contact><ode><soft_cfm>0</soft_cfm><soft_erp>0.2</soft_erp><kp>1e+5</kp><kd>1</kd><max_vel>0.01</max_vel><min_depth>0.001</min_depth></ode></contact></surface></collision></link><link name='caster_back_left_link'><pose>-0.177 0.064 -0.004 0 0 0</pose><inertial><mass>0.001</mass><inertia><ixx>0.00001</ixx><ixy>0.000</ixy><ixz>0.000</ixz><iyy>0.00001</iyy><iyz>0.000</iyz><izz>0.00001</izz></inertia></inertial><collision name='collision'><geometry><sphere><radius>0.005000</radius></sphere></geometry><surface><contact><ode><soft_cfm>0</soft_cfm><soft_erp>0.2</soft_erp><kp>1e+5</kp><kd>1</kd><max_vel>0.01</max_vel><min_depth>0.001</min_depth></ode></contact></surface></collision></link><link name="realsense_link"><inertial><pose>0.069 -0.047 0.107 0 0 0</pose><inertia><ixx>0.001</ixx><ixy>0.000</ixy><ixz>0.000</ixz><iyy>0.001</iyy><iyz>0.000</iyz><izz>0.001</izz></inertia><mass>0.035</mass></inertial><collision name="collision"><pose>0 0.047 0 0 0 0</pose><geometry><box><size>0.008 0.130 0.022</size></box></geometry></collision><pose>0.069 -0.047 0.107 0 0 0</pose><sensor name="intel_realsense_r200_depth" type="depth"><always_on>1</always_on><update_rate>30</update_rate><pose>0.064 -0.047 0.107 0 0 0</pose><camera name="realsense_depth_camera"><image><width>640</width><height>480</height><!-- <width>1920</width> --><!-- <height>1080</height> --><format>R8G8B8</format></image><clip><near>0.02</near><far>10</far></clip></camera><plugin name="intel_realsense_r200_depth_driver" filename="libgazebo_ros_camera.so"><ros><!-- <argument>custom_camera/image_raw:=custom_camera/custom_image</argument><argument>custom_camera/image_depth:=custom_camera/custom_image_depth</argument><argument>custom_camera/camera_info:=custom_camera/custom_info_raw</argument><argument>custom_camera/camera_info_depth:=custom_camera/custom_info_depth</argument><argument>custom_camera/points:=custom_camera/custom_points</argument> --></ros><camera_name>intel_realsense_r200_depth</camera_name><frame_name>realsense_depth_frame</frame_name><hack_baseline>0.07</hack_baseline><min_depth>0.001</min_depth></plugin></sensor><sensor name="intel_realsense_r200_rgb" type="camera"><always_on>true</always_on><visualize>true</visualize><update_rate>30</update_rate><pose>0.064 -0.047 0.107 0 0 0</pose><camera name="realsense_rgb_camera"><horizontal_fov>1.02974</horizontal_fov><image><width>640</width><height>480</height><!-- <width>1920</width> --><!-- <height>1080</height> --><format>R8G8B8</format></image><clip><near>0.02</near><far>300</far></clip><noise><type>gaussian</type><mean>0.0</mean><stddev>0.007</stddev></noise></camera><plugin name="intel_realsense_r200_rgb_driver" filename="libgazebo_ros_camera.so"><ros><!--<namespace>custom_ns</namespace><argument>image_raw:=custom_image</argument><argument>camera_info:=custom_info_raw</argument> --></ros><camera_name>intel_realsense_r200_rgb</camera_name><frame_name>realsense_rgb_frame</frame_name><hack_baseline>0.07</hack_baseline></plugin></sensor></link>  <joint name="base_joint" type="fixed"><parent>base_footprint</parent><child>base_link</child><pose>0.0 0.0 0.010 0 0 0</pose></joint><joint name="wheel_left_joint" type="revolute"><parent>base_link</parent><child>wheel_left_link</child><pose>0.0 0.144 0.023 -1.57 0 0</pose><axis><xyz>0 0 1</xyz></axis></joint><joint name="wheel_right_joint" type="revolute"><parent>base_link</parent><child>wheel_right_link</child><pose>0.0 -0.144 0.023 -1.57 0 0</pose><axis><xyz>0 0 1</xyz></axis></joint><joint name='caster_back_right_joint' type='ball'><parent>base_link</parent><child>caster_back_right_link</child></joint><joint name='caster_back_left_joint' type='ball'><parent>base_link</parent><child>caster_back_left_link</child></joint><joint name="lidar_joint" type="fixed"><parent>base_link</parent><child>base_scan</child><pose>-0.064 0 0.121 0 0 0</pose><axis><xyz>0 0 1</xyz></axis></joint><joint name="camera_joint" type="fixed"><parent>base_link</parent><child>realsense_link</child></joint><plugin name="turtlebot3_diff_drive" filename="libgazebo_ros_diff_drive.so"><ros><!-- <namespace>/tb3</namespace> --></ros><update_rate>30</update_rate><!-- wheels --><left_joint>wheel_left_joint</left_joint><right_joint>wheel_right_joint</right_joint><!-- kinematics --><wheel_separation>0.287</wheel_separation><wheel_diameter>0.066</wheel_diameter><!-- limits --><max_wheel_torque>20</max_wheel_torque><max_wheel_acceleration>1.0</max_wheel_acceleration><command_topic>cmd_vel</command_topic><!-- output --><publish_odom>true</publish_odom><publish_odom_tf>true</publish_odom_tf><publish_wheel_tf>false</publish_wheel_tf><odometry_topic>odom</odometry_topic><odometry_frame>odom</odometry_frame><robot_base_frame>base_footprint</robot_base_frame></plugin><plugin name="turtlebot3_joint_state" filename="libgazebo_ros_joint_state_publisher.so"><ros><!-- <namespace>/tb3</namespace> --><argument>~/out:=joint_states</argument></ros><update_rate>30</update_rate><joint_name>wheel_left_joint</joint_name><joint_name>wheel_right_joint</joint_name></plugin>    </model>
</sdf>

二、修改urdf文件

1. 路径位置

/opt/ros/humble/share/turtlebot3_description/urdf/turtlebot3_waffle.urdf

2. 修改代码

同样,原代码先备份一个。同时用下面代码全部替换。

<?xml version="1.0" ?>
<robot name="turtlebot3_waffle" xmlns:xacro="http://ros.org/wiki/xacro"><!-- <xacro:include filename="$(find turtlebot3_description)/urdf/common_properties.urdf"/><xacro:property name="r200_cam_rgb_px" value="0.005"/><xacro:property name="r200_cam_rgb_py" value="0.018"/><xacro:property name="r200_cam_rgb_pz" value="0.013"/><xacro:property name="r200_cam_depth_offset" value="0.01"/> --><!-- Init colour --><material name="black"><color rgba="0.0 0.0 0.0 1.0"/></material><material name="dark"><color rgba="0.3 0.3 0.3 1.0"/></material><material name="light_black"><color rgba="0.4 0.4 0.4 1.0"/></material><material name="blue"><color rgba="0.0 0.0 0.8 1.0"/></material><material name="green"><color rgba="0.0 0.8 0.0 1.0"/></material><material name="grey"><color rgba="0.5 0.5 0.5 1.0"/></material><material name="orange"><color rgba="1.0 0.4235 0.0392 1.0"/></material><material name="brown"><color rgba="0.8706 0.8118 0.7647 1.0"/></material><material name="red"><color rgba="0.8 0.0 0.0 1.0"/></material><material name="white"><color rgba="1.0 1.0 1.0 1.0"/></material><link name="base_footprint"/><joint name="base_joint" type="fixed"><parent link="base_footprint"/><child link="base_link" /><origin xyz="0 0 0.010" rpy="0 0 0"/></joint><link name="base_link"><visual><origin xyz="-0.064 0 0.0" rpy="0 0 0"/><geometry><mesh filename="package://turtlebot3_description/meshes/bases/waffle_base.stl" scale="0.001 0.001 0.001"/></geometry><material name="light_black"/></visual><collision><origin xyz="-0.064 0 0.047" rpy="0 0 0"/><geometry><box size="0.266 0.266 0.094"/></geometry></collision><inertial><origin xyz="0 0 0" rpy="0 0 0"/><mass value="1.3729096e+00"/><inertia ixx="8.7002718e-03" ixy="-4.7576583e-05" ixz="1.1160499e-04"iyy="8.6195418e-03" iyz="-3.5422299e-06"izz="1.4612727e-02" /></inertial></link><joint name="wheel_left_joint" type="continuous"><parent link="base_link"/><child link="wheel_left_link"/><origin xyz="0.0 0.144 0.023" rpy="-1.57 0 0"/><axis xyz="0 0 1"/></joint><link name="wheel_left_link"><visual><origin xyz="0 0 0" rpy="1.57 0 0"/><geometry><mesh filename="package://turtlebot3_description/meshes/wheels/left_tire.stl" scale="0.001 0.001 0.001"/></geometry><material name="dark"/></visual><collision><origin xyz="0 0 0" rpy="0 0 0"/><geometry><cylinder length="0.018" radius="0.033"/></geometry></collision><inertial><origin xyz="0 0 0" /><mass value="2.8498940e-02" /><inertia ixx="1.1175580e-05" ixy="-4.2369783e-11" ixz="-5.9381719e-09"iyy="1.1192413e-05" iyz="-1.4400107e-11"izz="2.0712558e-05" /></inertial></link><joint name="wheel_right_joint" type="continuous"><parent link="base_link"/><child link="wheel_right_link"/><origin xyz="0.0 -0.144 0.023" rpy="-1.57 0 0"/><axis xyz="0 0 1"/></joint><link name="wheel_right_link"><visual><origin xyz="0 0 0" rpy="1.57 0 0"/><geometry><mesh filename="package://turtlebot3_description/meshes/wheels/right_tire.stl" scale="0.001 0.001 0.001"/></geometry><material name="dark"/></visual><collision><origin xyz="0 0 0" rpy="0 0 0"/><geometry><cylinder length="0.018" radius="0.033"/></geometry></collision><inertial><origin xyz="0 0 0" /><mass value="2.8498940e-02" /><inertia ixx="1.1175580e-05" ixy="-4.2369783e-11" ixz="-5.9381719e-09"iyy="1.1192413e-05" iyz="-1.4400107e-11"izz="2.0712558e-05" /></inertial></link><joint name="caster_back_right_joint" type="fixed"><parent link="base_link"/><child link="caster_back_right_link"/><origin xyz="-0.177 -0.064 -0.004" rpy="-1.57 0 0"/></joint><link name="caster_back_right_link"><collision><origin xyz="0 0.001 0" rpy="0 0 0"/><geometry><box size="0.030 0.009 0.020"/></geometry></collision><inertial><origin xyz="0 0 0" /><mass value="0.005" /><inertia ixx="0.001" ixy="0.0" ixz="0.0"iyy="0.001" iyz="0.0"izz="0.001" /></inertial></link><joint name="caster_back_left_joint" type="fixed"><parent link="base_link"/><child link="caster_back_left_link"/><origin xyz="-0.177 0.064 -0.004" rpy="-1.57 0 0"/></joint><link name="caster_back_left_link"><collision><origin xyz="0 0.001 0" rpy="0 0 0"/><geometry><box size="0.030 0.009 0.020"/></geometry></collision><inertial><origin xyz="0 0 0" /><mass value="0.005" /><inertia ixx="0.001" ixy="0.0" ixz="0.0"iyy="0.001" iyz="0.0"izz="0.001" /></inertial></link><joint name="imu_joint" type="fixed"><parent link="base_link"/><child link="imu_link"/><origin xyz="0.0 0 0.068" rpy="0 0 0"/></joint><link name="imu_link"/><joint name="scan_joint" type="fixed"><parent link="base_link"/><child link="base_scan"/><origin xyz="-0.064 0 0.122" rpy="0 0 0"/></joint><link name="base_scan"><visual><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="package://turtlebot3_description/meshes/sensors/lds.stl" scale="0.001 0.001 0.001"/></geometry><material name="dark"/></visual><collision><origin xyz="0.015 0 -0.0065" rpy="0 0 0"/><geometry><cylinder length="0.0315" radius="0.055"/></geometry></collision><inertial><mass value="0.114" /><origin xyz="0 0 0" /><inertia ixx="0.001" ixy="0.0" ixz="0.0"iyy="0.001" iyz="0.0"izz="0.001" /></inertial></link><joint name="camera_joint" type="fixed"><origin xyz="0.064 -0.065 0.094" rpy="0 0 0"/><parent link="base_link"/><child link="realsense_link"/></joint><link name="realsense_link"><visual><origin xyz="0 0 0" rpy="1.57 0 1.57"/><geometry><mesh filename="package://turtlebot3_description/meshes/sensors/r200.dae" /></geometry></visual><collision><origin xyz="0.003 0.065 0.007" rpy="0 0 0"/><geometry><box size="0.012 0.132 0.020"/></geometry></collision><!-- This inertial field needs doesn't contain reliable data!! -->
<!--   <inertial><mass value="0.564" /><origin xyz="0 0 0" /><inertia ixx="0.003881243" ixy="0.0" ixz="0.0"iyy="0.000498940" iyz="0.0"izz="0.003879257" /></inertial>--></link><joint name="camera_rgb_joint" type="fixed"><origin xyz="0.005 0.018 0.013" rpy="-1.57 0 -1.57"/><!-- <origin xyz="${r200_cam_rgb_px} ${r200_cam_rgb_py} ${r200_cam_rgb_pz}" rpy="0 0 0"/> --><parent link="realsense_link"/><child link="camera_rgb_frame"/></joint><link name="camera_rgb_frame"/><joint name="camera_rgb_optical_joint" type="fixed"><origin xyz="0 0 0" rpy="-1.57 0 -1.57"/><parent link="camera_rgb_frame"/><child link="camera_rgb_optical_frame"/></joint><link name="camera_rgb_optical_frame"/><joint name="realsense_depth_joint" type="fixed"><origin xyz="0.005 0.028 0.013" rpy="-1.57 0 -1.57"/><!-- <origin xyz="${r200_cam_rgb_px} ${r200_cam_rgb_py + r200_cam_depth_offset} ${r200_cam_rgb_pz}" rpy="0 0 0"/> --><parent link="realsense_link"/><child link="realsense_depth_frame"/></joint><link name="realsense_depth_frame"/><joint name="camera_depth_optical_joint" type="fixed"><origin xyz="0 0 0" rpy="-1.57 0 -1.57"/><parent link="realsense_depth_frame"/><child link="camera_depth_optical_frame"/></joint><link name="camera_depth_optical_frame"/></robot>

加载gazebo需要等待几分钟,因为深度相机中有点云发布,比较占资源。
好了,有问题就评论区回复。

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

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

相关文章

【Linux取经路】网络套接字编程——初识篇

文章目录 一、端口号1.1 认识端口号1.2 端口号 VS 进程 PID 二、认识 TCP 协议三、认识 UDP四、网络字节序列五、socket 编程接口5.1 常用 API5.2 sockaddr 结构 六、结语 一、端口号 网络通信的本质是应用层软件进行数据的发送和接受&#xff0c;软件在启动之后&#xff0c;本…

基于RNN和Transformer的词级语言建模 代码分析 _generate_square_subsequent_mask

基于RNN和Transformer的词级语言建模 代码分析 _generate_square_subsequent_mask flyfish Word-level Language Modeling using RNN and Transformer word_language_model PyTorch 提供的 word_language_model 示例展示了如何使用循环神经网络RNN(GRU或LSTM)和 Transforme…

顶顶通呼叫中心中间件-同振和顺振配置步骤(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-同振和顺振配置步骤(mod_cti基于FreeSWITCH) 一、拨号方案配置 1、同振 win-ccadmin配置方法 1、点击拨号方案->2、在红框中输入同振->3、点击添加->4、根据图中配置&#xff0c;配置好了等待一分钟即可生效。 web-ccadmin配置方法 2、顺振…

关于浔川python社在全网博主原力月度排名泸州地区排名第三名的调查——浔川总社部

6月6日&#xff0c;浔川python社在全网博主原力月度排名泸州地区排名第三名。 引起了广大python爱好者等的不满&#xff0c;为什么浔川python社这么一个大的python社排名第三&#xff1f; 2024-06-04 21:59:52 浔川python社在全网博主原力月度排名泸州地区排名第一名。 2024-…

重复文件怎么查找并清理,试试这5个文件去重方法(新)

重复文件怎么查找并清理&#xff1f;日常工作中&#xff0c;我们使用电脑的时间长了&#xff0c;都会累积大量好的文件&#xff0c;这其中难免会出现重复文件。这些重复文件不仅占用了电脑磁盘空间&#xff0c;还会降低电脑性能。因此&#xff0c;我们必须定期对重复文件查找出…

每日两题 / 198. 打家劫舍 74. 搜索二维矩阵(LeetCode热题100)

198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; dp[i]表示考虑前i 1号房屋&#xff0c;能获取的最大金额。对于没一间房屋都有偷与不偷两种选择 如果偷&#xff0c;需要从dp[i - 2]转移&#xff0c;因为不能偷窃相邻房屋&#xff0c;dp[i] dp[i - 2] nums[i] 如果…

【Linux取经路】信号的发送与保存

文章目录 一、重新理解发送信号二、信号的保存、阻塞信号的概念三、信号集操作函数3.1 sigprocmask3.2 sigpending 四、阻塞信号代码验证五、结语 一、重新理解发送信号 进程通过位图来实现对普通信号&#xff08;1-31号信号&#xff09;的保存&#xff0c;该位图保存在进程的…

【漏洞复现】I Doc View 在线文档预览 qJvqhFt.json 任意文件读取漏洞(XVE-2024-2115)

0x01 产品简介 iDocView是一个在线文档解析应用&#xff0c;旨在提供便捷的文件查看和编辑服务。 0x02 漏洞概述 iDocView是一个在线文档预览系统 /iew/gJvghftjson 接口处存在任意文件读取漏洞&#xff0c;未授权的攻击者可以利用此接口并携带默认token读取服务器敏感文件信…

面试Tip--java创建对象的四种方式

java创建对象一共有四种方式&#xff0c;但是我们在写代码的时候用的new 关键字偏多&#xff0c;像一些接口对接则是序列化创建对象偏多&#xff0c;今天我们来简单介绍下使用场景以及各个方式 1. 使用 new 关键字 这是最常见的创建对象的方式。 public class Example {priva…

【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图

前天写了篇博文讲到用PlantUML来绘制C类图和流程图。后台有读者留言&#xff0c;问这步能否自动化生成&#xff0c;不想学习 PlantUML 语法。 我想了下&#xff0c;发现这事可行&#xff0c;确实可以做到通过自然语言的描述就能实现 UML图的绘制&#xff0c;昨天晚上加了个班到…

统信UOS SSH服务升级(ubuntu20)内网

服务器配置 系统信息 SSH版本 目标版本 openssh-server_8.2p1-4_arm64.deb 因为不通互联网&#xff0c;所以所有deb包需要手动下载&#xff08;可以连接互联网的可以自动忽略手动下载deb步骤&#xff0c;直接apt-get install xxx 即可&#xff09; 升级步骤 !!!deb下载方式…

在Jenkins 中使用 NVM 管理 Node.js 部署项目的自动化脚本

在Jenkins 中使用 NVM 管理 Node.js 部署项目的自动化脚本 人生旅途&#xff0c;总有人不断地走来&#xff0c;有人不断地离去。当新名字变成老名字&#xff0c;当老的名字渐渐模糊&#xff0c;又是一个故事的结束和另一个故事的开始。 在现代软件开发中&#xff0c;持续集成/持…

Windows11下Docker使用记录(五)

目录 准备1. WSL安装cuda container toolkit2. win11 Docker Desktop 设置3. WSL创建docker container并连接cuda4. container安装miniconda&#xff08;可选&#xff09; Docker容器可以从底层虚拟化&#xff0c;使我们能够在 不降级 CUDA驱动程序的情况下使用 任何版本的CU…

支付宝小众玩法 爱溜达的人不容错过

创建一个简单的程序来帮助用户管理他们的图片&#xff0c;例如筛选分辨率合适、尺寸适中的图片来准备上传&#xff0c;这是一个技术上合理且有益的方向。例如&#xff0c;一个Python脚本使用Pillow库来检查文件夹中图片的尺寸&#xff1a; from PIL import Image import os# 根…

可视化数据科学平台在信贷领域应用系列五:零代码可视化建模

信贷风控模型是金融机构风险管理的核心工具&#xff0c;在信贷风险管理工作中扮演着至关重要的角色。随着信贷市场的环境不断变化&#xff0c;信贷业务的风险日趋复杂化和隐蔽化&#xff0c;开发和应用准确高效的信贷风控模型显得尤为重要。信贷风险控制面临着越来越大的挑战和…

【MySQL数据库】:MySQL内外连接

目录 内外连接和多表查询的区别 内连接 外连接 左外连接 右外连接 简单案例 内外连接和多表查询的区别 在 MySQL 中&#xff0c;内连接是多表查询的一种方式&#xff0c;但多表查询包含的范围更广泛。外连接也是多表查询的一种具体形式&#xff0c;而多表查询是一个更…

React-生成随机数和日期格式化

生成随机数 uuid文档&#xff1a;https://github.com/uuidjs/uuid npm install uuid import {v4 as uuidV4} from uuid 使用&#xff1a; uuidV4() 日期格式化 dayjs文档&#xff1a;安装 | Day.js中文网 npm install dayjs import dayjs from dayjs

LCTF 2018 bestphp‘s revenge

考点:Soap原生类Session反序列化CRLF注入 <?php highlight_file(__FILE__); $b implode; call_user_func($_GET[f], $_POST); session_start(); if (isset($_GET[name])) { $_SESSION[name] $_GET[name]; } var_dump($_SESSION); $a array(reset($_…

MySQL学习——选项文件的使用

MySQL 的许多程序都可以从选项文件&#xff08;有时也被称为配置文件&#xff09;中读取启动选项。选项文件提供了一种方便的方式来指定常用的选项&#xff0c;这样你就不必每次运行程序时都在命令行上输入这些选项。 要确定一个程序是否读取选项文件&#xff0c;你可以使用 -…

vim编辑器的使用

vim编辑器 1 vim编辑器三种常见模式2 命令模式2.1 移动光标的操作2.2 对数据操作2.3 查找函数 3 底行模式3.1 不退出vim进行操作3.2 与文件进行对比 4 vim的补充知识4.1 vim的批量化注释4.2 vim窗口的非正常关闭 5 vim的配置6 配置sudoer文件 1 vim编辑器三种常见模式 我们在编…