机器人入门(四)—— 创建你的第一个虚拟小车

机器人入门(四)—— 创建你的第一个虚拟小车

  • 一、小车建立过程
    • 1.1 dd_robot.urdf —— 建立身体
    • 1.2 dd_robot2.urdf —— 添加轮子
    • 1.3 dd_robot3.urdf —— 添加万向轮
    • 1.4 dd_robot4.urdf —— 添加颜色
    • 1.5 dd_robot5.urdf —— 添加碰撞检测(Collision Detection)
    • 1.6 使用gui模式转动小车车轮
    • 1.7 dd_robot6.urdf —— 添加惯性属性
  • 二、Gazebo仿真实验
    • 2.1 环境预备与问题处理
    • 2.2 dd_robot.gazebo
  • 三、其它仿真手段
    • 3.1 Matlab
    • 3.2 Stage
    • 3.3 Virtual Robot Experimentation Platform (V-REP)
  • 四、六大关节种类
      • 无限旋转关节(continous)
      • 固定关节(fixed)
      • 有限旋转关节(revolute)
      • 滑动关节(prismatic)
      • 浮动关节(floating)
      • 平面关节(planar)
      • 总结

参考书籍为:ROS Robotics By Example (Second Edition) —— Carol Fairchild Dr.Thomas L.Harman,微信读书可免费阅读。

一、小车建立过程

首先,在catkin_ws工作空间下,使用catking_create_pkg建立package目录ros_robotics

programmer@ubuntu:~/catkin_ws/src$ catkin_create_pkg ros_robotics
Created file ros_robotics/package.xml
Created file ros_robotics/CMakeLists.txt
Successfully created files in /home/programmer/catkin_ws/src/ros_robotics. Please adjust the values in package.xml.

然后,使用catkin_make进行编译

programmer@ubuntu:~/catkin_ws/src$ cd ~/catkin_ws
programmer@ubuntu:~$ catkin_make

再建立urdf目录,用来存放描述机器人的文件

programmer@ubuntu:~/catkin_ws/src/ros_robotics$ cd ~/catkin_ws/src/ros_robotics
programmer@ubuntu:~/catkin_ws/src/ros_robotics$ mkdir urdf
programmer@ubuntu:~/catkin_ws/src/ros_robotics$ cd urdf

本节的代码文件都可以直接从github下载,不想阅读源码可通过该链接下载 ROS-Robotics-By-Example-2nd-Edition/Chapter2_code/ros_robotics/urdf/,,如果不想下载全部,只下载指定的文件内容,看这篇文章《如何从 GitHub 上下载指定项目的单个文件或文件夹》

1.1 dd_robot.urdf —— 建立身体

并在urdf目录下,建立一份dd_robot.urdf文件,但记得拷贝进去时,内容里不要有中文,经实践,中文不在其支持的字符范围内,解析会出错,内容为:

<?xml version='1.0'?>
<robot name="dd_robot"><!-- Base Link --><link name="base_link"><visual><!--放置的位置在(x,y,z) = (0,0,0)处,摆放方式有roll(滚动), pitch(俯仰), yaw(偏向)--><origin xyz="0 0 0" rpy="0 0 0" /><geometry><!--形状是box,长宽高是0.5 0.5 0.25,单位m--><box size="0.5 0.5 0.25"/></geometry></visual></link></robot>

然后前往ros_robotics目录下,建立一个子目录launch,并在此目录下建立一份ddrobot_rviz.launch文件

programmer@ubuntu:~/catkin_ws/src/ros_robotics/urdf$ cd ..
programmer@ubuntu:~/catkin_ws/src/ros_robotics$ mkdir launch
programmer@ubuntu:~/catkin_ws/src/ros_robotics$ vim ddrobot_rviz.launch
<!--ddrobot_rviz.launch-->
<launch><!-- values passed by command line input --><arg name="model" /><arg name="gui" default="False" /><!-- set these parameters on Parameter Server --><param name="robot_description" textfile="$(find ros_robotics)/urdf/$(arg model)"/><param name="use_gui" value="$(arg gui)"/><!-- Start 3 nodes: joint_state_publisher,robot_state_publisher and rviz --><node name="joint_state_publisher"pkg="joint_state_publisher"type="joint_state_publisher" /><node name="robot_state_publisher"pkg="robot_state_publisher"type="state_publisher" /><node name="rviz" pkg="rviz" type="rviz"args="-d $(find ros_robotics)/urdf.rviz"required="true" />
</launch>

