木叶飞舞之【机器人ROS2】篇章_第三节、给turtlebot3安装realsense深度相机

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

效果展示

在这里插入图片描述

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

1. 修改model.sdf文件

1.1 路径位置

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

1.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>

2. 修改urdf文件

2.1 路径位置

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

2.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.mzph.cn/bicheng/19751.shtml

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

相关文章

射频功率限幅器简略

在功率输入保护方面&#xff0c;限幅器是最好用的器件之一&#xff0c;可以保护后级电路不受超限功率的损害&#xff0c;限幅器其实像TVS功能一样&#xff0c;让超过阈值的功率释放到接地上&#xff0c;来达到限制幅度的目的&#xff0c;目前限幅器的限幅幅度大多都大于15dBm,很…

启智CV机器人,ROS, ubuntu 18.04

资料&#xff1a; https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 http://wiki.ros.org/melodic/Installation/Ubuntu https://github.com/6-robot/wpb_cv 一、安装ros环境 装VM。 装ubuntu18.04 desktop.…

100道面试必会算法-27-美团2024面试第一题-前缀和矩阵

100道面试必会算法-27-美团2024面试第一题-前缀和矩阵 问题解读 给定一个 n x n 的二进制矩阵&#xff0c;每个元素是 0 或 1。我们的任务是计算矩阵中所有边长为 k 的子矩阵中&#xff0c;包含特定数量 1 的情况。例如&#xff0c;我们希望找到所有边长为 k 的子矩阵中包含 k…

Java实现成绩管理系统

1.思路分析实现 要求一和要求二&#xff0c;一个要求使用顺序表一个使用链表&#xff0c;但又因为这两个都是List的实现类&#xff0c;所以我就使用多态的形式通过一个方法进行实现上面两种内容&#xff0c;需要用什么方法实现就传入什么实现类&#xff0c;形参是List类型。创建…

【学习Day3】计算机基础

✍&#x1f3fb;记录学习过程中的输出&#xff0c;坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;指点&#x1f64f; 1.5.4 Cache替换算法 Cache的页面淘汰算法 常用替换算法有&#xff1a; • 随机替换算法RA…

vue3 setup 使用 beforeRouteEnter 组件内路由守卫

vue3 setup 使用 beforeRouteEnter 组件内路由守卫 setup 中只有onBeforeRouteLeave、onBeforeRouteUpdate两个钩子函数&#xff0c; 没有beforeRouteEnter对应的钩子函数&#xff0c;所以无法在setup中直接使用 <script setup> onBeforeRouteLeave((to, from) > {// …

Android基础-性能优化

在Android平台上进行性能优化是确保应用程序高效、稳定且流畅运行的关键过程。以下将详细阐述Android性能优化的各个方面&#xff0c;包括但不限于布局优化、绘制优化、内存管理、网络优化、安装包优化以及针对不同版本的Android系统进行适配等。 一、布局优化 布局优化的核心…

3D软件开发的相关技术

3D开发涉及到广泛的技术和工具&#xff0c;涵盖了多个领域&#xff0c;包括计算机图形学、编程、设计、物理模拟等。以下是3D开发中常用的技术和工具&#xff0c;掌握这些技术需要广泛的知识和实践&#xff0c;项目的成功依赖于对这些技术的有效整合和应用。北京木奇移动技术有…

音视频开发14 FFmpeg 视频 相关格式分析 -- H264 NALU格式分析

H264简介-也叫做 AVC H.264&#xff0c;在MPEG的标准⾥是MPEG-4的⼀个组成部分–MPEG-4 Part 10&#xff0c;⼜叫Advanced Video Codec&#xff0c;因此常常称为MPEG-4 AVC或直接叫AVC。 原始数据YUV,RGB为什么要压缩-知道就行 在⾳视频传输过程中&#xff0c;视频⽂件的传输…

热敏电阻的设计

热敏电阻(NTC)的作用&#xff1a;抑制开机时的浪涌电流。防止开机瞬间产生的浪涌电流损坏后面的元件。 取值依据:根据对开机的脉冲电流&#xff08;浪涌电流&#xff09;小于多少A&#xff1f; 由,这个U是指最大输入电压&#xff0c;I为要求的浪涌电流。 NTC是负温度系数的热…

