精华内容
下载资源
问答
  • 机械臂控制

    2015-04-20 23:32:53
    二自由度的机器人机械臂控制,属于多变量控制系统,PD,PID等控制方法
  • 机械臂控制程序

    2018-09-11 22:42:38
    3自由度机械臂控制程序,程序对机械臂各个关节部分进行了相应的控制,
  • 机械臂控制程序,能够完成机械臂的3自由度的控制。
  • 描述ROS系统下,使用moveit和gazebo搭建UR机械臂控制的仿真环境,并使用C++编写一个节点来控制UR机械臂的移动ROS系统:kineticUR5机械臂电脑系统:Ubuntu16.04截图和运行效果gazebo的机械臂会先水平,然后依次移动到...

    描述

    ROS系统下,使用moveit和gazebo搭建UR机械臂控制的仿真环境,并使用C++编写一个节点来控制UR机械臂的移动

    ROS系统:kinetic

    UR5机械臂

    电脑系统:Ubuntu16.04

    截图和运行效果

    gazebo的机械臂会先水平,然后依次移动到两个位置

    rviz中的机械臂移动和gazebo机械臂一致,但是会有一个透明效果的机械臂,沿着同样路径非常滞后的移动

    041d73eafc6f5a8d16cc525208b27883.png

    代码

    1. 特殊位置移动(Moveit中默认的位置)

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    int main(int argc, char **argv)

    {

    ros::init(argc, argv, "demo"); //初始化

    ros::AsyncSpinner spinner(1); //多线程

    spinner.start(); //开启新的线程

    moveit::planning_interface::MoveGroupInterface arm("manipulator");//初始化需要使用move group控制的机械臂中的arm group

    arm.setGoalJointTolerance(0.001); //允许误差

    arm.setMaxAccelerationScalingFactor(0.2); //允许的最大速度和加速度

    arm.setMaxVelocityScalingFactor(0.2);

    arm.setNamedTarget("home"); // 控制机械臂移动到水平(躺下)

    arm.move();

    sleep(1);

    arm.setNamedTarget("up"); //控制机械臂到达竖直位置(竖立)

    arm.move();

    sleep(1);

    ros::shutdown();

    return 0;

    }

    2. 指定位置移动(欧氏空间的位置和四元数)

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    int main(int argc, char **argv)

    {

    ros::init(argc, argv, "demo");

    ros::AsyncSpinner spinner(1);

    spinner.start();

    moveit::planning_interface::MoveGroupInterface arm("manipulator");

    std::string end_effector_link = arm.getEndEffectorLink(); //获取终端link的名称

    std::cout<

    std::string reference_frame = "/world"; //设置目标位置所使用的参考坐标系

    arm.setPoseReferenceFrame(reference_frame);

    arm.allowReplanning(true); //当运动规划失败后,允许重新规划

    arm.setGoalJointTolerance(0.001);

    arm.setGoalPositionTolerance(0.001); //设置位置(单位:米)和姿态(单位:弧度)的允许误差

    arm.setGoalOrientationTolerance(0.01);

    arm.setMaxAccelerationScalingFactor(0.2); //设置允许的最大速度和加速度

    arm.setMaxVelocityScalingFactor(0.2);

    geometry_msgs::Pose now_pose = arm.getCurrentPose(end_effector_link).pose;

    std::cout<

    std::cout<

    <

    arm.setNamedTarget("home");// 控制机械臂先回到初始化位置

    arm.move();

    sleep(1);

    std::vector<:pose> waypoints;

    geometry_msgs::Pose pose1;

    pose1.position.x = 0.712759;

    pose1.position.y = 0.20212;

    pose1.position.z = 1.16729;

    pose1.orientation.x = 0.70717;

    pose1.orientation.y = 0.707044;

    pose1.orientation.z = 1.42317e-05;

    pose1.orientation.w = 7.09771e-05;

    waypoints.push_back(pose1);

    geometry_msgs::Pose pose2;

    pose2.position.x = 0.250989;

    pose2.position.y = 0.578917;

    pose2.position.z = 1.3212;

    pose2.orientation.x = 0.707055;

    pose2.orientation.y = 0.707159;

    pose2.orientation.z = 4.39101e-05;

    pose2.orientation.w = 8.60218e-05;

    waypoints.push_back(pose2);

    // 笛卡尔空间下的路径规划

    moveit_msgs::RobotTrajectory trajectory;

    const double jump_threshold = 0.0;

    const double eef_step = 0.002;

    double fraction = 0.0;

    int maxtries = 100; //最大尝试规划次数

    int attempts = 0; //已经尝试规划次数

    while(fraction < 1.0 && attempts < maxtries)

    {

    fraction = arm.computeCartesianPath(waypoints, eef_step, jump_threshold, trajectory);

    attempts++;

    if(attempts % 10 == 0)

    ROS_INFO("Still trying after %d attempts...", attempts);

    }

    if(fraction == 1)

    {

    ROS_INFO("Path computed successfully. Moving the arm.");

    // 生成机械臂的运动规划数据

    moveit::planning_interface::MoveGroupInterface::Plan plan;

    plan.trajectory_ = trajectory;

    // 执行运动

    arm.execute(plan);

    sleep(1);

    }

    else

    {

    ROS_INFO("Path planning failed with only %0.6f success after %d attempts.", fraction, maxtries);

    }

    ros::shutdown();

    return 0;

    }

    3. CMakeLists.txt

    cmake_minimum_required(VERSION 3.0.2)

    project(UR5_control)

    add_compile_options(-std=c++11)

    find_package(catkin REQUIRED COMPONENTS

    roscpp

    rospy

    std_msgs

    moveit_ros_planning_interface

    )

    find_package(Boost REQUIRED COMPONENTS system)

    include_directories(

    ${catkin_INCLUDE_DIRS}

    ${Boost_INCLUDE_DIRS}

    )

    add_executable(UR5_control_node src/UR5_control.cpp)

    target_link_libraries(UR5_control_node ${catkin_LIBRARIES})

    代码中你需要更改的地方

    位姿点geometry_msgs::Pose pose

    你可以在rviz界面,使用interactiveMarkers来拖动UR机械臂,可以把它拖动到任何一个位置,然后点击按钮Plan and Execute。这时rviz和gazebo中的机械臂会发生实际移动。

    这时你可以再次运行以上程序,程序会把启动时的位姿打印出来,你照抄在代码中即可一些你需要自己设置的参数以“”括起来的字符串们问题及解决方案

    1. 路径规划失败

    执行这句话fraction = arm.computeCartesianPath(waypoints, eef_step, jump_threshold, trajectory);时,fraction返回的结果是0,代表机械臂路径规划失败,fraction返回的结果是1,代表机械臂路径规划成功

    我一直返回的结果就是0,也就是路径规划失败。

    排查了一下,最终确认是编译过程中缺少了一个依赖包

    解决方案

    CMakeLists.txt文件更改

    在原基础上添加了一个包moveit_ros_planning_interface

    find_package(catkin REQUIRED COMPONENTS

    roscpp

    rospy

    std_msgs

    moveit_ros_planning_interface

    )

    2. Gazebo中的机械臂不动

    之前我的代码并不是以上贴出来的样子,比正确的代码多了以下这句错误的话

    geometry_msgs::Pose now_pose = arm.getCurrentPose(end_effector_link).pose;

    waypoint.push_back(now_pose) // 错误的话,不要添加

    多了以上这句话出现的问题就是,在执行arm.execute(plan);这句话的时候,报了如下的错误

    [ INFO] [1601195859.013775369, 913.641000000]: ABORTED: Solution found but controller failed during execution

    实际表现是:

    moveit里的机械臂动了,但是动起来是透明的效果,实体机械臂位置没有更新,gazebo里的机械臂不动。以下这张照片,中间那个机械臂就是我所说的透明的效果,图和文字没关系

    6ead5b832814597d225631b5472bb4ee.png

    问题排查过程

    我一直以为,是rviz中的机械臂位置问题,如图

    7f8035ddb952f72c060f2f5c797c8cce.png

    最开始执行代码的时候,机械臂的位置一直是"home"位置,在rviz上可以看到,机械臂的末端是处在水平面位置的,也就是可能存在和水平面的碰撞。执行代码时,rviz机械臂会以透明的效果肉眼可见的范围动一下,gazebo机械臂不动。这让我觉得是rviz认为与地面存在碰撞,而运动失败。

    因此我进入了ur5_robot.urdf.xacro文件(请你前往你对应的机械臂描述文件),更改了机械臂的起始位姿。示例

    改为了,这样改变的效果是,机械臂在z方向上上升了1m,也就悬在了空中,这里不做截图展示。

    问题没有得到解决。

    解决方案

    根据我的另外一篇文章ROS下查看rviz中的机械臂位姿,我查阅了机械臂的位姿,突然发现查阅位姿这个命令的终端使用黄色字体提示了这样一句话

    [ WARN] [1601210755.347884455, 0.800000000]: goalConnectCallback: Trying to add [/move_group] to goalSubscribers, but it is already in the goalSubscribers list

    [ WARN] [1601210755.348000765, 0.800000000]: cancelConnectCallback: Trying to add [/move_group] to cancelSubscribers, but it is already in the cancelSubscribers list

    我开始怀疑是路径规划本身的问题。

    专业的讲,使用moveit能够控制机械臂运动,没有任何道理使用代码不能让机械臂运动。因此虽然代码提示规划成功,运动失败,我仍然怀疑规划出的路径并不能让机械臂成功移动。

    我做了一次大胆的尝试,删除了waypoints中的第一个点,也就是当前位置的push_back。这一次成功运动了,可以运行的整段代码就在上面

    后记

    是stackflow上都有人说,要在waypoint中加入当前位置,我的参考书中隐隐约约也是这样写的。我现在懒得去真正落实这个问题了,出现这次调试有三个可能

    那些要在waypoint中加入当前位置的,是python接口,很多人直接照搬了

    moveit代码版本升级的变化

    很多人互相在抄,没有跑一跑就把代码搞出来了这一次成功运动了,可以运行的整段代码就在上面

    展开全文
  • CAN总线分布技术是一种总线通信技术,CAN总线分布式机械臂控制系统由主控制器接收操作者控制信息,具有数据采集和控制系统的功能,介绍了CAN总线分布式机械臂控制系统结构,控制多关节机械臂运动,在信息通信中设定节点ID...
  • 通过基于MATLAB串口通讯的机械臂控制程序,可以利用MATLAB GUI与arduino对机械臂进行控制,同时可以使机械臂自动操作,对物块颜色识别,并进行分类挑拣
  • 柔性关节机械臂控制策略的研究_刘业超(哈工大);柔性关节机械臂控制策略的研究_刘业超(哈工大)
  • 基于单片机的机械手臂控制系统设计
  • Labview实现三维机械臂控制系统,
  • 设计机械臂控制 系统 的硬件框架 , 包括微处理器系 统 电 路和传 感器模块 电   路 设计 、 通讯总线与各元器件 的选型 。 编 写机械臂控制 软件 , 包括 P ID 控制器 、 人机交   互软件和下位机角 度...
  • _空间柔性机械臂控制策略研究 设计了一种大型的空间六自由度机械臂,提出了需要完成的指标性的 作业任务,在对空间机械臂进行精度分析的基础上,针对具体的作业任务对机械 臂进行精度分配建立由柔性臂杆和柔性关节构成...
  • 利用PC机、图像采集卡、摄像头以及固高公司提供的GT-400-SV-PCI/ISA运动控制卡和GCT-400四自由度直角坐标机械臂,在LabVIEW环境下开发了视觉伺服机械臂控制系统的实验平台,该平台实现从工件图像采集到处理以及抓取的...
  • 针对这种情况,基于ARM微处理器设计一个焊接机械臂控制系统,利用各模块的功能接口,实现对机械臂的控制功能。介绍了以ARM微处理器芯片STM32F103为核心的焊接机械臂的结构及其特点,采用角度传感器实时检测机械臂的位置,...
  • 基于ARM的自动镀膜机械臂控制系统设计
  • 为了提高机械臂控制系统的性能,使其在运行中动作可控、速度稳定、位置精确,本文针对数据采集模块进行研究。本数据采集模块以TI公司的DSP(TMS320F28016)为控制芯片,使用RS232和CAN总线双通信总线实现数据采集和...
  • 基于89C51单片机实现的注塑机机械臂控制系统
  • UR5机械臂控制程序

    2020-12-03 09:40:17
    通过软件连接UR5机械臂(网络连接机械臂,设置好机械臂IP),可控制上电,启动,关闭,可以设置需要移动到的位置点,基于基座的坐标移动,获取当前位姿,可以自己定义发送的脚本命令
  • ur机械臂 控制器TrustZone is different from that of a separate physical security co-processor (like a TPM or a secure element) with a pre-defined set of features. You can think of it as a ...

    ur机械臂 控制器

    TrustZone is different from that of a separate physical security co-processor (like a TPM or a secure element) with a pre-defined set of features. You can think of it as a virtualization technology for ARM CPUs i.e. it virtualizes a physical ARM CPU core — a TrustZone enabled ARMv8 core can exist in one of 2 states Secure OR Non-Secure. This, in turn, allows us to partition all system HW and SW resources so that they exist in 1 of the 2 worlds.

    TrustZone与具有一组预定义功能的单独的物理安全协处理器(例如TPM或安全元素)不同。 您可以将其视为用于ARM CPU的虚拟化技术,即它可以虚拟化物理ARM CPU内核-启用TrustZone的ARMv8内核可以以“ 安全”或“不安全”两种状态之一存在 反过来,这又使我们可以划分所有系统硬件和软件资源,以便它们存在于2个世界中的1个世界中。

    TrustZone for Armv8-M has been designed for ARM microcontrollers (Cortex-M). At a high level, this variant of TrustZone is similar to the variant in Arm Cortex-A processors i.e.

    用于Armv8-M的TrustZone已设计用于ARM微控制器(Cortex-M)。 从较高的角度来看,TrustZone的此变体与Arm Cortex-A处理器中的变体相似,即

    1. In both cases, secure and non-secure code runs on the same physical processor core.

      在这两种情况下,安全代码和非安全代码都在同一物理处理器内核上运行。
    2. Execution happens in a time sliced manner (Secure <-> Normal) with non-secure software blocked from accessing secure resources directly.

      执行以时间片方式(安全<->正常)进行,阻止了非安全软件直接访问安全资源。
    3. But there are differences between the 2 processor families

      但是2个处理器系列之间存在差异
    4. TrustZone in Cortex-M has been optimized for faster context switching and low power, keeping in mind real-time processing requirements of microcontrollers. To achieve this, Cortex-M excludes the monitor mode (of Cortex-A) and the need for any secure monitor software, reducing world switch latency. For bridging software between both worlds, TrustZone for Cortex-M instead relies on a few secure function entry points. Access to/from secure function entry points is controlled via a set of special instructions: SG, BXNS, BLXNS

      Cortex-M中的TrustZone已针对快速上下文切换和低功耗进行了优化,同时考虑了微控制器的实时处理要求。 为此,Cortex-M不包括(Cortex-A的)监视模式,也不需要任何安全的监视软件,从而减少了世界切换延迟。 为了在两个世界之间架起桥梁,TrustZone for Cortex-M依赖于一些安全功能入口点。 通过一组特殊指令来控制对安全功能入口点的访问/访问:SG,BXNS,BLXNS
    Image for post
    TrustZone-M processor specific instructions for context switching
    用于上下文切换的TrustZone-M处理器特定指令

    ** TrustZone for Cortex-A processors specifies a separate processor mode called monitor mode for running a ‘secure monitor handler’ (a piece of software running in the secure world that mediates all access between worlds) as the sole entry point.

    **用于Cortex-A处理器的TrustZone指定了一个单独的处理器模式,称为监视模式,以运行“安全监视器处理程序”(在安全世界中运行的软件,可在世界之间进行所有访问)作为唯一入口点。

    它是如何工作的? (How does it work?)

    After a power on or reset, an Armv8-M system begins executing code in the `secure state`. This usually involves secure booting of the system along with some level of system initialization. In a TrustZone enabled system/MCU, the system needs to perform additional initialization — a few configuration routines are used to divide the system’s entire memory-map into non-overlapping secure, non-secure and non-secure-callable regions. The result is a ‘security attribution map’ (for the entire system).

    上电或重置后,Armv8-M系统开始以“安全状态”执行代码。 这通常涉及系统的安全启动以及某些级别的系统初始化。 在启用了TrustZone的系统/ MCU中,系统需要执行其他初始化-使用一些配置例程将系统的整个内存映射划分为非重叠的安全,非安全和非安全可调用区域。 结果是一个“安全归因图”(针对整个系统)。

    Image for post

    Configuration of `memory security attributes` is done via 2 HW blocks called `security attribution unit` (SAU) and/or ‘implementation defined attribution unit` (IDAU).

    内存安全属性的配置是通过2个硬件模块完成的,分别称为“安全属性单元”(SAU)和/或“实现定义属性单元”(IDAU)。

    1. Implementation Defined Attribution Unit (IDAU), which is a fixed hardware unit external to the processor core that provides a fixed security status of the memory map as defined by the manufacturer. (i.e. an immutable background attribution map implemented by the vendor in hardware for their specific chip.)

      实施定义的属性单元(IDAU),它是处理器核心外部的固定硬件单元,可提供制造商定义的内存映射图的固定安全状态。 (即,卖方针对特定芯片在硬件中实现的不变背景归因图。)
    2. Secure Attribution Unit (SAU), which is a programmable unit integrated in the processor core used to define the security status of up to eight memory regions. Note — SAU’s registers can be set to configure non-secure memory, peripheral and interrupt access.

      安全归因单元(SAU)是集成在处理器内核中的可编程单元,用于定义多达八个内存区域的安全状态。 注—可以设置SAU的寄存器来配置非安全存储器,外设和中断访问。
    Image for post

    Key-point to remember: Security is defined by address i.e. memory security attributes are really what define security states of the processor.

    要记住的要点:安全性由地址定义,即内存安全性属性实际上是定义处理器安全性状态的条件。

    Image for post
    Code executing in ‘Non-Secure’ state cannot access the secure memory map. But secure code can access both secure and non-secure memory. As some peripherals are duplicated (MPU, SCB, SysTick), HW uses an aliased secure memory map to shift them by an offset (say 0x20000) when executing in the secure state.
    在“非安全”状态下执行的代码无法访问安全内存映射。 但是安全代码可以访问安全和非安全内存。 由于某些外设是重复的(MPU,SCB,SysTick),因此在安全状态下执行时,硬件使用别名安全存储器映射将其偏移一个偏移量(例如0x20000)。

    After assigning ‘security attributes’ to system memory, every memory access by the processor, whether it’s a memory read, write or execute is tested for its `memory security attributes` (i.e. is it a secure or non-secure address). SAU and IDAU work together to enforce memory access restrictions at runtime. Note — While the IDAU and SAU directly enforce secure and non-secure access restrictions, they work with secure and non-secure memory protection units (MPUs) to determine the access rights associated with the target resource.

    在为系统内存分配“安全属性”之后,处理器对每个内存访问的访问(无论是读,写还是执行)都会对其“内存安全属性”(即,它是安全地址还是非安全地址)进行测试。 SAU和IDAU共同努力在运行时强制执行内存访问限制 。 注—尽管IDAU和SAU直接实施安全和非安全访问限制,但它们与安全和非安全内存保护单元(MPU)一起确定与目标资源关联的访问权限。

    Image for post
    SAU + IDAU + MPU together enforce privilege and security levels.
    SAU + IDAU + MPU共同执行特权和安全级别。

    The IDAU, SAU, and MPU features of these processors provide a flexible foundation for protecting runtime execution of both system software and applications, but these capabilities are limited to the processor itself.

    这些处理器的IDAU,SAU和MPU功能为保护系统软件和应用程序的运行时执行提供了灵活的基础,但是这些功能仅限于处理器本身。

    1. In order to carry `the secure and privilege capabilities` over to other memory systems and interfaces, we use logic present in system’s bus (AMBA AHB 5/APB4) fabric i.e. the privilege attribute (HPRIV) and secure attribute (HNONSEC) are carried across the internal Advanced High-performance Bus (AHB) matrix to reach memory protection checkers (MPCs), peripheral protection checkers (PPCs), and master security wrappers (MSWs) for other bus masters.

      为了将“安全和特权功能”传递到其他内存系统和接口,我们使用系统总线(AMBA AHB 5 / APB4)结构中存在的逻辑,即,特权属性(HPRIV)和安全属性(HNONSEC)相互传递内部高级高性能总线(AHB)矩阵可以访问其他总线主控器的内存保护检查器(MPC),外围保护检查器(PPC)和主安全包装器(MSW)。
    2. In other words, the core’s security state information propagates via hardware logic present in the TrustZone-enabled AMBA AHB5 / APB4 bus fabric (an extra signal (HNONSEC[1] = 0) on the AHB bus indicates a secure transaction and vice versa).

      换句话说,内核的安全状态信息通过启用TrustZone的AMBA AHB5 / APB4总线结构中存在的硬件逻辑传播(AHB总线上的额外信号(HNONSEC [1] = 0)表示安全交易,反之亦然)。
    3. This allows extending security to memories and peripherals through bus filters also known as TrustZone-aware peripherals which are directly connected to AHB — MPCs, PPCs, AHB/APB bridge (used as secure gate to block or propagate secure/non-secure transaction towards APB agents).

      这样可以通过直接连接到AHB-MPC,PPC,AHB / APB桥(用作安全门来阻止或向APB传播安全/非安全事务的安全门)的总线过滤器(也称为TrustZone感知外围设备)将安全性扩展到内存和外围设备。代理商)。
    4. Ensuring that no secure world resources can be accessed by the non-secure world components, enabling a strong security perimeter to be built between the 2.

      确保非安全世界组件无法访问任何安全世界资源,从而在2个之间建立强大的安全边界。
    Image for post
    Simplified View of TrustZone-M
    TrustZone-M的简化视图

    开发人员工作流程: (Developer Workflow:)

    Every TrustZone implementation will have 2 separate projects

    每个TrustZone实施将有2个独立的项目

    1. One for the secure world and

      一个为了安全的世界
    2. The other for the non-secure world

      另一个针对不安全的世界
    • After power on or reset, code from the secure project runs first i.e. the processor core is executing in the ‘secure state’.

      上电或重置后,安全项目中的代码将首先运行,即处理器内核正在“安全状态”下执行。
    • While in this state, configuration routines in the secure code project (either hand written or generated via built-in IDE tools) configure regions of memory to either be non-secure or non-secure callable. No need to explicitly attribute a ‘secure’ tag to a region of memory. Everything’s secure by default.

      在这种状态下,安全代码项目中的配置例程(通过手写或通过内置IDE工具生成或配置)将内存区域配置为非安全或非安全可调用的。 无需将“安全”标签显式地分配给内存区域。 默认情况下,所有内容都是安全的。

    • As secure and non-secure projects are (pretty much) independent of each other, we must provide a way for code in one project to call code in the other. 2 compiler attributes are provided to achieve this -

      由于安全项目和非安全项目之间(几乎)是彼此独立的,因此我们必须为一个项目中的代码提供一种在另一个项目中调用代码的方式。 提供2个编译器属性来实现此目的-

    (cmse_nonsecure_ entry): Functions in the secure world are decorated with this attribute to indicate that it is an entry point for non-secure calls.

    (cmse_nonsecure_ entry)安全世界中的函数都使用此属性修饰,以指示它是非安全调用的入口点。

    (cmse_ nonsecure_call): Functions or rather function pointers in the secure world are decorated with this attribute to indicate that the secure world wants to call into the non-secure world.

    (cmse_ nonsecure_cal l): 安全世界中的函数或函数指针装饰有此属性,以指示安全世界要调用非安全世界。

    Image for post

    Linking the secure and non-secure project:

    链接安全和非安全项目:

    • Any function (in the secure world) decorated with the above compiler attributes will be exported to an object file upon building the secure project. (Usually the object file is named PROJECTNAME_CMSE_lib.o)

      在构建安全项目时,用上述编译器属性修饰的任何函数(在安全领域中)都将导出到目标文件。 (通常,目标文件名为PROJECTNAME_CMSE_lib.o)
    • The non-secure project will use this object file and a `veneer_table.h` header file in its build process

      非安全项目将在其构建过程中使用此目标文件和`veneer_table.h`头文件

    总而言之,我们需要以下补充(硬件+软件) 才能完全支持TrustZone-M: (In summary, we’ll need the following additions (HW +SW) to fully support TrustZone-M:)

    1. 2 new HW blocks or on-chip peripherals called memory attribution units — SAU and IDAU (optional)

      2个新的硬件模块或片上外围设备,称为内存属性单元-SAU和IDAU(可选)

    2. TrustZone-aware peripherals (or controllers) to extend security to memories, peripherals and other bus masters.

      支持TrustZone的外围设备 (或控制器)将安全性扩展到内存,外围设备和其他总线主控器。

    3. System bus AHB5/ABP4. The AHB protocol up to AMBA4 does not support security attribute (HNONSEC) signal.

      系统总线AHB5 / ABP4 。 高达AMBA4的AHB协议不支持安全属性(HNONSEC)信号。

    4. 3 new instructions — SG, BLXNS, BXNS and 2 Interrupt vector tables

      3条新指令— SG,BLXNS,BXNS和2个中断向量表

    Additionally, there are duplicated CPU peripherals (one for each world via register banking):

    此外,还有重复的CPU外设(通过寄存器组用于每个世界一个):

    1. 2 Memory Protection Units

      2个内存保护单元
    2. 2 System Control Blocks

      2个系统控制块
    3. 2 SysTick’s: Interrupts are routed to their respective sides.

      2 SysTick's:中断被路由到它们各自的一侧。

    关于中断处理的注意事项: (A note on Interrupt Handling:)

    The Nested Vectored Interrupt Controller (NVIC) is also extended for security as state transitions can also happen due to exceptions and interrupts.

    嵌套矢量中断控制器(NVIC)也进行了安全性扩展,因为由于异常和中断也可能发生状态转换。

    1. Each interrupt can be configured as Secure or Non-secure, and is determined by the Interrupt Target Non-secure (NVIC_ITNS) register, which is only programmable in the Secure world. There are no restrictions regarding whether a Non-secure or Secure interrupt can take place when the processor is running Non-secure or Secure code.

      每个中断都可以配置为安全或非安全中断,并且由中断目标非安全(NVIC_ITNS)寄存器确定,该寄存器只能在安全环境中进行编程。 当处理器运行“非安全”或“安全”代码时,是否发生非安全或安全中断没有任何限制。
    2. If the arriving exception or interrupt has the same state as the current processor state, then the exception sequence is similar to the previous M-series processors.

      如果到达的异常或中断具有与当前处理器状态相同的状态,则异常序列与以前的M系列处理器相似。
    3. The main difference occurs when a non-secure interrupt takes place and is handled by the processor during the execution of secure code. In this case, the processor automatically pushes all secure information onto the secure stack and erases the contents from the register banks — this mechanism avoids any leakage of information.

      主要区别发生在发生非安全中断并在安全代码执行期间由处理器处理时。 在这种情况下,处理器会自动将所有安全信息压入安全堆栈,并从寄存器组中擦除内容–这种机制可避免信息泄漏。

    **It is possible to deprioritize non-secure interrupts by setting the PRIS bit field of the Application Interrupt and Reset Control Register (AIRCR) or even avoid handling them while the secure software is running (through the PRIMASK_NS register).

    **可以通过设置应用程序中断和复位控制寄存器(AIRCR)的PRIS位字段来取消对非安全中断的优先级,甚至可以在安全软件运行时(通过PRIMASK_NS寄存器)避免处理它们。

    对TrustZone-M的Rust支持: (Rust Support for TrustZone-M:)

    1. For now, TrustZone-M is fully supported by a couple of semiconductor vendors (NXP’s LPCS55S69, Microchip’s SAML11, Nordic’s nRF9160, ST’s STM32L5) but all of them (only) offer ‘C’ toolchains for TZ related development.

      目前,TrustZone-M得到了两个半导体供应商的完全支持(NXP的LPCS55S69,Microchip的SAML11,Nordic的nRF9160,ST的STM32L5),但所有这些供应商(仅)都提供了与TZ相关的开发的“ C”工具链。
    2. In order to better realize the value that TrustZone has to offer, we could combine TrustZone’s HW-based security mechanisms and Rust’s memory safety guarantees to create more secure runtime environments (or Trusted Execution Environments). As an example, think of a scenario where we could host ‘Rusty drivers for secure elements or TPMs’ in the secure world. In theory, we could write memory-safe drivers for security-sensitive applications (assuming no unsafe code is used or formal proofs for the unsafe part of your code exist.)

      为了更好地实现TrustZone必须提供的价值,我们可以结合使用TrustZone的基于硬件的安全机制和Rust的内存安全保证来创建更安全的运行时环境(或Trusted Execution Environments)。 例如,考虑一个场景,我们可以在安全世界中托管“用于安全元素或TPM的Rusty驱动程序”。 从理论上讲,我们可以为对安全敏感的应用程序编写内存安全的驱动程序(假定不使用任何不安全的代码,或者存在代码不安全部分的形式证明)。
    3. Rust’s open-source community is working on adding support for the 2 compiler attributes to the Rust compiler and support for new hardware peripherals via additions to the ‘cortex-m’ crate. You can find the first pull request for (cmse_nonsecure_entry) here — https://github.com/rust-lang/rust/pull/75810.

      Rust的开源社区正在努力为Rust编译器添加对2个编译器属性的支持,并通过在'cortex-m'板条箱中添加内容来支持新的硬件外围设备。 您可以在这里找到(cmse_nonsecure_entry)的第一个拉取请求— https://github.com/rust-lang/rust/pull/75810

    翻译自: https://medium.com/swlh/demystifying-arm-trustzone-for-microcontrollers-and-a-note-on-rust-support-54efc62c290

    ur机械臂 控制器

    展开全文
  • 舵机机械臂控制 例如:第一章 Python 机器学习入门之pandas的使用 1、单片机控制舵机舵机机械臂控制原理一、舵机供电电压和电流二、使用步骤1.引入库2.读入数据总结 原理 舵机不需要额外的驱动电路,只需要通过...

    舵机机械臂控制

    例如:第一章 Python 机器学习入门之pandas的使用


    原理

    舵机不需要额外的驱动电路,只需要通过单片机pwm输出引脚即可


    一、舵机供电电压和电流

    常规情况下厂商只提供舵机的电压,电流一般是根据负载决定;

    二、使用步骤

    1.引入库

    代码如下(示例):

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    import warnings
    warnings.filterwarnings('ignore')
    import  ssl
    ssl._create_default_https_context = ssl._create_unverified_context
    

    2.读入数据

    代码如下(示例):

    data = pd.read_csv(
        'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
    print(data.head())
    

    该处使用的url网络请求的数据。


    总结

    提示:这里对文章进行总结:
    例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

    展开全文
  • 本讲义为古月居大神在深蓝学院授课时用的PPT讲义,讲解了机械臂控制的基础,包括Moveit系统架构,编程基础,以及gazebo机械臂仿真等等
  • 机械臂控制器IO电压测试 1.准备 1.1机械臂控制器型号确定 实验室机械臂控制器是标准型,IO类型是NPN型。 1.2 Mini IO 说明 用于确定测试用的IO端口号。 1.3 Mini IO电源设置 控制器Mini IO默认为外部...

    机械臂控制器IO电压测试

    1.准备

    1.1机械臂控制器型号确定

    实验室机械臂控制器是标准型,IO类型是NPN型。

    1.2 Mini IO 说明

    用于确定测试用的IO端口号。

    1.3 Mini IO电源设置

    控制器Mini IO默认为外部电源,在此不做改变。

    1.4 外部电源接线

    1.5 实验工具

    外部电源(24DC)、万用表、接线端子(2个)。

    2.实验目的

    确定Mini IO输出端电压大小,以便与Arduino控制器串口连接(串口允许电压3.3V)。

    3.实验步骤

    1)按照1.2Mini IO说明,找到外部电源(24DC)接线,以及0V接线。通过接线端子将Mini IO线引出,以便与24V DC电源连接。

    2)安照1.4 外部电源接线图接线。

    3)打开Wincaps3 通过网线(交叉网线)连接控制器,启用在线(监视)功能,通过IO设置功能设置控制器Mini IO的ON和OFF。

    4)使用万用表测试对应IO输出电压。

    4.遇到的问题

    按照上述方式在测试IO电压的时候,不管将IO ON还是OFF,万用表测试的电压值不变(始终为16V)。这与预期的效果不符(预期效果:ON是小于24V的电压值,OFF为0V)。

    5.尝试的解决方法

    1)怀疑是IO线有问题

    按照1.2中的Mini IO说明,将输出和输入对应的IO线全部找出,依次进行尝试,问题仍然存在。

    2)检查电路

    万用表测试电压16.1V。

    万用表测试电压7.9V。

    两端压差和为24V,说明两端的供电没有问题。

    3)回忆起修控制器时,将暂时未用保险丝更换了,烧坏的保险丝。

    查看F6保险丝作用。

    F6保险丝确实是通用输出用。更换新的保险丝,重新测试。IO 置于ON时10V,置于OFF时0V。满足实验的预期效果,达到实验目的。

    展开全文
  • PSX_PS2游戏手柄机械臂控制说明书
  • 六自由度机械臂控制系统设计与运动学仿真
  • 本文是针对一个实际的机械臂控制的,而且这个机械臂很便宜,即使是平民玩家也玩得起。 在前面两章,我们介绍了对机械手臂的开环控制,主要是让初学者明白一些简单的东西。 第一章,根据小强给的少的可怜的教程简单...
  • 机械臂轨迹规划matlab代码
  • ROS理论与实践_7.Moveit!机械臂控制_代码
  • 具有增强现实反馈的基于闭环混合注视脑机接口的机械臂控制
  • 一、制作小强LOBOT机械臂的URDF文件 小强机械臂自称是6自由度机械臂,但是该机械臂其实只能算是五自由度,因为最上面的一个自由度是控制机械爪的。 所以,为了 简化操作,我把最后一个爪子换成了一个圆柱。 关于该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,594
精华内容 1,037
关键字:

机械臂控制