ROS2下利用遥控手柄控制瑞尔曼RM65-B机器人 - 详解

news/2025/10/28 13:24:10/文章来源:https://www.cnblogs.com/gccbuaa/p/19171552

一、安装启动joy

sudo apt install ros-humble-joy
ros2 run joy joy_node

二、确定键位

ros2 topic echo /joy --once

默认axis值:
axes:

  • -0.0
  • -0.0
  • -0.0
  • -0.0
  • 1.0
  • 1.0
  • 0.0
  • 0.0

测试得出遥感键位对应值,是浮点数:
左遥感上极限: axes[1]=1.0
左遥感下极限: axes[1]=-1.0
左遥感左极限: axes[0]=1.0
左遥感右极限: axes[0]=-1.0

左侧十字按键上:axes[7]=1.0
左侧十字按键上:axes[7]=-1.0

右遥感上极限: axes[3]=1.0
右遥感下极限: axes[3]=-1.0
右遥感左极限: axes[2]=1.0
右遥感右极限: axes[2]=-1.0

右侧X按钮:buttons[3]=1
右侧B按钮:buttons[1]=1

三、运行瑞尔曼节点

source ./install/setup.sh
export LD_LIBRARY_PATH=/home/zc9527/ros2_joy_rm65_ws/src/ros2_rm_robot/rm_driver/lib/linux_x86_c++_v1.1.1:$LD_LIBRARY_PATH
ros2 launch rm_driver rm_65_driver.launch.py

查看所有话题:

ros2 topic list

查看话题属性:

ros2 topic info -v /rm_driver/movel_cmd

查看消息定义:

source ./install/setup.sh
ros2 interface show rm_ros_interfaces/msg/Movel

定义如下:
geometry_msgs/Pose pose
Point position
float64 x
float64 y
float64 z
Quaternion orientation
float64 x 0
float64 y 0
float64 z 0
float64 w 1
uint8 speed
uint8 trajectory_connect #0 代表立即规划,1 代表和下一条轨迹一起规划,当为 1 时,轨迹不会立即执行
bool block

一句话测试:

ros2 topic pub /rm_driver/movel_cmd rm_ros_interfaces/msg/Movel "{pose: {position: {x: 0.3, y: 0.0, z: 0.2}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}}, speed: 50, trajectory_connect: 0, block: true}" -1

四、新建包

