机器人学习必看系列:如何使用moveit控制真实机械臂?

2023-05-16

大家好,我是你们可爱的小鱼。最近关于moveit相关的问题感觉非常多,毕竟机械臂+视觉的应用的确是非常的火爆,小鱼都想直接开课教机械臂运动规划相关的了。

有的同学问小鱼,怎么使用moveit控制真实机械臂呢?小鱼对这个还是非常有经验的,小鱼曾经从silidworkds模型开始,使用moveit完成对真实机械臂的运动规划。想要了解怎么做的,可以关注小鱼。小鱼准备从solidworks模型导出urdf开始,给大家讲解一下基于moveit的机器人建模、机械臂仿真等,请大家持续关注。

如果想要获取本文中小鱼测试使用源码的,可以关注工众号,后台回复moveit即可。

一、开始之前搞清楚几个问题?

1.MoveIt为什么不能直接控制真实机械臂?

原因是真实机械臂的类型实在是太多了,今天你做一个机械臂,明天他做个机械臂.Moveit只是一个机械臂运动规划的框架,并不负责驱动真实的机械臂。

2.Moveit通过什么控制机械臂?

moveit既然不能直接驱动机械臂,那么必须通过一个媒介来控制它,这个媒介就是我们今天的重点——轨迹执行器

二、Moveit如何控制rviz和gazebo中虚拟机械臂的?

细心的同学可能已经发现了,moveit每次启动都会加载xx_controller的东西,如果在运行moveit的时候使用

rostopic list

就会看到有一个这样的话题

/execute_trajectory/cancel/execute_trajectory/feedback/execute_trajectory/goal/execute_trajectory/result/execute_trajectory/status

如果是用的gazebo可能会名字不一样,但都是相同的前缀,后面都是挂着cancel、feedback、goal、result、status这五个。

这个话题就是轨迹执行服务所订阅的话题,这个轨迹执行者是谁,谁就要提供这五个话题服务(其实这个不是普通的topic,而是ros中的Action通信机制)。

1. 我们可以使用下面的命令来查一查,话题发布者和订阅者分别是谁?

