ROS2 应用:按键控制 MoveIt2 中 Panda 机械臂关节位置

视频讲解

ROS2 应用:按键控制 MoveIt2 中 Panda 机械臂关节位置

创建 ROS 2 包

进入工作空间的 src 目录,然后创建一个新的 Python 包:

ros2 pkg create --build-type ament_python panda_joint_control --dependencies rclpy control_msgs trajectory_msgs

依赖于 rclpy、control_msgs 和 trajectory_msgs

编写 Python 节点代码

在 panda_joint_control 包的 panda_joint_control 子目录下创建一个名为 panda_joint_controller.py 的文件,并添加以下代码:

import rclpy
from rclpy.node import Node
from control_msgs.msg import JointTrajectoryControllerState
from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint
import sys
import tty
import termios

class PandaJointController(Node):
    def __init__(self):
        super().__init__('panda_joint_controller')
        # 创建发布者,发布到 "/panda_arm_controller/joint_trajectory" 话题
        self.publisher_ = self.create_publisher(JointTrajectory, '/panda_arm_controller/joint_trajectory', 10)
        # 定义关节名称列表
        self.joint_names = ['panda_joint1', 'panda_joint2', 'panda_joint3', 'panda_joint4', 'panda_joint5', 'panda_joint6', 'panda_joint7']
        # 初始化关节位置
        self.joint_positions = [0.0] * 7
        # 定义每个关节位置的递增步长
        self.step = 0.1

    def get_key(self):
        # 获取终端输入的按键
        settings = termios.tcgetattr(sys.stdin)
        try:
            tty.setraw(sys.stdin.fileno())
            key = sys.stdin.read(1)
        finally:
            termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)
        return key

    def send_trajectory(self):
        # 创建 JointTrajectory 消息
        trajectory_msg = JointTrajectory()
        trajectory_msg.joint_names = self.joint_names

        # 创建 JointTrajectoryPoint 并设置目标位置等信息
        point = JointTrajectoryPoint()
        point.positions = self.joint_positions
        # 设置运动时间
        point.time_from_start = rclpy.duration.Duration(seconds=1).to_msg()

        # 将点添加到轨迹消息中
        trajectory_msg.points.append(point)

        # 发布轨迹消息
        self.publisher_.publish(trajectory_msg)
        self.get_logger().info('Sent joint trajectory command')

    def run(self):
        while rclpy.ok():
            key = self.get_key()
            if key == '-':
                self.minus_pressed = True
            elif key in ['1', '2', '3', '4', '5', '6', '7']:
                index = int(key) - 1
                if self.minus_pressed:
                    self.joint_positions[index] -= self.step
                    self.minus_pressed = False
                else:
                    self.joint_positions[index] += self.step
                self.send_trajectory()
            elif key == '\x03':  # Ctrl+C 退出
                break

def main(args=None):
    rclpy.init(args=args)
    panda_joint_controller = PandaJointController()
    panda_joint_controller.run()
    panda_joint_controller.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

修改 setup.py 文件

打开 panda_joint_control 包的 setup.py 文件,在 entry_points 部分添加以下内容:

entry_points={
    'console_scripts': [
        'panda_joint_controller = panda_joint_control.panda_joint_controller:main',
    ],
},

编译和运行

colcon build --packages-select panda_joint_control
source install/setup.bash
ros2 run panda_joint_control panda_joint_controller

按下按键 1 - 7 来控制 Panda 机械臂相应关节的位置递增,按下 Ctrl + C 可以退出程序

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初学者如何设置以及使用富文本编辑器[eclipse版]

手把手教你设置富文本编辑器 参考来源:UEditor Docs 初学者按我的步骤来就可以啦 一、设置ueditor编辑器 1.提取文件[文章最底部有链接提取方式] 2.解压文件并放到自己项目中,在WebContent目录下: 3. 修改jar包位置路径 到--> 注意&a…

springboot系列十四: 注入Servlet, Filter, Listener + 内置Tomcat配置和切换 + 数据库操作

文章目录 注入Servlet, Filter, Listener官方文档基本介绍使用注解方式注入使用RegistrationBean方法注入DispatcherServlet详解 内置Tomcat配置和切换基本介绍内置Tomcat配置通过application.yml完成配置通过类配置 切换Undertow 数据库操作 JdbcHikariDataSource需求分析应用…

【数据结构初阶第十五节】堆的应用(堆排序 + Top-K问题)

必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-CSDN博客 对于本节我们要提前掌握前一节课堆的相关实现才能学好本次的知识,一定要多画图多敲代码看看实现的效果是啥(Crazy!)开始吧! …

deepseek自动化代码生成

使用流程 效果第一步:注册生成各种大模型的API第二步:注册成功后生成API第三步:下载vscode在vscode中下载agent,这里推荐使用cline 第四步:安装完成后,设置模型信息第一步选择API provider: Ope…

Scrapy:Downloader下载器设计详解