收银系统源码--商超水果生鲜店收银硬件要怎么选择?

新零售时代&#xff0c;越来越多的商家开始明白&#xff0c;除了要做好店铺定位、店面装潢和商品的设定&#xff0c;还要选购最适合店铺运营需求的收银机和硬件&#xff0c;好的收银机和收银系统可以帮助商家做好收支统计、库存管理、人员配置。客户服务等工作。现在的智能收银…

MySQL 索引使用(二)

本篇继续介绍有关索引的使用。 目录 一、SQL提示 二、单列索引和联合索引 三、覆盖索引 四、前缀索引 五、索引的使用原则 一、SQL提示 我们在使用索引来进行查询时&#xff0c;很有可能会出现一个字段中包含多个索引的情况&#xff0c;例如这里有一个name字段&#xff0c…

从零开始学习Slam-旋转矩阵旋转向量四元组(二)

本文参考&#xff1a;计算机视觉life 仅作笔记用 书接上回&#xff0c;上回不清不楚的介绍了旋转矩阵&旋转向量和四元组 现在回顾一下重点&#xff1a; 本着绕谁谁不变的变则 假设绕z轴旋转θ&#xff0c;旋转矩阵为&#xff1a; 再回顾一下旋转向量的表示以及这个基本记不…

SpringCloud如何实现SSO单点登录?

目录 一、SpringCloud框架介绍 二、什么是SSO单点登录 三、单点登录的必要性 四、SpringCloud如何实现SSO单点登录 一、SpringCloud框架介绍 Spring Cloud是一个基于Spring Boot的微服务架构开发工具集&#xff0c;它整合了多种微服务解决方案&#xff0c;如服务发现、配置…

SpringSecurity6从入门到实战之Filter过滤器回顾

SpringSecurity6从入门到实战之Filter过滤器回顾 如果没有SpringSecurity这个框架,我们应该通过什么去实现客户端向服务端发送请求时,先检查用户是否登录,登录了才能访问.否则重定向到登录页面 流程图如下 官方文档&#xff1a;https://docs.spring.io/spring-security/referen…

Ubuntu (18.04) _Mysql (8.0.X)设置密码强度

首先 查看是否有密码强度插件&#xff1a; SHOW PLUGINS; 如果没有&#xff0c;则安装 install plugin validate_password soname validate_password.so; 再次查看,会看到密码强度插件已开 其次 查看密码强度具体配置 show variables like validate_password%; validate…

【C++】【VScode】常用快捷键

在Visual Studio Code (VSCode) 中&#xff0c;有几个快捷键可以帮助你更高效地编写C代码&#xff0c;特别是与代码提示、自动完成等功能相关的快捷键。这些功能大多数依赖于安装和配置好的C/C扩展&#xff08;通常是由Microsoft提供的&#xff09;。以下是几个有助于代码提示和…

echart扩展插件词云echarts-wordcloud

echart扩展插件词云echarts-wordcloud 一、效果图二、主要代码 一、效果图 二、主要代码 // 安装插件 npm i echarts-wordcloud -Simport * as echarts from echarts; import echarts-wordcloud; //下载插件echarts-wordcloud import wordcloudBg from /components/wordcloudB…

uniapp实现图片上传——支持APP、微信小程序

uniapp实现图片、视频上传 文章目录 uniapp实现图片、视频上传效果图组件templatejs 使用 相关文档&#xff1a; 结合 uView 插件 uni.uploadFile 实现 u-upload uploadfile 效果图 组件 简单封装&#xff0c;还有很多属性…&#xff0c;自定义样式等…根据个人所需调整 te…

Nginx在Docker中的应用:容器化部署与扩展

在当今的云计算和微服务时代&#xff0c;Docker容器技术因其轻量级、可移植性和可扩展性而受到广泛关注。Nginx&#xff0c;作为一个高性能的HTTP和反向代理服务器&#xff0c;也在Docker中找到了其广泛的应用场景。本文将探讨Nginx在Docker中的容器化部署和扩展策略&#xff0…