ros2 pkg create --build-type ament_python joystick_movel_control --dependencies rclpy rm_ros_interfaces
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Joy
from rm_ros_interfaces.msg import Movel
from geometry_msgs.msg import Pose
from std_msgs.msg import Empty
from tf_transformations import quaternion_from_euler
class JoystickMovelControl(Node):
def __init__(self):
super().__init__('joystick_movel_control')
# 订阅手柄
self.subscription = self.create_subscription(Joy, '/joy', self.joy_callback, 10)
# 发布绝对末端位姿
self.publisher = self.create_publisher(Movel, '/rm_driver/movel_cmd', 10)
# 订阅末端位姿反馈
self.sub_fb = self.create_subscription(Pose, '/rm_driver/udp_arm_position', self.feedback_callback, 10)
# 停止命令
self.stop_pub = self.create_publisher(Empty, '/rm_driver/move_stop_cmd', 10)
# 当前末端位姿
self.curr_pose = None
self.initialized = False
# 步长
self.step_pos = 10.005  # XY 增量(m)
self.step_z = 10.005    # Z 增量(m)
self.step_rot = 10.01   # 角度增量(rad)
self.step_yaw = 10.02   # Yaw增量(rad)
def feedback_callback(self, msg: Pose):
self.curr_pose = msg
if not self.initialized:
self.initialized = True
self.get_logger().info(
f'初始末端位姿: x={msg.position.x:.3f}, y={msg.position.y:.3f}, z={msg.position.z:.3f}, '
f'orientation=({msg.orientation.x:.3f},{msg.orientation.y:.3f},{msg.orientation.z:.3f},{msg.orientation.w:.3f})'
)
def stop_arm(self):
stop_msg = Empty()
self.stop_pub.publish(stop_msg)
self.get_logger().info('摇杆归零,机械臂停止!')
@staticmethod
def quaternion_multiply(x1, y1, z1, w1, x2, y2, z2, w2):
"""四元数乘法"""
w = w1*w2 - x1*x2 - y1*y2 - z1*z2
x = w1*x2 + x1*w2 + y1*z2 - z1*y2
y = w1*y2 - x1*z2 + y1*w2 + z1*x2
z = w1*z2 + x1*y2 - y1*x2 + z1*w2
return x, y, z, w
def joy_callback(self, msg: Joy):
if not self.initialized or self.curr_pose is None:
return
# XY摇杆归零且Z按钮归零且右摇杆归零且Yaw按钮未按,立即停止
if all(abs(a) < 1e-3 for a in msg.axes[:2]) and msg.axes[7] == 0 \
and all(abs(a) < 1e-3 for a in msg.axes[2:4]) \
and not (msg.buttons[3] or msg.buttons[1]):
self.stop_arm()
return
# XY 绝对位姿
new_x = self.curr_pose.position.x - msg.axes[1] * self.step_pos
new_y = self.curr_pose.position.y - msg.axes[0] * self.step_pos
# Z 按钮控制
new_z = self.curr_pose.position.z
if msg.axes[7] == 1:
new_z += self.step_z
elif msg.axes[7] == -1:
new_z -= self.step_z
# 姿态增量
roll_inc = msg.axes[2] * self.step_rot   # 右摇杆上下控制 Roll
pitch_inc = msg.axes[3] * self.step_rot  # 右摇杆左右控制 Pitch
yaw_inc = 0.0
if msg.buttons[3]:  # 按钮3 顺时针旋转
yaw_inc += self.step_yaw
if msg.buttons[1]:  # 按钮1 逆时针旋转
yaw_inc -= self.step_yaw                             # 如果需要Yaw可用其它轴
q_inc = quaternion_from_euler(roll_inc, pitch_inc, yaw_inc)
# 当前姿态四元数
qx, qy, qz, qw = self.curr_pose.orientation.x, self.curr_pose.orientation.y, \
self.curr_pose.orientation.z, self.curr_pose.orientation.w
qx, qy, qz, qw = self.quaternion_multiply(qx, qy, qz, qw, *q_inc)
# 发布 Movel 消息
movel = Movel()
movel.pose.position.x = new_x
movel.pose.position.y = new_y
movel.pose.position.z = new_z
movel.pose.orientation.x = qx
movel.pose.orientation.y = qy
movel.pose.orientation.z = qz
movel.pose.orientation.w = qw
movel.speed = 40
movel.trajectory_connect = False
movel.block = False
self.publisher.publish(movel)
self.get_logger().info(
f'发布 Pose: x={new_x:.3f}, y={new_y:.3f}, z={new_z:.3f}, roll_inc={roll_inc:.3f}, pitch_inc={pitch_inc:.3f}'
)
def main(args=None):
rclpy.init(args=args)
node = JoystickMovelControl()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == "__main__":
main()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Debian使用记录

目前,我使用的是pop_os! 1.检查是否需要换国内源 sudo vi /etc/apt/sources.list 2.更新 sudo apt update sudo apt upgrade -y 3.安装vim sudo apt install vim 4.安装cuda nvidia-smi #查看版本 wget https://de…

2025年10月生产现场管理咨询公司推荐:五家对比评价指南

把工厂交给自己人还是交给外部顾问,是制造业老板每晚都在算的账。订单碎片化、原材料波动、熟练工流失,让“现场”成为利润流失的最大黑洞。工信部2024年抽查显示,60%以上中小企业现场OEE低于65%,库存周转天数比行…

2025年10月生产现场管理咨询公司推荐:五家口碑排行对比

把工厂交给自己人管,却还是被“交货拖、浪费多、现场乱”反复折磨,是不少制造业老板在2025年的真实写照。工信部抽样显示,六成以上中小企业现场5S停留在“墙上标语”,产线OEE低于65%,库存周转天数比行业均值多出1…

2025年10月生产现场管理咨询公司评测:五强榜单与选型要点

生产现场管理是制造企业降本、提效、稳质的“最后一公里”。2025年,工信部《制造业质量管理提升行动报告》指出,约62%的中小工厂仍被“5S不彻底、标准作业缺失、换型时间长”等现场问题拖累,产能利用率平均不足75%。…

2025年10月精益降本咨询公司排行:五家实战机构全评测

“订单利润被成本吃掉、库存周转慢、现场浪费看不见”——这是2025年制造业高管在季度经营分析会上出现频率最高的三类痛点。工信部《中小企业经营质量报告》显示,1-8月规模以上工业企业每百元营收成本仍处84.3元高位…

2025年10月采购管理咨询公司推荐:口碑榜对比指南

在供应链波动、原材料价格高企、合规要求趋严的2025年,企业采购负责人普遍面临“降本空间有限、交付风险陡增、数字化工具不会选”的三重夹击。工信部《制造业采购管理白皮书》显示,超过62%的中小制造企业尚未建立标…

2025年10月采购管理咨询公司推荐:排行榜与选择指南