然后在终端执行以下命令,就会弹出一个rviz窗口

$ roslaunch ros_robotics ddrobot_rviz.launch model:=dd_robot.urdf

在这里插入图片描述点击Displays工具栏右下角的Add,添加组件,并编辑Fixed Frame为base_link

在这里插入图片描述
然后就有

在这里插入图片描述

1.2 dd_robot2.urdf —— 添加轮子

然后添加轮子,仿照dd_robot.urdf,在相同目录下建立第二份文件dd_robot2.urdf,在dd_robot.urdf文件的基础上,加了两个轮子,具体内容为:

<?xml version='1.0'?>
<!--dd_robot2.urdf-->
<robot name="dd_robot"><!-- Old Content --><!-- Base Link --><link name="base_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="0.5 0.5 0.25"/></geometry></visual></link><!-- New Content --><!-- Right Wheel --><link name="right_wheel"><visual><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry></visual></link><joint name="joint_right_wheel" type="continuous"><parent link="base_link"/><child link="right_wheel"/><origin xyz="0 -0.30 0" rpy="0 0 0" /><axis xyz="0 1 0" /></joint><!-- Left Wheel --><link name="left_wheel"><visual><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry></visual></link><joint name="joint_left_wheel" type="continuous"><parent link="base_link"/><child link="left_wheel"/><origin xyz="0 0.30 0" rpy="0 0 0" /><axis xyz="0 1 0" /></joint></robot>

保存好后,关闭上一个rviz窗口,执行

$ roslaunch ros_robotics ddrobot_rviz.launch model:=dd_robot2.urdf

就会看到,红色轴是X轴,绿色轴是Y轴,蓝色轴是Z轴。TF - ROS Wiki
在这里插入图片描述

1.3 dd_robot3.urdf —— 添加万向轮

再建一份dd_robot3.urdf文件,在底部添加一个万向轮

<?xml version='1.0'?>
<!--dd_robot3.urdf-->
<robot name="dd_robot"><!-- Base Link --><link name="base_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="0.5 0.5 0.25"/></geometry></visual><!-- New Content --><!-- Caster --><visual name="caster"><origin xyz="0.2 0 -0.125" rpy="0 0 0" /><geometry><sphere radius="0.05" /></geometry></visual></link><!-- Right Wheel --><link name="right_wheel"><visual><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry></visual></link><joint name="joint_right_wheel" type="continuous"><parent link="base_link"/><child link="right_wheel"/><origin xyz="0 -0.30 0" rpy="0 0 0" /><axis xyz="0 1 0" /></joint><!-- Left Wheel --><link name="left_wheel"><visual><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry></visual></link><joint name="joint_left_wheel" type="continuous"><parent link="base_link"/><child link="left_wheel"/><origin xyz="0 0.30 0" rpy="0 0 0" /><axis xyz="0 1 0" /></joint></robot>

dd_robot3.urdf效果图
在这里插入图片描述

1.4 dd_robot4.urdf —— 添加颜色

新建一份dd_robot4.urdf,修改各模块颜色,可以看到left wheel只简单引用了一个<material>标签也产生了效果,所以这个标签可以一次定义,全局起效,定义位置不影响其生效的先后关系,定义在文件末尾也一样,rgba属性值里的a代表alpha,表示透明度,1不透明,0透明。

<?xml version='1.0'?>
<!--dd_robot4.urdf-->
<robot name="dd_robot"><!-- Base Link --><link name="base_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="0.5 0.5 0.25"/></geometry><!-- New Content --><material name="blue"><color rgba="0 0.5 1 1"/></material></visual><!-- Caster --><visual name="caster"><origin xyz="0.2 0 -0.125" rpy="0 0 0" /><geometry><sphere radius="0.05" /></geometry></visual></link><!-- Right Wheel --><link name="right_wheel"><visual><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry><!-- New Content --><material name="black"><color rgba="0.05 0.05 0.05 1"/></material></visual></link><joint name="joint_right_wheel" type="continuous"><parent link="base_link"/><child link="right_wheel"/><origin xyz="0 -0.30 0" rpy="0 0 0" /><axis xyz="0 1 0" /></joint><!-- Left Wheel --><link name="left_wheel"><visual><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry><!-- New Content --><material name="black"/></visual></link><joint name="joint_left_wheel" type="continuous"><parent link="base_link"/><child link="left_wheel"/><origin xyz="0 0.30 0" rpy="0 0 0" /><axis xyz="0 1 0" /></joint></robot>

在这里插入图片描述