rostopic info /execute_trajectory/goalType: moveit_msgs/ExecuteTrajectoryActionGoalPublishers:  * /rviz_monster_4900_3400225440813710105 (http://monster:33953/)Subscribers:  * /move_group (http://monster:34519/)

大家可以跟着小鱼一起尝试哈,大家没有看错,这个话题就是连接moveit和rviz的,好家伙,到这里,moveit和rviz之间的不正当关系终于被机智的我们发现了。

2. moveit如何控制gazebo中的机械臂呢?

很多教程告诉大家,首先要demo.launch中的fake_executionfasle;

  <include file="$(find ur5_moveit_config)/launch/move_group.launch">    <arg name="allow_trajectory_execution" value="true"/>      <arg name="fake_execution" value="true"/>    <arg name="info" value="true"/>    <arg name="debug" value="$(arg debug)"/>  </include>

这句话是啥意思呢,其实就是告诉rviz我不要你来帮我控制rviz中虚拟的机械臂了,我在外面已经有人了,不需要你了!

那rviz就伤心了,就算你不要我(执行)了,那你总要告诉那个人(gazebo)的(执行)情况,也就是告诉rviz当前机械臂的关节角度,毕竟还要原配,要执行moveit指令的。

3. gazebo和moveit到底谁爱上了谁?

所以接下来我们运行一下gazebo,看一看gazebo到底拿了什么好处从moveit那里,然后又给了什么东西给moveit。

讲true改成false后,不运行gazebo,直接运行moveit,你就会发现,moveit的启动加载指令中会出现这样一个WARN和ERROR:

[ WARN] [1626355641.007776896, 8.232000000]: Waiting for /follow_joint_trajectory to come up
[ WARN] [1626355647.034715552, 14.232000000]: Waiting for /follow_joint_trajectory to come up
[ERROR] [1626355653.060493182, 20.233000000]: Action client not connected: /follow_joint_trajectory
[ INFO] [1626355653.085575856, 20.258000000]: Returned 0 controllers in list

如果运行gazebo,再启动moveit就变成了下面的INFO了

[ INFO] [1626355494.355057943, 322.100000000]: Added FollowJointTrajectory controller for 
[ INFO] [1626355494.355212191, 322.100000000]: Returned 1 controllers in list

就像是小蝌蚪找妈妈一样,moveit一启动就会找对应名字的Action Server,一旦找到就会将其加载起来,留着后面调用。

而gazebo向外提供什么东西呢?

![数据流图](01 Moveit如何控制真实机械臂?.assets/image-20210715221757439-1626358679296.png)

我们再次使用

rostopic list

查看一下话题列表,就会发现多了这个,这个其实是gazebo和moveit的move_group的通信组件。

rostopic list/arm_controller/follow_joint_trajectory/cancel/arm_controller/follow_joint_trajectory/feedback/arm_controller/follow_joint_trajectory/goal/arm_controller/follow_joint_trajectory/result/arm_controller/follow_joint_trajectory/status

再具体一些看下图就会明白,rqt_graph是这样的。gazebo订阅arm_controller的goal,发布joint_state话题就这样实现了仿真。

![rqt_graph](01 Moveit如何控制真实机械臂?.assets/image-20210715213207249.png)

4. moveit发送给gazebo的轨迹数据长啥样?

这个大家可以尝试一下,很简单,因为moveit会把自己的请求内容通过一个话题给暴露出来,这个话题就是:

/move_group/display_planned_path

使用

rostopic echo /move_group/display_planned_path

然后随便点击一下rviz中的plan和execute,可以看到这个话题的打印

model_id: "ur5"
trajectory: 
  - 
    joint_trajectory: 
      header: 
        seq: 0
        stamp: 
          secs: 0
          nsecs:         0
        frame_id: "world"
      joint_names: 
        - shoulder_pan_joint
        - shoulder_lift_joint
        - elbow_joint
        - wrist_1_joint
        - wrist_2_joint
        - wrist_3_joint
      points: 
        - 
          positions: [-0.0005475973198105777, 0.01301509545699897, -4.790678318222774e-05, 0.0006401223916085996, -1.1133751010916626e-05, 5.540891806798953e-05]
          velocities: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
          accelerations: [4.964547491296066e-06, 0.0, 0.0, 0.0, 0.0, 0.0]
          effort: []
          time_from_start: 
            secs: 0
            nsecs:         0
        - 
          positions: [-0.0005122762372628266, 0.012990523657837615, -6.632561628428418e-05, 0.0006650964481281676, 2.001062241064062e-05, -0.6034930544710522]
          velocities: [9.363578155606405e-06, -6.513955555019406e-06, -4.882811364940933e-06, 6.620593515710222e-06, 8.256337394129777e-06, -0.16000000000000003]
          accelerations: [-3.5927592836451216e-21, 0.0, -8.981898209112804e-22, 0.0, 0.0, 0.0]
          effort: []
          time_from_start: 
            secs: 3
            nsecs: 772177896
        - 
          positions: [-0.0004769551547150755, 0.012965951858676258, -8.474444938634064e-05, 0.0006900705046477356, 5.1154995832197863e-05, -1.2070415178601723]
          velocities: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
          accelerations: [-4.964547491296059e-06, 3.4536841762486802e-06, 2.588855297563277e-06, -3.5102233764803286e-06, -4.377490999290573e-06, 0.08483163011052242]
          effort: []
          time_from_start: 
            secs: 7
            nsecs: 544355792
    multi_dof_joint_trajectory: 
      header: 
        seq: 0
        stamp: 
          secs: 0
          nsecs:         0
        frame_id: ''
      joint_names: []
      points: []
trajectory_start: 
  joint_state: 
    header: 
      seq: 0
      stamp: 
        secs: 0
        nsecs:         0
      frame_id: "world"
    name: 
      - shoulder_pan_joint
      - shoulder_lift_joint
      - elbow_joint
      - wrist_1_joint
      - wrist_2_joint
      - wrist_3_joint
    position: [-0.0005475973198105777, 0.01301509545699897, -4.790678318222774e-05, 0.0006401223916085996, -1.1133751010916626e-05, 5.540891806798953e-05]
    velocity: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    effort: []
  multi_dof_joint_state: 
    header: 
      seq: 0
      stamp: 
        secs: 0
        nsecs:         0
      frame_id: "world"
    joint_names: []
    transforms: []
    twist: []
    wrench: []
  attached_collision_objects: []
  is_diff: False
---

这个数据其实是机械臂关节空间随时间变化的轨迹点,并且包含时间、速度、加速度信息。gazebo既然都可是使用那这个点该怎么用呢?请你继续往下看:

三、拿到数据,发给真实机械臂

上面说完了如何使用moveit控制虚拟的机械臂,并且也知道了moveit最终控制机械臂的数据长什么样子。

那我们想要控制真实机械臂是不是也就很简单了,我们只需要像gazebo一样,拿到启动一个action,拿到轨迹数据并反实时馈真实机械臂的位姿。

接下来我们一步步的开始。

1. 第一步就是拿到moveit的输出——轨迹数据

自定义Action的Server来拿到数据

上面说了,moveit启动的时候会自动加载对应名称的actionServer,所以如果我们自己写一个actionServer且名字和moveit要的那个保持相同,是不是moveit就会把我们当成执行器了。

我们使用Python来实现:

def on_goal(goal_handle):    global goal    goal_handle.set_accepted()    goal = goal_handle.get_goal()    goal = goal.trajectory.points    goal_handle.set_succeeded()def on_cancel(goal_handle):    goal_handle.set_aborted()    goal_handle.set_canceled()rospy.init_node('calculate_py', disable_signals=True)server = actionlib.ActionServer("jaka_controller/follow_joint_trajectory",FollowJointTrajectoryAction,on_goal,on_cancel,auto_start=False)

完成上面的代码,我们其实就能收到对应controller的轨迹数据了。

2. 第二步实时反馈机械臂的关节数据

这一点其实也很简单,无论大家机械臂是什么品牌的,只要能通过串口/网络等连接到我们的电脑,我们使用对应厂家的SDK即可读取机械臂关节角度数据。

读取到数据后,把它通过/joint_state话题发布出去即可。

我们这么做其实就是模仿gazebo,输入轨迹数据,输出实时的真实机械臂的关节数据。

3. 发给真实机械臂

这一步也是最需要注意的一步,因为可能涉及到不同厂家不同机械臂的不同功能。

想要控制真实机械臂之前,要确定真实的机械臂要什么数据,我们从moveit拿到的轨迹数据可以直接发给六个关节去执行吗?答案肯定是可以。但是你会发现,最终机器人执行的效果可能和你想象的不太一样(因为轨迹插值原因),这里小鱼总结一下。

可以将大家的机械臂分为三类:

3.1 第一类:大厂出的工业臂/协作臂

这类机械臂一般提供轨迹插值算法,可以直接讲moveit生成的关节角度随时间变化的信息通过这类机械臂的控制接口发送给它,这类机械臂会自动进行插值,然后执行。

比如AUBO的机械臂,可以通过起始点和路点和结束点来执行轨迹。

3.2 第二类:小厂出的用于教育类的机械臂

这类机械臂也有对应的操作SDK,只需要认真仔细的阅读它,确定它是否支持发轨迹进行执行,如果不行,那就走另外一条路,确定其电机的控制周期,对moveit生成的关节空间姿态数据 进行三次项或者五次项插值,如果不知道怎么做的,可以关注小鱼的微信公众号联系小鱼来帮忙,小鱼后面也会写如何进行关节和迪卡尔空间的轨迹插值算法。

3.3 第三类:自己diy的机械臂

这类机械臂小鱼在大学的时候做过,如果不考虑实时性,其实也比较简单,一般是直接写嵌入式程序驱动伺服电机即可。

小鱼大学时候用的是STM32驱动舵机进行的,大概是在大一的寒假,现在想象觉得很遥远了,不过还挺有意思的。

这类同学呢,小鱼给的建议是通过串口直接连接到电脑上,在电脑上用python写一个节点进行串口通信,来发指令给电机,同时这个节点接收moveit的控制数据,进行轨迹插值后然后执行即可,同时也要发布每个电机的角度哦

四、总结一下

洋洋洒洒的写了几千字,头昏脑胀的,如果对你有帮助,还请关注一下小鱼,你的关注是对小鱼最大的鼓励。

最后再推荐一波,如果大家想要进一步学习moveit,路径规划、碰撞检测、三维环境感知、ROS2等机器人技术的同学不妨关注一下小鱼的微信工众号鱼香ROS

作者介绍


我是小鱼,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚

初中学习编程,高中开始学习机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金)

