ROS 从安装到机械臂的仿真与实验
ROS 从安装到机械臂的仿真与实验
- 前言
- 1. Ubuntu+ROS系统的搭建
- a) 在VMware虚拟机中安装Ubuntu 16.04;
- b) 在Ubuntu16.04LTS 中安装ROS(版本Kinetic):
- 2. ROS工作原理与Node通讯机制:
- a) 首先,什么是ROS:
- b) ROS通过Package来管理所需的文件,通常一个ROS Package包含以下文件或文件夹:
- c) ROS nodes(节点)
- d) ROS message
- e) 三种实现nodes间通信的方法
- f) 什么是launch文件
- g)如何获取topic和message的信息
- 3. 创建workspace(工作区)
- 4.创建一个ROS Package
- 5. MoveIT控制机械臂:
- 1. 建立机械臂仿真模型:
- 2. 配置实际机械臂:
- 6. 编写Python文件
- 7. 仿真与实验
前言
刚刚结束在沈阳自动化研究所的实习,实习内容是实现机械臂的轨迹规划和仿真,使用的机械臂有UR5和Panda。沈自所的机器人实力确实很强,忙活了一个假期也只是学到了一点皮毛。这篇博客也算是一个实习的记录,将我在学习ROS过程中学到的知识和遇到的坑都记录下来,也希望能为其他还在ROS里挣扎的同学们提供一些帮助。鄙人不才,这篇博客顶多算是抛砖引玉。
本文将详细的介绍ROS,从安装到仿真再到实验。因为内容较多,可能一次无法写完,会持续补充。
1. Ubuntu+ROS系统的搭建
现在ROS可以同时运行在Windows环境和Linux环境下,但是Linux环境下还是相对稳定一些,而且也更适合于程序员开发。安装Linux操作环境可以选择用虚拟机或者直接双系统(如果想要与真实的机械臂相连,不能使用虚拟机,如果一定要使用虚拟机需要打上实时补丁),在这里我选择用虚拟机来做轨迹规划仿真,用另一台装有Linux系统的电脑来做后面的真机实验。VMware是市面上目前比较主流的虚拟机工作平台,在这里我们使用它创建虚拟机。Ubuntu 16.04是目前和ROS Kinetic版本兼容度最高的,鉴于我们之后会使用ROS Kinetic版本(因为这是比较稳定而且较新的版本),我们在虚拟机中安装Ubuntu 16.04版本。
a) 在VMware虚拟机中安装Ubuntu 16.04;
-
下载并安装VMware v12.1.0,下载Ubuntu 16.04镜像文件
-
运行VMware v12.1.0,创建新的虚拟机,遵循下面这个网页教程,可以完成后续安装,这里就不再赘述。(https://www.jianshu.com/p/3379892948da)
-
再安装好虚拟机和Ubuntu 16.04之后,我们重启虚拟机,往往会出现屏幕尺寸太小的情况。有以下两种方法可以解决:
- 第一种方法,在终端输入xrandr,并执行,输入我们需要设置的分辨率,xrandr -s 1920x1440,然后执行。
- 第二种方法,直接打开虚拟机的设置,更改屏幕分辨率再应用
b) 在Ubuntu16.04LTS 中安装ROS(版本Kinetic):
-
在控制台中输入命令:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
-
再输入命令:
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116
-
开始正式的安装,安装豪华至尊版ROS:
sudo apt-get update
-
前几步一般不会有太大问题,安装完成后可以查看使用的包:
apt-cache search ros-kinetic
-
到此,还没有结束,需要初始化:
sudo rosdep init
-
rosdep update
(这一命令会把所有相关的依赖项都升级到最新版)
(如果出现无法运行rosdep的情况,用rospack find rosdep
检查rospack是否安装,用sudo apt install rospack-tools
命令安装,但要注意的是,出现这种情况很有可能第2步执行安装命令出错,应该重新执行第2步) -
配置环境变量:
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
(注意:kinetic的k是小写,如果出现“没有找到文件”的错误,可以通过gedit .bashrc来查看最后一行的source文件是否是小写k, 这里非常坑,很多教程都写错了) -
source ~/.bashrc
-
此时,就完成了安装,可以测试一下:在命令行终端中输入roscore并运行。
此时如果出现:
那么恭喜你,ROS成功安装上了 -
我们可以跑一个测试程序—小海龟。先安装示例 :sudo apt-get install ros-kinetic-turtlesim (16.04版本可能不用这一步也能直接跑)
然后,在三个不同的终端分别执行以下三个指令:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
然后你就会看到经典的小乌龟窗口:
试试用上下左右建来控制小乌龟吧~ -
在正式使用ROS进行开发之前,我推荐大家几个插件,会在后面的开发时给大家节省大量的时间。
a).sudo apt install terminator
(这是一个非常好用的终端插件,可以随意的分屏,鉴于我们平时使用ROS经常需要终端多开,可以随意分割窗口还是非常方便的)
b).sudo apt install python-pip
(使用Python语言脚本进行开发的话,一定会用到的插件)
c).sudo pip install ipython
(可以实现对仿真进行同步debug,因为有的时候程序本身没有错,但是结合仿真就会跑飞)
d).sudo apt install meld
(一个文本比较工具,当你修改过某个文件夹下的多个文件,但是又想不起来修改过哪些时,会派上用场)
2. ROS工作原理与Node通讯机制:
在教大家如何使用ROS控制机械臂之前,我们先来了解一下ROS的基本知识:
a) 首先,什么是ROS:
ROS(Robot Operating System)是一个开源平台,集成了各种各样的服务,包括视觉识别,轨迹规划,模型仿真等很多强大的开发功能。
b) ROS通过Package来管理所需的文件,通常一个ROS Package包含以下文件或文件夹:
- Launch文件夹:包含所有launch文件
- Src文件夹:包含所有的cpp文件和python文件
- CMakeLists.txt:包含所有需要执行的cmake配置
- package.xml: 包含所有package信息和依赖项
c) ROS nodes(节点)
nodes是ROS里的一个基础程序,它是一个可执行文件,通过ROS与其他的nodes进行通讯。Nodes可以向topic发布或提取信息,可以提供或使用一个Service。
这里有个小技巧,我们自己创建node的时候,可以通过rosnode list来查看当前有哪些nodes在运行,如果我们创建的node不在列表里,那么说明我们的node可能没有运行起来,需要重新source一下。
d) ROS message
message是node在向topic发布或提取信息时的一种消息格式
可以使用rosmsg show 来查看某一种特定message的格式,因为message通常都是自定义的一种格式或已经定义好的一种格式,类似于C语言中的结构体,通常包含多个不同类型的变量。
e) 三种实现nodes间通信的方法
- Ros topic:message通过publisher和subscriber来传递于多个nodes之间,而topic类似于一个公告板,所有的nodes可以通过topic实现相互通信。一个topic可能会有很多publisher和subscriber,而一个node也可能会从多个topic上发布或获取message。Topic是用来表示message内容的名称。
比如:
左边的teleop_turtle和右边的turtlesim是两个ROS nodes,他们通过中间的topic“/turtle1/command_velocity”进行通讯。两个node是无法直接进行通讯的,通过发布器node发布message给topic,接收器再从topic上获取有用的信息,所以这种通讯通常不是同步的。 - ROS service: service 是另一种可以实现nodes之间相互通信的方式。于topic的方法不同在于,topic使用publisher和subscriber这种非常灵活的传递信息方式,但这种多对多,单向的灵活传递信息的方式,并不适用于分布式系统里需要答复请求的场景。所以衍生出了service的通信方式, service由一对message定义:一个用于请求,一个用于回复。当一个ROS node提供service通信时,客户端会发送一个请求给这个node,并停止动作等待回复。
- ROS action: Action 是第三种可以实现nodes之间相互通信的方式。Action和Service的区别在于,Service是同步的,当一个ROS程序调用一个service的时候,程序会停止当前的运行直到收到service的答复。而Action是不同步的,这就像启动一个新线程。当ROS程序调用action时,ROS程序可以在当前线程中等待action的答复,但在另一个线程中执行其他任务。
f) 什么是launch文件
还记得我们最开始时运行的小乌龟实例程序么?让我们来看看它的launch文件。
<launch><!-- turtlebot_teleop_key already has its own built in velocity smoother --><node pkg="turtlebot_teleop" type="turtlebot_teleop_key" name="turtlebot_teleop_keyboard" output="screen"><param name="scale_linear" value="0.5" type="double"/><param name="scale_angular" value="1.5" type="double"/><remap from="turtlebot_teleop_keyboard/cmd_vel" to="cmd_vel_mux/input/teleop"/></node>
</launch>
这里面node那一行是最重要的,我们先忽略其他的。
node那一行包含四个重要信息:
- pkg=“package_name” # Name of the package that contains the code of the ROS program to execute
- type=“cpp_executable_name” # Name of the cpp executable file that we want to execute
- name=“node_name” # Name of the ROS node that will launch our C++ file
- output=“type_of_output” # Through which channel you will print the output of the program
后面我们会详细介绍如何创建launch文件。
g)如何获取topic和message的信息
在ROS里,可以用rostopic list
命令来获取所有可用的topic,同时也可以用rostopic echo <topic_name>
命令来查看对应topic正在发布的消息,rostopic echo <topic_name> -n1
可以获取对应topic发布的最后一条消息。
使用rostopic info <topic_name>
命令可以查看对应topic的信息
如果想获得某一种message的信息,可以使用rosmsg show <message>
命令,比如:rosmsg show std_msgs/Int32
这里的Int32是type,不过用法有点儿像struct
通过rostopic info <topic_name>
可以知道你编写的Python文件需要发布什么类型的数据来控制机械臂,再用rosmsg show <message>
来确定variable的名称
rostopic pub <topic_name> <message_type> <value>
,这个命令可以用来立即发布一些你想要发布的指令,用来测试subscriber是否在正常运行,例如:rostopic pub /counter std_msgs/Int32 7
, 这个命令可以让counter向screen持续发送数字‘7’
重要总结:在使用ROS控制仿真时,如果能找对应的topic的名字,可以使用rostopic info <topic_name>
命令来查看对应的msg的格式,然后再通过rosmsg show <message>
命令来获取对应msg的组成部分,可以很容易的找到我们需要的数据组成,因为msg就像是一个结构体,而我们通常只需要结构体中的一小部分数据。在找到对应数据的调用格式之后,我们可以用rostopic echo <topic_name>
命令来直观的看到对应topic的数据返回值的样子,这样有助于编写Python代码。当写完Python代码之后,就可以写launch文件和CMakelist文件了,这样一个完整的ROS包就算是初步组装完成可以运行啦~
3. 创建workspace(工作区)
ROS对机械臂的所有操作都是在一个工作区内实现的,所以我们先创建工作区。
-
mkdir -p ~/XXX_ws/src (这里的‘XXX’可以起自己喜欢的名字)cd ~/catkin_ws/catkin_makesource devel/setup.bash
(有的教程里还有下面这句,但是我自己测试发现好像没什么用,大家要是有什么发现请告诉我)
echo $ROS_PACKAGE_PATH /home/youruser/catkin_ws/src:/opt/ros/kinetic/share
(此处的"youruser"请修改为自己的用户名,也就是创建虚拟机时的那个)
4.创建一个ROS Package
-
cd ~/catkin_ws/src (打开我们刚刚创建的工作区) catkin_create_pkg <包的名字><包的依赖包> (包的名字随便起,如果是用CPP编程,依赖包就写roscpp,如果是Python编程,就是rospy)
- 我用的是Python,所以下面我们按Python来建包:
catkin_create_pkg my_package rospy
- 可以用rospack list | grep my_package,或roscd my_package来确认是否成功创建包。
注意:此处的my_package是刚刚创建的ROS包的名字,找不到的话用命令行:
source /home/muyang/Muyang_ws/devel/setup.bash
或者使用
sudo gedit ~/.bashrc
在最后一行添加
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/你的工作空间路径/src
注意:重启terminal生效 - 下一步,回到catkin_ws 文件夹下,运行
catkin_make
注意:当workspace下包含多个package时,可以用catkin_make --only-pkg-with-deps 你的ROS包
对刚刚创建的‘‘你的ROS包’’进行catkin_make,有一个特殊的语句catkin_make -DCATKIN_WHITELIST_PACKAGES=“你的ROS包”,和前面的命令行一样,都是只运行指定的package
5. MoveIT控制机械臂:
1. 建立机械臂仿真模型:
a) 第一步建立工作区,生成文件夹,mkdir -p ~/Muyang_ws/src
,这里我把自己的工作区起名为“Muyang_ws”
b) cd ~/ Muyang _ws/
,打开刚刚生成的文件夹
c) catkin_make
,这步很关键,是在生成相关的配置文件,包括Cmakelist.txt等
d) source devel/setup.bash
,通过这个命令,我们就可以在ros中调用这个工作区下的文件了。
e) 第一步:使用sudo apt-get install ros-kinetic-moveit
命令安装moveit,moveit是我们建立仿真模型的软件
f) 在第一步的基础上,我们使用sudo apt-get install ros-kinetic-franka-description
命令安装panda机械臂的urdf
g) 通过roslaunch moveit_setup_assistant setup_assistant.launch
命令,启动MoveIt! Setup Assistant,会出现下面这样的窗口:
h) 我们选择Create New MoveIt! Configuration Package,在弹出的页面中点browse,选择路径/opt/ros/kinetic/share/franka_description/robots/panda_arm_hand.urdf.xacro
,确认后点load会出现下面这样的窗口:
i) 下一步,配置self-collision,直接选择默认的95%,点击Generate Collision Matrix:
j) 下一步,定义Virtual Joints,像这样:
k) 接下来,定义Planning Groups,配置如图:
l) 点Add Joints,如下图选择这些joint:
m) 点击save,再点击add group,然后如下配置:
n) 注意,接下来不用点add joints,我们点击Add Links,在弹出的窗口里选择如下links:
o) 接下来我们给机械臂设定几个特定的动作,选Robot poses, 点击add pose,调节8个joints,不用刻意调整数值,让姿态是直立就好,这一步主要是为了检查前几步是否正确:
p) 接下来定义End Effectors,配置如下:
q) 鉴于我们没有加入深度相机,我们直接跳到ROS Control的部分,配置如下:
点击Add planning group joints,选择panda_arm:
r) 在Author information里,填入作者姓名和邮箱,注意这里必须填写,否则无法生成仿真模型。最后在Configuration files里找到我们之前生成的工作区,点击Generate Package:
2. 配置实际机械臂:
a) 到目前为止,仿真模型已经配置好了,我们可以选择用运行demo.launch文件进行仿真,也可以选择自己配置一个新的文件来运行仿真,鉴于我们后面希望将仿真于真机连接起来,而demo.launch是做不到的,所以我们来自己配置一个运行环境。
b) 首先,在刚刚生成的panda_moveit_config下找到config文件夹,创建controllers.yaml文件,在文件内填写如下格式的命令行:
controller_list:- name: panda_arm_controlleraction_ns: execute_trajectorytype: ExecuteTrajectoryjoints:- panda_joint1- panda_joint2- panda_joint3- panda_joint4- panda_joint5- panda_joint6- panda_joint7- panda_joint8- name: hand_controlleraction_ns: pickuptype: Pickupjoints:- panda_finger_joint1- panda_finger_joint2- panda_hand_joint
c) 然后再同样的config文件夹下,新建“joint_names.yaml”文件,将上一步中所有的joint都填写进去,格式是:
controller_joint_names: [panda_joint1, panda_joint2, panda_joint3, panda_joint4, panda_joint5, panda_joint6, panda_joint7, panda_joint8, panda_finger_joint1, panda_finger_joint2, panda_hand_joint]
d) 然后在launch文件夹下,修改panda_moveit_controller_manager.launch文件,注意:这里的panda根据不同的机械臂模型可能是不一样的,比如后面用到ur5机械臂时会修改为ur5。修改文件夹的内容为:
<launch>
<rosparam file="$(find panda_moveit_config)/config/controllers.yaml"/>
<param name="use_controller_manager" value="false"/>
<param name="trajectory_execution/execution_duration_monitoring" value="false"/>
<param name="moveit_controller_manager"
value="moveit_simple_controller_manager/MoveItSimpleControllerManager"/>
</launch>
e) 然后同样在launch文件夹下,新建panda_planning_execution.launch文件,文件内容格式为:
<launch><arg name="sim" default="true"/><rosparam command="load" file="$(find panda_moveit_config)/config/joint_names.yaml"/><include file="$(find panda_moveit_config)/launch/planning_context.launch" ><arg name="load_robot_description" value="true" /></include><group if="$(arg sim)"><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"><param name="/use_gui" value="false"/><rosparam param="/source_list">[/joint_states]</rosparam></node></group>
<--!此处的group的部分是用来仿真时用的,连上真实机械臂的时候,需要删掉。--><node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="true" output="screen" /><include file="$(find panda_moveit_config)/launch/move_group.launch"><arg name="publish_monitored_planning_scene" value="true" /><arg name="allow_trajectory_execution" value="true"/><!--arg name="fake_execution" value="true"/--><arg name="info" value="true"/></include><include file="$(find panda_moveit_config)/launch/moveit_rviz.launch"><arg name="config" value="true"/></include></launch>
6. 编写Python文件
- 在my_package下的src文件夹下新建file,取名为planning_script.py
#!/usr/bin/env python# Author: Francisimport sys
import copy
import rospy
import moveit_commander
import moveit_msgs.msg
import geometry_msgs.msg
from math import pi
from std_msgs.msg import String
from moveit_commander.conversions import pose_to_list
from moveit_msgs.msg import RobotState, Constraintsmoveit_commander.roscpp_initialize(sys.argv)
rospy.init_node('move_group_python_interface_tutorial',anonymous=True)
robot = moveit_commander.RobotCommander()scene = moveit_commander.PlanningSceneInterface()group_name = "panda_arm"
group = moveit_commander.MoveGroupCommander(group_name)display_trajectory_publisher = rospy.Publisher('/move_group/display_planned_path',moveit_msgs.msg.DisplayTrajectory,queue_size=1)def wait_for_state_update(box_is_known=False, box_is_attached=False, timeout=4):box_name = "box"start = rospy.get_time()seconds = rospy.get_time()while (seconds - start < timeout) and not rospy.is_shutdown():attached_objects = scene.get_attached_objects([box_name])is_attached = len(attached_objects.keys()) > 0is_known = box_name in scene.get_known_object_names()if (box_is_attached == is_attached) and (box_is_known == is_known):return Truerospy.sleep(0.1)seconds = rospy.get_time()return Falsedef creat_box(scene,group,pose=[]):rospy.sleep(2.0)box_pose = geometry_msgs.msg.PoseStamped()box_pose.header.frame_id = "panda_link0"box_pose.pose.orientation.w = pose[0]# box_pose.pose.orientation.x = 0.0# box_pose.pose.orientation.y = 0.0# box_pose.pose.orientation.z = 0.0box_pose.pose.position.x = pose[1]box_pose.pose.position.y = pose[2]box_pose.pose.position.z = pose[3]box_name = "box"scene.add_box(box_name, box_pose, size=(pose[4], pose[5], pose[6]))wait_for_state_update(box_is_known=True, timeout=5)print "============ Printing robot state"print robot.get_current_state()print ""def go_to_pose(robot, group, pose=[]):pose_goal = geometry_msgs.msg.Pose()pose_goal.orientation.x = pose[3]pose_goal.orientation.y = pose[4]pose_goal.orientation.z = pose[5]pose_goal.orientation.w = pose[6]pose_goal.position.x = pose[0]pose_goal.position.y = pose[1]pose_goal.position.z = pose[2]group.set_pose_target(pose_goal)group.go(wait = True)print "============ Printing robot state"print robot.get_current_state()print ""creat_box(scene,group,[1.0, 0.2, 0.2, 0.25, 0.1, 0.1, 0.5])go_to_pose(robot, group, [0.30603, 0.017247, 0.64808, 0.59731, 0.52117, -0.4175, -0.44418])
# rospy.sleep(10.0)
go_to_pose(robot, group, [0.090837, 0.42689, 0.19629, 0.92343, 0.38265, -0.026938, -0.011112])# result = group.go(wait=True)group.stop()group.clear_pose_targets()rospy.sleep(10)# moveit_commander.roscpp_shutdown()
- 创建launch文件,在my_package 文件夹下执行mkdir launch,再执行touch launch/my_package_launch_file.launch。在IDE中编写launch文件:
<launch><!-- My Package launch file --><node pkg="my_package" name="move_group_python_interface_tutorial" type="planning_script.py" output="screen"></node>
</launch>
- 最后一步,为了能让刚刚新建的Python文件能执行,要修改它的执行权限,运行命令行
chmod u+x planning_script.py
7. 仿真与实验
a) Panda机械臂的仿真:
- 打开终端,运行roscore
- 新建终端运行前面第5部分创建的panda_planning_execution.launch文件新建终端运行前面第5部分创建的panda_planning_execution.launch文件
- 再新建终端运行前面第6部分创建的my_package_launch_file.launch文件。
- 仿真效果如下:
b) UR5机械臂的仿真与实验
(这部分是后加的,实习计划里本来没有这一项,但是因为提前完成了实习任务,所里又正好有空闲的机械臂,所以临时增加了实习内容,鉴于所里目前只有UR5机械臂可以供我使用,所以在真实机械臂上运行的轨迹规划是在UR5上实现的,3.8版本)
- 仿照前面在创建my package的ROS包之后,从github上下载ur_modern_driver, 网址是:https://github.com/ros-industrial/ur_modern_driver 和universal_robot,https://github.com/ros-industrial/universal_robot
- 跟随http://wiki.ros.org/rosdep的步骤,运行sudo apt-get install python-rosdep,用sudo rosdep init初始化rosdep
- 使用rosdep install --from-paths src --ignore-src -r -y 下载相关依赖包。完成时用catkin_make编译。注意:运行时需要将机器人通过网线与计算机连接到一起
- 因为所里的UR5是3.8版本的,所以需要修改之前下载的ur_modern_driver下的文件
- 修改ur_modern_driver下的src/robot_state_RT.cpp文件:在340行加上几行代码,修改对版本的支持。见第5条
- 修改ur_modern_driver下的include下的ur_modern_driver.h下的ur_hardware_interface.h文件,把canSwitch函数声明改成prepareSwitch, 把函数内的const尾缀删掉。
- 修改ur_modern_driver下的Cmakelist.txt,注释掉catkin_package的最后一项DEPENDS
- catkin_make刷新工作区
- 需要添加的程序行
else if (version_ >= 3.3 && version_ < 3.5) {if (len != 1060)len_good = false;} else if (version_ >= 3.5 && version_ <=3.8) {if (len != 1108){len_good = false;}
}
- 仿照第六部分, 在Muyang_ws下的src文件夹下创建新的名为ur5_package的 ROS包。在此文件夹下创建新的Python文件:
#!/usr/bin/env pythonimport sys
import rospy
import moveit_commander
from moveit_commander import RobotCommander, roscpp_initialize, roscpp_shutdown
from moveit_msgs.msg import RobotState, Constraints
import geometry_msgs
from geometry_msgs.msg import Pose
from moveit_commander import MoveGroupCommander
import copyif __name__=='__main__':roscpp_initialize(sys.argv)rospy.init_node('moveit_py_demo', anonymous=True)robot = RobotCommander()rospy.sleep(1)group = MoveGroupCommander("manipulator")# group.set_start_state(RobotState())scene = moveit_commander.PlanningSceneInterface()def wait_for_state_update(box_is_known=False, box_is_attached=False, timeout=4):# Copy class variables to local variables to make the web tutorials more clear.# In practice, you should use the class variables directly unless you have a good# reason not to.box_name = "box"## BEGIN_SUB_TUTORIAL wait_for_scene_update#### Ensuring Collision Updates Are Receieved## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^## If the Python node dies before publishing a collision object update message, the message## could get lost and the box will not appear. To ensure that the updates are## made, we wait until we see the changes reflected in the## ``get_known_object_names()`` and ``get_known_object_names()`` lists.## For the purpose of this tutorial, we call this function after adding,## removing, attaching or detaching an object in the planning scene. We then wait## until the updates have been made or ``timeout`` seconds have passedstart = rospy.get_time()seconds = rospy.get_time()while (seconds - start < timeout) and not rospy.is_shutdown():# Test if the box is in attached objectsattached_objects = scene.get_attached_objects([box_name])is_attached = len(attached_objects.keys()) > 0# Test if the box is in the scene.# Note that attaching the box will remove it from known_objectsis_known = box_name in scene.get_known_object_names()# Test if we are in the expected stateif (box_is_attached == is_attached) and (box_is_known == is_known):return True# Sleep so that we give other threads time on the processorrospy.sleep(0.1)seconds = rospy.get_time()# If we exited the while loop without returning then we timed outreturn Falserospy.sleep(2.0)box_pose = geometry_msgs.msg.PoseStamped()box_pose.header.frame_id = "world"box_pose.pose.orientation.w = 1.0box_pose.pose.orientation.x = 0.0box_pose.pose.orientation.y = 0.0box_pose.pose.orientation.z = 0.0box_pose.pose.position.x = -0.04482box_pose.pose.position.y = -0.4box_pose.pose.position.z = 0.56438box_name = "box"scene.add_box(box_name, box_pose, size=(0.1, 0.1, 0.2))wait_for_state_update(box_is_known=True, timeout=5)# print("wait for state update")# start to movegroup.set_start_state_to_current_state()# print "current pose:"# print group.get_current_pose()c = Constraints()waypoints = []waypoints.append(group.get_current_pose().pose)# Move forwardwpose = Pose()wpose.position.x = 0.25659wpose.position.y = -0.34674wpose.position.z = 0.62301wpose.orientation.x = 0.58494wpose.orientation.y = -0.41463wpose.orientation.z = -0.49934wpose.orientation.w = 0.48641waypoints.append(copy.deepcopy(wpose))# middle point wpose.position.x = -0.032889wpose.position.y = -0.21751wpose.position.z = 0.77293wpose.orientation.x = 0.58496wpose.orientation.y = -0.41468wpose.orientation.z = -0.4993wpose.orientation.w = 0.48637waypoints.append(copy.deepcopy(wpose))# move up# wpose.position.x = -0.04482# wpose.position.y = 0.18196# wpose.position.z = 0.56438# wpose.orientation.x = -0.70709# wpose.orientation.y = 7.9492e-05# wpose.orientation.z = 4.5739e-06# wpose.orientation.w = 0.70713# waypoints.append(copy.deepcopy(wpose))# Move down# wpose.position.z -= 0.10# waypoints.append(wpose)wpose.position.x = -0.40715wpose.position.y = -0.44703wpose.position.z = 0.5731wpose.orientation.x = 0.58481wpose.orientation.y = -0.41475wpose.orientation.z = -0.49934wpose.orientation.w = 0.48645waypoints.append(copy.deepcopy(wpose))# Move to the side# wpose.position.y += 0.05# waypoints.append(wpose)# plan, fraction = group.compute_cartesian_path(waypoints, 0.01, 0.0, path_constraints=c)group.set_planning_time(20)# for i in range(10):# plan, fraction = group.compute_cartesian_path(waypoints, 0.01, 0.0, avoid_collisions=True)# print 'Plan success percent: ', fraction# if fraction >= 0.9:# breakgroup.set_pose_target(waypoints[0])plan1 = group.plan()group.go(wait=True)group.set_pose_target(waypoints[1])plan2 = group.plan()group.go(wait=True)group.set_pose_target(waypoints[2])plan3 = group.plan()group.go(wait=True)group.set_pose_target(waypoints[3])plan4 = group.plan()group.go(wait=True)group.stop()
# It is always good to clear your targets after planning with poses.
# Note: there is no equivalent function for clear_joint_value_targets()group.clear_pose_targets()
- 用网线连接真机之后,运行轨迹规划:
a. 运行roslaunch ur_modern_driver ur5_ros_control.launch limited:=true robot_ip:=“192.168.0.10”,这里的robot ip可以通过在终端内用ping的方式来获得
b. 新开一个终端,运行roslaunch panda_moveit_config mypanda_planning_execution.launch limited:=true
c. 再新开一个终端,运行刚刚新建的Python文件 - 运行结果:
完成以上步骤,UR5机械臂就会按照轨迹规划的多个点进行移动,但是要注意的是,虽然机械臂会按照规划好的空间点按照顺序移动,但是因为反运动学解析的算法原因,有些点可以对应多个姿态,这种情况会可能会导致机械臂大幅度的摆动,容易造成事故,所以在真机上运行时,一定要确保急停键待命。
仿真和真机运行结果:
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Bugly使用记录——异常上报
Bugly官网首页 SDK文档地址 导入SDK Bugly支持自动和手动两种方式,感谢伟大的AS,自动导入更简单更快 需要操作两个地方 1.在Module的build.gradle文件中添加依赖和属性配置 android {defaultConfig {//这个针对的是NDK的配套设置,SDK不需…...
2024/4/21 16:33:52 - 从像素说起(二):移动前端布局之CSS devicePixelRatio
第一篇在这里:CSS中的分辨率,像素(dpi,ppi,物理像素,独立像素,参考像素),devicePixelRatio/density换算,与视窗viewport(一) ,主要讲了分辨率和像素的不同概念和区别。 这篇的index…...
2024/4/21 16:33:51 - Web服务器常用设置
1.Tomcat浏览目录 找到安装目录下的文件/conf/web.xml, 找到以下配置节,将parame-value设置为true即可 <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init…...
2024/4/21 16:33:51 - RC-car硬件平台搭建及arduino控制
引言 想做一个自动驾驶的demo,用于算法的验证和展示。目前完成了车辆平台的搭建和电机控制,后续会陆续更新其他部分:路径规划、激光slam建图与定位,语义地图的构建,控制算法等等。 硬件平台: 计算平台 …...
2024/4/21 16:33:50 - More than one file was found with OS independent path ‘lib/x86/libc++_shared.so‘
运行react-native安卓时遇到这个错误,在这个错误之前还遇到过一个错误, none of the consumable configurations have attributes 这是在link项目引入的第三方库时报的错,这个错的意思就是link的时候没有找到我这个第三方库,于是…...
2024/4/21 16:33:48 - ros学习一
源代码(源代码都在树莓派操作系统中) python源代码:/home/rikirobot/catkin_ws/src/clbrobot_project/clbrobot/scriptC语言源代码/home/rikirobot/catkin_ws/src/clbrobot_project/clbrobot/src/home/rikirobot/catkin_ws/src/clbrobot_pro…...
2024/4/20 14:21:36 - ROS 机器人学_1
ROS 机器人学「L1」Robot Anatomy & Fundamental Definitions1.1 robot anatomy 机器人解剖学mechanical joint:drive system 驱动系统:Speed and stability of robots:End effectors末端效应器:Mechanical grippers机械夹具&…...
2024/4/19 15:02:29 - Docker初识:可视化工具--轻量级图形页面管理Portainer
Linux系统:CentOS Linux release 7.4.1708 (Core) Docker版本: 17.03.0-ce, build 3a232c8 1、查询镜像 [rootwngpenghao ~]# docker search portainer/portainer NAME DESCRIPTION STARS OFFICIAL AUTOMATED [rootwngpenghao ~]# doc…...
2024/4/20 14:21:34 - nodejs模块node-sass在linux设备上如何编译?--20190729
nodejs模块node-sass在linux设备上如何编译? –20190729 背景:Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。Node.js由Node.js基金会持有和维护,并与Linux基金会有合作关系。Node.js采用Google开发的…...
2024/4/20 14:21:34 - Psins代码解析之常用的子函数
1、insinit.m 惯导参数结构体初始化(SINS structure array initialization). % Prototype: ins insinit(avp0, ts, var1, var2) % Initialization usages(maybe one of the following methods): % ins insinit(avp0, ts); % ins insinit(avp0, ts, avperr); % …...
2024/4/21 16:33:47 - Gazebo機器人仿真學習探索筆記(六)工具和实用程序
Gazebo附带了许多工具和实用程序。 这些教程说明了这些可用的工具,以及如何使用它们。 主要有: 1 记录和播放 2 日志过滤 3 应用力/扭矩 4 HDF5数据集 官网介绍通俗具体,非常容易,请参考附件。附件--官方教程Logging and playback…...
2024/5/3 5:08:32 - 河南双眼皮哪里做得好
...
2024/4/21 16:33:45 - 杭州最好的合肥割双眼皮仔细韩美
...
2024/4/21 16:33:44 - ng-zorro 服务式创建模态框,做可复用表单
服务式创建模态框,做可复用表单一、需求&版本需求版本二、方法1.页面2.modal组件效果展示一、需求&版本 需求 创建服务式modal,其中是新建/编辑的表单组件可复用底部按钮在modal组件中,防止重复提交组件中确定后刷新页面列表关闭mo…...
2024/4/21 16:33:43 - vue 设置组件不重用_构建Vue组件以供重用
vue 设置组件不重用VueJS is an ultra-flexible front-end JavaScript framework for Single Page Applications, below is a small suggestion for how to structure pieces of your app to make them a little more manageable.VueJS是用于单页应用程序的超灵活的前端JavaScr…...
2024/4/21 16:33:43 - 杭州双眼皮手术价格图
...
2024/4/25 14:29:57 - 杭州双眼皮手术的医院哪家好
...
2024/4/21 16:33:41 - 杭州双眼皮手术的医院好
...
2024/4/21 16:33:39 - 组件管理工具Bit
对比Git你就知道Bit是什么了 ‘Bit loves Git’ 对,这是官方文档的原话。Git大家再熟悉不过了,世界上最先进的分布式版本控制系统,没有之一,‘近朱者赤’,大概这就是Bit喜欢Git的原因了。 开个玩笑,其实是…...
2024/5/2 7:22:05 - 为什么要做组件库?
1.背景介绍 前端组件化,这是一个概念,也是一种技术。那么为什么要实现前端组件化? 2.知识剖析 2.1、传统开发方式效率低以及维护成本高的主要原因在于很多时候是将一个系统做成了整块应用, 而且往往随着业务的增长或者变更&…...
2024/4/21 16:33:39
最新文章
- Vue 组件的三大组成部分
Vue 组件通常由三大组成部分构成:模板(Template)、脚本(Script)、样式(Style) 模板部分是组件的 HTML 结构,它定义了组件的外观和布局。Vue 使用基于 HTML 的模板语法来声明组件的模…...
2024/5/3 8:09:04 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 【嵌入式开发 Linux 常用命令系列 4.3 -- git add 不 add untracked file】
请阅读【嵌入式开发学习必备专栏 】 文章目录 git add 不add untracked file git add 不add untracked file 如果你想要Git在执行git add .时不添加未跟踪的文件(untracked files),你可以使用以下命令: git add -u这个命令只会加…...
2024/4/30 3:18:10 - 腾讯云容器与Serverless的融合:探索《2023技术实践精选集》中的创新实践
腾讯云容器与Serverless的融合:探索《2023技术实践精选集》中的创新实践 文章目录 腾讯云容器与Serverless的融合:探索《2023技术实践精选集》中的创新实践引言《2023腾讯云容器和函数计算技术实践精选集》整体评价特色亮点分析Serverless与Kubernetes的…...
2024/5/2 2:36:49 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/2 9:28:15 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/2 15:04:34 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57