1.5 dd_robot5.urdf —— 添加碰撞检测(Collision Detection)

给各个link添加<collision>属性,用来之后在Gazebo中进行碰撞检测

<?xml version='1.0'?>
<!--dd_robot5.urdf-->
<robot name="dd_robot"><!-- Base Link --><link name="base_link"><visual><!-- Base collision --><collision><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="0.5 0.5 0.25"/></geometry></collision><material name="blue"><color rgba="0 0.5 1 1"/></material></visual><!-- Caster --><visual name="caster"><!-- Caster collision --><collision><origin xyz="0.2 0 -0.125" rpy="0 0 0" /><geometry><sphere radius="0.05" /></geometry></collision></visual></link><!-- Right Wheel --><link name="right_wheel"><visual><collision><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry></collision><material name="black"><color rgba="0.05 0.05 0.05 1"/></material></visual></link><joint name="joint_right_wheel" type="continuous"><parent link="base_link"/><child link="right_wheel"/><origin xyz="0 -0.30 0" rpy="0 0 0" /><axis xyz="0 1 0" /></joint><!-- Left Wheel --><link name="left_wheel"><visual><collision><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry></collision><material name="black"/></visual></link><joint name="joint_left_wheel" type="continuous"><parent link="base_link"/><child link="left_wheel"/><origin xyz="0 0.30 0" rpy="0 0 0" /><axis xyz="0 1 0" /></joint></robot>

1.6 使用gui模式转动小车车轮

提前安装gui相关ros包

sudo apt update
#sudo apt install ros-<your_ros_version>-joint-state-publisher-gui,我的ros_version是kinetic,根据版本决定
sudo apt install ros-kinetic-joint-state-publisher-gui

然后执行

roslaunch ros_robotics ddrobot_rviz.launch model:=dd_robot5.urdf gui:=True

效果如图,random随机赋予旋转角度,center是位置归零按键
robot wheel rotation

1.7 dd_robot6.urdf —— 添加惯性属性

给物体添加了inertia惯性属性

<?xml version='1.0'?>
<robot name="dd_robot"><!-- Base Link --><link name="base_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="0.5 0.5 0.25"/></geometry><material name="blue"><color rgba="0 0.5 1 1"/></material></visual><!-- Base collision, mass and inertia --><collision><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="0.5 0.5 0.25"/></geometry></collision><inertial><mass value="5"/><inertia ixx="0.13" ixy="0.0" ixz="0.0" iyy="0.21" iyz="0.0" izz="0.13"/></inertial><!-- Caster --><visual name="caster"><origin xyz="0.2 0 -0.125" rpy="0 0 0" /><geometry><sphere radius="0.05" /></geometry></visual><!-- Caster collision, mass and inertia --><collision><origin xyz="0.2 0 -0.125" rpy="0 0 0" /><geometry><sphere radius="0.05" /></geometry></collision><inertial><mass value="0.5"/><inertia ixx="0.0001" ixy="0.0" ixz="0.0" iyy="0.0001" iyz="0.0" izz="0.0001"/></inertial></link><!-- Right Wheel --><link name="right_wheel"><visual><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry><material name="darkgray"><color rgba=".2 .2 .2 1"/></material></visual><!-- Right Wheel collision, mass and inertia --><collision><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry></collision><inertial><mass value="0.5"/><inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.005" iyz="0.0" izz="0.005"/></inertial></link><!-- Right Wheel joint --><joint name="joint_right_wheel" type="continuous"><parent link="base_link"/><child link="right_wheel"/><origin xyz="0 -0.30 0" rpy="0 0 0" /> <axis xyz="0 1 0" /></joint><!-- Left Wheel --><link name="left_wheel"><visual><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry><material name="darkgray"><color rgba=".2 .2 .2 1"/></material></visual><!-- Left Wheel collision, mass and inertia --><collision><origin xyz="0 0 0" rpy="1.570795 0 0" /><geometry><cylinder length="0.1" radius="0.2" /></geometry></collision><inertial><mass value="0.5"/><inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.005" iyz="0.0" izz="0.005"/></inertial></link><!-- Left Wheel joint --><joint name="joint_left_wheel" type="continuous"><parent link="base_link"/><child link="left_wheel"/><origin xyz="0 0.30 0" rpy="0 0 0" /> <axis xyz="0 1 0" /></joint></robot>

二、Gazebo仿真实验

2.1 环境预备与问题处理