目前在做公众号,输出机器人学习指南、论文注解、工作经验,欢迎大家关注小鱼,一起交流技术,学习机器人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器人学习必看系列:如何使用moveit控制真实机械臂? 的相关文章

  • 在emwin中,调用GUI_Delay()函数,程序卡死,黑屏

    没有OS TimeMS 43 1 可以在systick里或者定时器里 定时 43 1
  • STM32 堆栈大小的设置及分析

    一 通过map文件了解堆栈分配 STM32 MDK5 避免堆栈溢出 环境 xff1a STM32F103C8T6 MDK5 在最近的一个项目的开发中 xff0c 每当调用到一个函数 xff0c 程序就直接跑飞 debug跟进去看不出什么逻辑
  • C# VS2017中Windows窗体更改图标

    一 图片准备 1 需要 ICO格式的文件 2 矢量图下载可在阿里巴巴的矢量图库中下载 xff08 https www iconfont cn xff09 3 下载PNF文件的图片后需转成 ICO格式 xff08 https www uupo
  • 关于RS485的DMA发送,以及EN使能脚的自动切换

    一 电路设计 1 低成本非隔离 xff1a 3 3v系统同样 xff0c 将5V改为3 3即可 同时采用TX连接三极管 xff0c 实现三极管驱动RS485芯片的EN使能脚 xff0c 从而省下一个IO口控制 隔离只需要将两个信号线用光耦隔
  • 百度2014校园招聘笔试题(武汉站 9.28)

    一 简答题 xff08 本题共30分 xff09 动态链接库与静态链接库分别有什么优缺点 xff1f xff08 10分 xff09 轮训任务调度和抢占式任务调度有什么区别 xff1f xff08 10分 xff09 请列出数据库中常用的锁
  • c语言栈溢出的原因及解决办法_STM32编程:是时候深入理解栈了

    导读 从这篇文章开始 xff0c 将会不定期更新关于嵌入式C语言编程相关的个人认为比较重要的知识点 xff0c 或者踩过的坑 为什么要深入理解栈 xff1f 做C语言开发如果栈设置不合理或者使用不对 xff0c 栈就会溢出 xff0c 溢出
  • 时钟芯片DS1302异常

    异常现象 xff1a DS1302时间不走时 xff0c 秒位是一个大于60的错误数字 分析原因 xff1a DS1302受到干扰 xff0c 软件仿真发现DS1302的秒寄存器最高位被置为1 xff08 为时钟停止位 xff09 解决方法
  • STM32 下载调试口(JTAG+SWD)禁用及作为普通IO口

    1 RCC APB2PeriphClockCmd RCC APB2Periph AFIO ENABLE 开启AFIO时钟 2 GPIO PinRemapConfig GPIO Remap SWJ JTAGDisable ENABLE 改变指
  • 波特率的解析及转换为字节传输速率

    波特率115200 xff1d 115200 位 秒 以最普通的串口 xff08 起始位 43 8位数据 43 停止位 xff09 为例 xff1a 除以 10 xff0c 得到的是每秒字节数 xff1a 波特率115200 xff1d 1
  • 如何判断CAN总线空闲以及帧间隙,计算传输速率

    一 如何判断总线忙还是空闲呢 进入 正常模式之前 xff0c bxCAN 必须始终在 CAN 总线上实现 同步 为了进行同步 xff0c bxCAN 将等待 CAN 总线空闲 xff08 即 xff0c 已监测到CANRX 上的 11 个隐
  • STM32 DMA传输出错的防错机制

    一 DMA 中断 对于每个 DMA 数据流 xff0c 可在发生以下事件时产生中断 xff1a 达到半传输 xff08 每次传输都会触发 xff0c 属于正常触发 xff09 传输完成 传输错误 FIFO 错误 xff08 上溢 下溢或 F
  • IAR的View视图菜单中Watch、 Live Watch、 Quick Watch、 Auto、 Locals、 Statics这几个子菜单的含义和区别

    一 简述IAR的View视图菜单 View这个菜单的意思就是打开 xff08 已关闭的 xff09 视图窗口 xff0c 比如我们的工作空间窗口不见了 xff0c 就可以通过该菜单打开 不瞒大家 xff0c 以前我初学软件的时候 xff0c
  • DWA论文翻译

    摘要 本文介绍了一种能够令机器人进行自主避障的动态窗口法 xff08 dynamic window approach xff0c DWA xff09 该方法是从机器人的运动动力学直接推导出的 xff0c 因此特别适合在高速运动的机器人 与以
  • DWA仿真测试

    1 前言 由于之前已经对相关论文进行了翻译 xff0c 因此这里就不再对DWA的原理进行赘述 本文主要目的是根据相关的程序进一步强化对论文中所体现思想的理解 2 示例1 以下是使用python写的一个例子 xff0c 其中比较核心的是把搜索
  • TEB论文翻译

    摘要 传统的 elastic band 方法在规避障碍物的同时 xff0c 会根据距离最短的原则修正全局路径规划算法生成的路径 不过 elastic band 方法没有考虑到机器人的任何运动学约束 本文提出了一种称为 Time elasti
  • 求字符串中的最长回文子串

    方法一 xff08 暴力法 xff09 xff1a include lt stdio h gt include lt string h gt bool Palindrome const char str int start int end
  • 状态估计4(无迹卡尔曼滤波)

    1 简述 2 无迹卡尔曼滤波的思想 3 无迹卡尔曼滤波的核心公式 4 两个例子 34 34 34 Unscented kalman filter UKF localization sample author Atsushi Sakai 64
  • 积分曲线的绘制问题

    概述 事情突然 xff0c 我师姐让我帮她用maltab绘制一个函数的积分曲线 xff0c 如 xff0c 只是感觉满有意思的 xff0c 记录于此 xff01 1 示例 1 1 程序 coding utf 8 34 34 34 Creat
  • 并发与多线程3 (访问局部变量)

    1 例子 1 1 程序 include lt iostream gt include lt thread gt using namespace std struct func public func int amp i i i void o
  • 符号运算求解方程组

    概述 最近帮同事求解一个问题 xff0c 实在不想自己动手推导了 xff0c 就用python的符号运算自动计算了 xff0c 蛮有意思的 1 例子 1 1 程序 34 34 34 Created on Wed Jun 30 14 26 3

