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

news/2025/2/23 17:28:20/

视频讲解

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 termiosclass 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.1def 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 keydef 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 = Trueelif key in ['1', '2', '3', '4', '5', '6', '7']:index = int(key) - 1if self.minus_pressed:self.joint_positions[index] -= self.stepself.minus_pressed = Falseelse:self.joint_positions[index] += self.stepself.send_trajectory()elif key == '\x03':  # Ctrl+C 退出breakdef 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 可以退出程序


http://www.ppmy.cn/news/1574465.html

相关文章

OpenBMC:BmcWeb定义service

1.定义service //src\webserver_run.cppint run() {...std::shared_ptr<sdbusplus::asio::connection> systemBus std::make_shared<sdbusplus::asio::connection>(io);crow::connections::systemBus systemBus.get();auto server sdbusplus::asio::object_serv…

python组备赛笔记(基础篇)

小数输出 1、代码示例&#xff1a; print(jc,%.3f%fc) 输出格式&#xff1a; 890 86075.959 2、代码示例&#xff1a; print(f%.3f%b) 输出格式&#xff1a; 1.000 金字塔输出 1、代码示例&#xff1a; n 5 t * for i in range(1,n1):print(f{t*(2*i-1):^{2*n-1}}) fo…

flink-cdc同步数据到doris中

1 创建数据库和表 1.1 数据库脚本 这样直接创建数据库是有问题&#xff0c;因为后面发现superset连接使用doris://root:12345610.101.12.82:9030/internal.eayc?charsetutf8mb4 -- 创建数据库eayc create database if not exists ods_eayc; -- 创建数据表2 数据同步 2.1 f…

零基础学QT、C++(四)QT程序打包

项目包 链接&#xff1a;https://pan.quark.cn/s/6a3455161757 记得创建yolo的数据库&#xff0c;并把数据导入 目录 一、把项目变为release版 二、运行项目 三、找到windeployqt6.exe 四、运行exe 五、无法定位重新输入点 学习视频 QT程序打包发布教程&#xff01;&#xff01…

一文讲解Redis中的集群数据分区相关问题

在 Redis 集群中&#xff0c;数据分区是通过将数据分散到不同的节点来实现的&#xff0c;常见的数据分区规则有三种&#xff1a;节点取余分区、一致性哈希分区、虚拟槽分区。 说说节点取余分区 节点取余分区是一种简单的分区策略&#xff0c;其中数据项通过对某个值&#xff0…

open webui 部署 以及解决,首屏加载缓慢,nginx反向代理访问404,WebSocket后端服务器链接失败等问题

项目地址&#xff1a;GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 选择了docker部署 如果 Ollama 在您的计算机上&#xff0c;请使用以下命令 docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gatewa…

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

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

c#编程:学习Linq,重几个简单示例开始

学习LINQ&#xff08;Language Integrated Query&#xff09;是掌握C#中数据处理和分析的重要一步。LINQ 提供了一种简洁、声明性的方式来查询和操作内存中的数据集合&#xff08;如数组、列表等&#xff09;以及数据库中的数据。 以下是一些入门级的经典LINQ示例&#xff0c;…