在使用下面的命令运行gazebo时,我遇到了一个错误,可能你也会遇到,一个什么都没有的empty_world也还是需要阳光和大地,就像我的世界初始化一样。

$ roslaunch gazebo_ros empty_world.launch
Error [parser.cc:581] Unable to find uri[model://sun]
Error [parser.cc:581] Unable to find uri[model://ground_plane]

解决方案:Unable to find uri[model://sun]、uri[model://ground_plane] 错误解决,只要下载好对应的model包并放到指定位置即可,这里有两个下载源:gazebo_models - giteegazebo_models - github,使用DownGit工具,从github上下载指定内容会比全部下载更快些,我这里暂时只需要下载这两个。另外,如果遇到Gazebo闪退,请看控制台打印的信息,是否与该文章说明内容相同:《VMware: vmw_ioctl_command error Invalid argument解决办法》,若不同请找其它解决方案,记得source文件起效。

2.2 dd_robot.gazebo

文件后缀从.urdf变成了.gazebo,文件内容不贴了,以免文章过于冗长,请从github上下载,下载地址请往上翻阅,有些属性被替换成了gazebo中特有的。
书本上使用以下命令,判断是否能从urdf格式转换成sdf格式

$ gzsdf –p dd_robot.gazebo

但我的机器上出现了以下错误,查看专栏《ROS采坑记录》下的文章,原因是 gzsdf 在 gazebo3后的版本取消了,啊,妸荷甘与神农同学于老龙吉。

gzsdf: command not found

用以下命令替代,执行后会打印出很长的一段内容,没报错就先不管它。

gz sdf -p dd_robot.gazebo 

在launch目录下建立一份ddrobot_gazebo.launch文件,内容为

<launch><!-- We resume the logic in gazebo_ros packageempty_world.launch,changing only the name of theworld to be launched --><include file="$(findgazebo_ros)/launch/empty_world.launch"><arg name="world_name"value="$(find ros_robotics)/worlds/ddrobot.world"/><arg name="paused" default="false"/><arg name="use_sim_time" default="true"/><arg name="gui" default="true"/><arg name="headless" default="false"/><arg name="debug" default="false"/></include><!-- Spawn dd_robot into Gazebo --><node name="spawn_urdf" pkg="gazebo_ros"type="spawn_model" output="screen"args="-file$(find ros_robotics)/urdf/dd_robot.gazebo-urdf -model ddrobot" /></launch>

在launch的同级目录下,建立一个worlds目录,不清楚具体目录和文件结构,可以看书本发布在github上的源码。并在worlds目录下,建立一份ddrobot.world文件,内容为

<?xml version="1.0" ?>
<sdf version="1.4"><world name="default"><include><uri>model://ground_plane</uri></include><include><uri>model://sun</uri></include><include><uri>model://construction_cone</uri><name>construction_cone</name><pose>-3.0 0 0 0 0 0</pose></include><include><uri>model://construction_cone</uri><name>construction_cone</name><pose>3.0 0 0 0 0 0</pose></include></world>
</sdf>

然后执行以下命令,效果如下。有model少的话,按之前的方法去下载。

$ roslaunch ros_robotics ddrobot_gazebo.launch

在这里插入图片描述在这里插入图片描述

三、其它仿真手段

3.1 Matlab

除了Gazebo,Matlab Simulink通过 Robotics System Toolbox的加持,也支持对ROS进行仿真,见 Robot Operating System (ROS) Support from ROS Toolbox,Matlab也提供了例子,见 Get Started with ROS - MathWorks

3.2 Stage

Stage是一个针对移动机器人与传感器的开源2D仿真器,见 The Player Project - Free Software tools for robot and sensor applications

3.3 Virtual Robot Experimentation Platform (V-REP)

虚拟机器人实验平台,商用,由Coppelia Robotics公司开发,V-REP官网。

四、六大关节种类

在上面的例子中,只用到了一种Continous的连接关节,但这不是所有,还有其它5种,将以代码+动图形式,分别展示效果。
【ROS URDF模型中的6种joint类型】

无限旋转关节(continous)

首先,是我们在上文已经见过的continous关节
robot wheel rotation

固定关节(fixed)

配图,配上关节的动图

有限旋转关节(revolute)

找到之前的dd_robot5.urdf文件,并复制一份命名为dd_robot5_revolute.urdf,并做出如下修改

	...<joint name="joint_right_wheel" type="revolute"><parent link="base_link"/><child link="right_wheel"/><origin xyz="0 -0.30 0" rpy="0 0 0" /><!--New content--><limit effort="30" velocity="1.0" lower="-1.00" upper="1.00" /><axis xyz="0 1 0" /></joint>...<joint name="joint_left_wheel" type="revolute"><parent link="base_link"/><child link="left_wheel"/><origin xyz="0 0.30 0" rpy="0 0 0" /><!--New content--><limit effort="30" velocity="1.0" lower="-1.00" upper="1.00" /><axis xyz="0 1 0" /></joint>...

然后执行

roslaunch ros_robotics ddrobot_rviz.launch model:=dd_robot5_revolute.urdf gui:=True

效果如下
在这里插入图片描述

滑动关节(prismatic)

也称平移关节,找到之前的dd_robot5.urdf文件,并复制一份命名为dd_robot5_prismatic.urdf,并做出如下修改,看上去和revolute关节一样,但它们的lower和upper的单位一个是角度,一个是距离。

	...<joint name="joint_right_wheel" type="revolute"><parent link="base_link"/><child link="right_wheel"/><origin xyz="0 -0.30 0" rpy="0 0 0" /><!--New content--><limit effort="30" velocity="1.0" lower="-3" upper="3" /><axis xyz="0 1 0" /></joint>...<joint name="joint_left_wheel" type="revolute"><parent link="base_link"/><child link="left_wheel"/><origin xyz="0 0.30 0" rpy="0 0 0" /><!--New content--><limit effort="30" velocity="1.0" lower="-3" upper="3" /><axis xyz="0 1 0" /></joint>...

然后执行

roslaunch ros_robotics ddrobot_rviz.launch model:=dd_robot5_prismatic.urdf gui:=True

效果如下,看上去有些不伦不类,但只是效果演示,但你要真说它是不伦不类还有点牵强,谁规定汽车轮子不能横移的呢?
在这里插入图片描述
Lighting Mcqueen

浮动关节(floating)

//@TODO

平面关节(planar)

//@TODO

总结

名称说明
固定关节(Fixed)//@TODO
有限旋转关节(Revolute)//@TODO
无限旋转关节(Continous)//@TODO
滑动关节(Prismatic)//@TODO
浮动关节(Float)//@TODO
平面关节(Planar)//@TODO

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

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

相关文章

在pycharm中,远程操作服务器上的jupyter notebook

一、使用场景 现在我们有两台电脑&#xff0c;一台是拥有高算力的服务器&#xff0c;另一台是普通的轻薄笔记本电脑。如何在服务器上运行jupyter notebook&#xff0c;同时映射到笔记本电脑上的pycharm客户端中进行操作呢&#xff1f; 二、软件 pycharm专业版&#xff0c;jupy…

打造美团外卖新体验,HarmonyOS SDK持续赋能开发者共赢鸿蒙生态

从今年8月起&#xff0c;所有升级到HarmonyOS 4的手机用户在美团外卖下单后&#xff0c;可通过屏幕上的一个“小窗口”&#xff0c;随时追踪到“出餐、取餐、送达”等订单状态。这个能让用户实时获悉订单进度的神奇“小窗口”&#xff0c;就是实况窗功能。 实况窗&#xff1a;简…

java版直播商城平台规划及常见的营销模式 电商源码/小程序/三级分销+商城免费搭建

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

843. n-皇后问题

文章目录 QuestionIdeasCode Question n− 皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n &#xff0c;请你输出所有的满足条件的棋子摆法。 输入格…

心理咨询预约小程序

随着微信小程序的日益普及&#xff0c;越来越多的人开始关注如何利用小程序来提供便捷的服务。对于心理咨询行业来说&#xff0c;搭建一个心理咨询预约小程序可以大大提高服务的效率和用户体验。本文以乔拓云平台为例&#xff0c;详细介绍如何轻松搭建一个心理咨询预约小程序。…

辅助驾驶功能开发-功能规范篇(22)-6-L2级辅助驾驶方案功能规范

1.3.6 ELK 系统功能定义 ELK全称Emergency Lane Keeping,即紧急车道保持。当车辆与道路边界护栏(包含隔离带护栏、路锥、水马) 有碰撞危险或当车辆正偏出道路边沿且存在“对向来车”或“后向来车”与本车有碰撞风险时,通过给与转向反力矩进行车辆横向运动介入控制,避免或减…

态路小课堂丨如何为QSFP-DD800G光模块选择合适的光纤跳线

TARLUZ态路 在之前2篇文章中&#xff0c;我们介绍了关于800G光模块的封装、光口类型等内容。本文态路通信将为您介绍“如何为QSFP-DD800G光模块选择合适的光纤跳线”。方便您在800G数据中心网络互连场景中快速完成链路布线。 文章1&#xff1a; 三款800G光模块方案介绍—SR8/…

【AIFEM案例操作】水泵强度分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…

写博客的模板

本人详解 作者&#xff1a;王文峰&#xff0c;参加过 CSDN 2020年度博客之星&#xff0c;《Java王大师王天师》作者 公众号&#xff1a;山峯草堂&#xff0c;非技术多篇文章&#xff0c;专注于天道酬勤的 Java 开发问题、中国国学、传统文化和代码爱好者的程序人生&#xff0c;…

总感觉戴助听器耳朵又闷又堵怎么办?

随着助听器技术的进步发展&#xff0c;这些问题都有了一定程度的改善。例如&#xff0c;现在的助听器变得越来越小巧&#xff0c;外形更加美观和隐蔽&#xff1b;各种降噪技术和验配技巧也提升了助听器的音质和清晰度。 但是&#xff0c;还有一个问题困扰着很多助听器用户&…

linux的使用学习(1)

Linux 修改root密码 1.以 root 用户或具有 sudo 权限的登录到 Linux 系统。 2.打终端&#xff0c;并执行以下命令以更改 root 用户的密码&#xff1a; sudo passwd root 3.然后&#xff0c;系统会要求你输入新的 root 密码。请注意&#xff0c;在输入密码时&#xff0c;终端界…

Mac docker+vscode

mac 使用docker vs code 通过vscode 可以使用docker容器的环境。 可以在容器安装gdb, 直接调试代码。 创建容易时候可以指定目录和容易目录可以共享文件。

研发效能城市沙龙【11月12日】深圳站-《敏捷环境下的测试自动化实践指南》—陈晓鹏丨IDCF

IDCF社区研发效能城市沙龙是一个开放、共享的平台&#xff0c;我们欢迎每一位参加者积极分享自己的经验和见解&#xff0c;构建一个互联互通的技术社区。 随着这几年业务的快速变化诉求以及敏捷开发方法的流行&#xff0c;越来越多的组织都采用敏捷模式进行项目开发。而这种时…

七、W5100S/W5500+RP2040树莓派Pico<UDP 组播>

文章目录 1. 前言2. 相关简介2.1 简述2.2 优点2.3 应用 3. WIZnet以太网芯片4. UDP 组播回环测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 UDP组播是一种基于UDP协议的通信方式&#xff0c;它允许一台计算机通过发送单…

【咕咕送书 | 第5期】国家数据局正式揭牌,数据专业融合型人才迎来发展良机

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《粉丝福利》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 ⛳️ 写在前面参与规则引入《数据要素安全流通》《Python数据挖掘&#xff1a;入门、进阶与实用案例分析》《数据保…

身份证OCR:变革的触手,掀起识别的革命

身份证OCR识别技术&#xff08;Optical Character Recognition&#xff09;是一项将身份证上的文字信息转化为可编辑、搜索、存储、分享的电子文本的技术。它的发展与信息技术和身份认证需求的不断演进密切相关。以下将简要介绍身份证OCR识别技术的历史以及兴起背景。 OCR识别…

LLaMA-Adapter源码解析

LLaMA-Adapter源码解析 伪代码 def transformer_block_with_llama_adapter(x, gating_factor, soft_prompt):residual xy zero_init_attention(soft_prompt, x) # llama-adapter: prepend prefixx self_attention(x)x x gating_factor * y # llama-adapter: apply zero_init…

Python中的random模块,随机性的神奇世界

随机性在计算机编程和数据科学中扮演着至关重要的角色。Python中的random模块提供了丰富的工具和函数&#xff0c;帮助我们生成随机数、操作随机序列&#xff0c;以及模拟随机性事件。 在本文中&#xff0c;我们将分享random模块&#xff0c;了解它的基本用法、功能和应用领域…

vim

简介 vim是一款多模式的文本编辑器&#xff0c;vim里面还有很多子命令&#xff0c;来进行代码的编写操作 常用模式图 命令模式 光标移动 shif $ 光标定义到当前行的最右侧结尾 shift ^ 光标定义到当前行的最左侧开头 shift g 光标定位到文本最末尾…

微信小程序去掉Button自带边框

前言 微信button自带边框 去掉边框后效果 实现 html代码 <view><button class"contactBtn" open-type"contact" contact"handleContact"session-from"sessionFrom">意见反馈</button> </view>css代码 …