随机推荐

  • qtcreator+ClangFormat格式化代码

    1 前言 希望能够格式化代码 xff0c 令代码更加的整齐漂亮 2 设置 1 工具 选项 2 然后选择Beautifier General xff0c Tool选择ClangFormat 图1 General 3 点击ClangFormat
  • 状态估计1(贝叶斯滤波)

    在 概率机器人 中是这么定义 定位 xff0c 确定相对于给定地图环境的机器人位姿 xff0c 也经常被称为位置估计 不过现在这个定义明显被扩展了 xff0c 比如我们也希望知道在没有地图先验的情况下机器人的位置 xff0c 典型的如VIO
  • VINS-Mono论文翻译

    摘要 由一个相机和一个低成本惯性测量单元 IMU 组成的单目视觉惯性系统 VINS xff0c 构成了用于估计六自由度状态的最小传感器单元 xff08 大小 xff0c 重量和功耗 xff09 本文提出了VINS Mono xff1a 一个
  • GVINS论文翻译

    摘要 众所周知 xff0c 视觉惯性里程计 VIO 会出现漂移 xff0c 尤其是在长时间运行的条件下 本文提出了一种基于非线性优化的系统 GVINS xff0c 它将 GNSS 原始测量 视觉和惯性信息紧耦合以进行实时和无漂移的状态估计
  • 使用Mapviz和天地图API绘制gvins算法的轨迹

    1 前言 最近在研究gvins算法 xff0c 由于使用rviz没有办法说明问题 xff0c 也没有办法直观的向老板汇报 xff1b 所以必须找到一个能够在地图上直接显示轨迹的工具 xff0c 经调研选择了Mapviz这个工具 2 安装和配
  • FAST-LIVO论文翻译

    摘要 多传感器融合被证明是一种能够在SLAM任务中取得准确和鲁棒位姿估计的有效解决方案 xff0c 因而在机器人应用中具有无限可能 本文提出了FAST LIVO方法 xff0c 一种快速的雷达 惯性 视觉里程计 xff0c 其中包含了两个紧
  • 工作后,如何免费查论文

    工作后 xff0c 如何免费查论文 毕业后不能像在学校一样享受下载免费论文的待遇了 免费论文 毕业论文 各专业论文在哪里可以下载 xff1f 如果你的学校图书馆有数据库 xff0c 那当然是优先选择 xff0c 很多学校购买了期刊的数据 x
  • LVI-SAM论文翻译

    摘要 我们提出了一个通过smoothing and mapping的紧耦合的雷达视觉惯性里程计框架 xff0c LVI SAM xff0c 能够实时状态估计和建图 xff0c 且具有很高的精度和鲁棒性 LVI SAM基于因子图构建 xff0
  • LIO-SAM论文翻译

    摘要 我们提出了一个通过smoothing and mapping实现的紧耦合激光惯性里程计框架 xff0c LIO SAM xff0c 能够取得高精度 实时的移动机器人的轨迹估计和地图构建 LIO SAM基于因子图构建 xff0c 把多个
  • R3live论文翻译

    摘要 在本文中 xff0c 我们提出了一个新颖的激光惯性视觉传感器融合框架 xff0c 也就是R3live xff1b 它利用了激光雷达 惯性和视觉传感器的测量值 xff0c 可以得到鲁棒和高精度的状态估计 R3live包含了两个子系统 x
  • FAST-LIO2论文翻译

    摘要 本文提出了FAST LIO2 xff1a 一个快速 xff0c 鲁棒和多功能的雷达惯性里程计框架 基于高效的紧耦合的迭代卡尔曼滤波 xff0c FAST LIO2有两个关键的创新点 xff0c 可实现快速 鲁棒和准确的激光导航 xff
  • FAST-LIO论文翻译

    摘要 本文提出了一个计算效率较高和鲁棒的激光 惯性里程计框架 我们使用基于紧耦合的迭代扩展卡尔曼滤波器将LiDAR特征点与IMU数据融合在一起 xff0c 以便在发生退化的快速运动 xff0c 嘈杂或杂乱环境中实现稳健的导航 为了在存在大量
  • Faster-lio论文翻译

    摘要 本文提出了一种基于增量体素的激光惯性里程计 xff08 LIO xff09 方法 xff0c 用于快速跟踪旋转和固态激光雷达 为了实现快速的跟踪速度 xff0c 我们既没有使用复杂的基于树的结构来划分空间点云 xff0c 也没有使用严
  • Cartographer论文翻译(回环)

    摘要 便携式激光测距仪 xff08 也被称为激光雷达 xff09 和同步定位与建图 xff08 SLAM xff09 技术是获取竣工平面图的有效方法 实时生成和可视化平面图有助于操作员评估捕获数据的质量和覆盖范围 构建一个便携式捕获平台需要
  • Ubuntu 还原回默认源

    虽然国内源的速度快很多 xff0c 但是有些软件国内源没有 xff0c 或者版本较旧 xff0c 没有的情况还好 xff0c 会有意识的找原来的源 xff0c 但是如果是版本较旧的 xff0c 安装了以后会导致你陷在版本的坑 xff0c 爬
  • 基于ROS的机械臂手眼标定-Aruco使用与相机标定

    基于ROS的机械臂手眼标定 Aruco使用与相机标定 你好 xff0c 我是小智 折腾了一段时间的机械臂的手眼标定 xff0c 相关资料挺多的 xff0c 但使用起来都比较复杂 xff0c 新手一般比较难搞懂 于是想做一个比较简单易懂易用的
  • 机器人手眼标定原理介绍(含详细推导过程)使用Tsai-Lenz算法

    最近找小鱼问手眼标定的非常多 xff0c 但是小鱼时间有限 xff0c 拉了个小群大家讨论 xff0c 二维码失效可以关注公众号鱼香ROS下方加小鱼好友拉你进群 手眼标定原理及常用算法Tsai Lenz介绍 大家好 xff0c 我是小鱼 上
  • 自制Pixracer自定义IMU传感器飞控

    自制Pixracer自定义IMU传感器四层通孔板飞控 xff0c 板载DC降压 xff1a 飞行演示视频如下链接 xff1a https v youku com v show id XNDgxMjUzODc2MA 61 61 html
  • gazebo又卡又慢?快把你的显卡用起来!点击查看如何使用显卡运行gazebo~

    2021 10 11 更新 经测试发现 xff0c 使用系统自带的显卡驱动安装程序 xff0c 更加方便快捷 步骤如下 xff1a 设置 gt 关于 gt 软件和更新 gt 附加驱动 gt 找到推荐的驱动直接点应用即可 之前的原文 大家好
  • 机器人学习必看系列:如何使用moveit控制真实机械臂?

    大家好 xff0c 我是你们可爱的小鱼 最近关于moveit相关的问题感觉非常多 xff0c 毕竟机械臂 43 视觉的应用的确是非常的火爆 xff0c 小鱼都想直接开课教机械臂运动规划相关的了 有的同学问小鱼 xff0c 怎么使用movei