Scrapy下载器设计详解 1. 整体架构 Scrapy的下载器(Downloader)是整个爬虫框架的核心组件之一,负责处理所有网络请求的下载工作。它的主要职责是: 管理并发请求实现请求调度处理下载延迟维护下载槽(Slot) 官方文档:Settings中的Downloader配…

【IO】java IO流的类型及IO模型

文章目录 分类字节流输入流输出流 字符流输入流输出流 字节缓冲流字符缓冲流4中常见的IO模型BIO(同步阻塞模型)同步非阻塞模型NIO(多路复用模型)AIO异步 分类 根据数据流向分为:输入流、输出流(以内存为中…

计算机视觉:主流数据集整理

第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章&#xff1…

八股文实战之JUC:静态方法的锁和普通方法的锁

1、对于staic同步方法锁住的是class类模板(Class对象) 对象是线程(调用者) 调用者只有获取资源的锁才能调用 2、普通同步方法 锁住的资源是class对象 对象是线程(调用者)即: 静态同步方法&a…

EasyRTC:基于WebRTC与P2P技术,开启智能硬件音视频交互的全新时代

在数字化浪潮的席卷下,智能硬件已成为我们日常生活的重要组成部分,从智能家居到智能穿戴,从工业物联网到远程协作,设备间的互联互通已成为不可或缺的趋势。然而,高效、低延迟且稳定的音视频交互一直是智能硬件领域亟待…

VSCode - VSCode 切换自动换行

VSCode 自动换行 1、基本介绍 在 VSCode 中,启用自动换行可以让长行代码自动折行显示,避免水平滚动条频繁使用,提升代码阅读体验 如果禁用自动换行,长行代码就需要手动结合水平滚动条来阅读 2、演示 启用自动换行 禁用自动换…

编程小白冲Kaggle每日打卡(12)--kaggle学堂:<机器学习简介>模型如何工作

Kaggle官方课程链接:How Models Work 本专栏旨在Kaggle官方课程的汉化,让大家更方便地看懂。 How Models Work 第一步,如果你是机器学习的新手。 Introduction 我们将从概述机器学习模型的工作原理和使用方法开始。如果你以前做过统计建模…

IDEA安装deepseek最新教程2025

IDEA引入DeepSeek 将 IntelliJ IDEA(JetBrains 开发的 Java 集成开发环境)与 DeepSeek(深度求索的技术能力)结合,通常涉及利用 AI 技术增强开发效率或扩展 IDE 功能,安装完成后,结合 IntelliJ IDEA 的开发…

安科瑞能源物联网平台助力企业实现绿色低碳转型

安科瑞顾强 随着全球能源结构的转型和“双碳”目标的推进,能源管理正朝着智能化、数字化的方向快速发展。安科瑞电气股份有限公司推出的微电网智慧能源管理平台(EMS 3.0),正是这一趋势下的创新解决方案。该平台集成了物联网&…

Ansible 学习笔记

这里写自定义目录标题 基本架构文件结构安装查看版本 Ansible 配置相关文件主机清单写法 基本架构 Ansible 是基于Python实现的,默认使用22端口, 文件结构 安装 查看用什么语言写的用一下命令 查看版本 Ansible 配置相关文件 主机清单写法

android,flutter 混合开发,pigeon通信,传参

文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性,安全性,性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle,添加 Flutter module3. 在 Android app 的 build.gradl…

怎么在Github上readme文件里面怎么插入图片?

环境: Github 问题描述: 怎么在Github上readme文件里面怎么插入图片? https://github.com/latiaoge/AI-Sphere-Butler/tree/master 解决方案: 1.相对路径引用 上传图片到仓库 将图片文件(如 .png/.jpg&#xff…

论文略读:Uncovering Hidden Representations in Language Models

202502 arxiv 说一下主要结论吧 对于下游任务,语言模型的中间层在所有架构和任务中始终优于最后一层 这挑战了使用最后一层表示的传统观点。 不同的架构表现出不同的信息压缩模式。自回归模型在中间层存在瓶颈,而双向模型则保持更均匀的趋势 BERT通过双…

0基础学Linux系统(准备1)

知识拓展 首先了解一下操作系统的作用与常见的操作系统。 我们身边常见的操作系统是windows,MACOS,Linux等,手机的操作系统有iOS,安卓等。 这里要学的就是Linux操作系统。 一个可用的计算机,可以说是由硬件和软件一起组成的&a…

在VS中如何将控制台(console)项目改为窗口(window)项目

1. 修改属性: 2. 修改main函数 int WINAPI WinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPSTR lpCmdLine,_In_ int nShowCmd) //int main()

区块链共识机制详解

区块链共识机制详解 🤝 1. 什么是共识机制? 共识机制是区块链网络中,所有节点就某个状态(如交易的有效性)达成一致的规则和过程。它解决了在去中心化网络中如何确保数据一致性的问题。 2. 主流共识机制 2.1 工作量证…