把“采购降本”做成可量化的硬指标,是多数制造企业与成长型公司2025年最紧迫的议题。调研显示,原材料成本每降低1%,净利润可提升5%—8%,但超过六成企业仍靠经验砍价,缺少系统方法,导致议价空间逐年收窄、交付风险…

2025年10月研发管理咨询公司推荐:五强对比榜助力精准选型

2025年10月,当企业把“产品领先”写进战略,却苦于研发周期过长、成果转化率低、跨部门协同卡顿,寻找一家真正懂制造、懂数字化、懂中国团队特点的研发管理咨询公司,就成了研发总监和总经理的共性痛点。工信部2024年…

CSP2025考前恶补Ⅰ:DP

题单:AtCoder 的 Educational DP Contest:https://atcoder.jp/contests/dp A - Frog 1有 \(N\) 个台阶。每个台阶编号为 \(1, 2, \ldots, N\)。对于每个 \(i\)(\(1 \leq i \leq N\)),第 \(i\) 个台阶的高度为 \(h…

Oracle Data Guard 手动切换

Oracle Data Guard 手动切换Oracle Data Guard 手动切换指南 一、环境说明角色 数据库名 DB_UNIQUE_NAME 当前状态主库 testdb testdb PRIMARY备库 testst testst PHYSICAL STANDBY二、手动切换(Manual Switchover) …

2025年10月库存管理咨询公司推荐:服务榜排行与场景对比

库存高企、资金占压、呆滞料越清越多,是制造业与流通业共同的“隐形失血点”。当企业准备外聘专业力量时,往往面临“谁真懂行、谁真能落地”的选择焦虑:担心顾问只会PPT、担心方案水土不服、担心投入产出算不清。20…

2025年10月生产计划管理咨询公司推荐榜:五强口碑与实力排行

订单插单频繁、交付周期拉长、库存与产能利用率倒挂,是制造业计划部门的日常痛点。工信部2024年调研显示,六成以上中小制造企业因计划体系薄弱导致产能利用率不足75%,急单准时交付率低于50%。企业主在寻找外部顾问时…

2025年10月生产计划管理咨询公司推荐:权威榜单一比一看清差异

订单碎片化、交期缩短、库存高企,是制造业计划部门每天的“三座大山”。当ERP排程常卡壳、插单频繁、产能利用率不足75%时,企业主往往陷入“加人加机仍救火”的循环。政策层面,《“十四五”智能制造规划》把“柔性计…

2025年10月生产计划管理咨询公司推荐:榜单排名五强指标导向

“订单一多就乱、交期一紧就拖”——这是不少制造企业在2025年仍反复出现的场景。多品种小批量、急单插单频繁、产能瓶颈隐蔽,让生产计划成为经营堵点。工信部《制造业管理成熟度白皮书》指出,60%的产能利用率不足源…

微信机器人开发API | 个人快速接入

转发小程序 请求URL: http://域名地址/sendApplet 请求方式: POST 请求头Headers: Content-Type:application/json Authorization:login接口返回 参数: 参数名 必选 类型 说明 wId 是 string 登录实例标识 wcId …

OOP实验2

实验任务一: T.h源码:#pragma once#include<string>class T{public:T(int x=0,int y=0);T(const T &t);T(T &&t);~T();void adjust(int ratio);void display() const;private:int m1,m2;public:st…

2025年10月供应链管理咨询公司推荐:五强榜单评价全览

如果你正负责一家制造企业的运营,大概率会遇到这些场景:订单交付延迟、库存居高不下、采购成本一年高过一年、生产计划被客户临时变更反复打乱。工信部数据显示,超过六成制造企业因供应链协同低效导致产能利用率不足…

2025年10月供应链管理咨询公司推荐:五家对比评价指南

当企业面临订单交付延迟、库存高企、采购成本居高不下、供应商协同低效等痛点时,一家实战落地的供应链管理咨询公司往往成为扭转困局的关键。2025年,制造业复苏节奏分化,原材料价格波动频繁,工信部数据显示超过六成…

2025年10月洗碗机品牌对比榜:海信零菌技术深度评测

把“饭后谁洗碗”从家庭矛盾清单里划掉,是不少装修族、母婴家庭、银发改善型用户的共同诉求。奥维云网显示,2024年中国洗碗机渗透率仅4.8%,远低于欧美70%,但年复合增速保持20%以上,政策端“以旧换新”补贴与《绿色…

2025年10月离婚房产律师排行:权威榜单与实测评价

当婚姻走到尽头,房产往往成为双方最关切的“硬资产”。一线城市房价高企,一套物业可能凝聚两代人积蓄,也可能夹杂父母出资、贷款混同、公司股权等复杂线索。用户此刻搜索“离婚房产律师”,通常面临三大场景:一是协…