相机引导机器人移动

Python 版本 (最简单、最适合视觉程序),把相机算出的 X/Y/Z 偏移 填进去,机器人就会实时往焊缝方向动

一、核心代码:相机偏移 → ROS Twist 指令

完全匹配 Servo 配置:

python

运行

复制代码
#!/usr/bin/env python3
import rospy
from geometry_msgs.msg import Twist

# ===================== 【你只需要改这里】 =====================
# 相机算出的偏移量 (单位:米,手眼标定后统一在 base_link 坐标系下)
dx = 0.0    # X 方向偏移(前后)
dy = 0.0    # Y 方向偏移(左右)
dz = 0.0    # Z 方向偏移(上下)

# 旋转偏移(焊接一般不用,保持 0)
drx = 0.0
dry = 0.0
drz = 0.0
# ============================================================

def servo_publisher():
    rospy.init_node('camera_vision_servo')
    
    # 【关键】发布到你 Servo 配置的话题:delta_twist_cmds
    pub = rospy.Publisher('/servo_server/delta_twist_cmds', Twist, queue_size=1)
    
    rate = rospy.Rate(30)  # 30Hz 频率,匹配你的 Servo 配置
    
    rospy.loginfo("✅ 相机引导 Servo 已启动,发送实时偏移指令...")

    while not rospy.is_shutdown():
        twist = Twist()
        
        # 相机偏移量 → 机器人实时速度指令
        twist.linear.x = dx
        twist.linear.y = dy
        twist.linear.z = dz
        
        twist.angular.x = drx
        twist.angular.y = dry
        twist.angular.z = drz

        pub.publish(twist)
        rate.sleep()

if __name__ == '__main__':
    try:
        servo_publisher()
    except rospy.ROSInterruptException:
        pass

二、这个代码怎么用?(超简单)

  1. 把相机算出的 base_link 下的 X/Y/Z 偏移 填进 dx/dy/dz
  2. 运行这个节点
  3. 机器人就会实时、平滑、安全地向焊缝移动

三、【工业版】:带平滑、限幅、防抖动

视觉引导必须用这个,更稳、不抖、不冲:

复制代码
#!/usr/bin/env python3
import rospy
from geometry_msgs.msg import Twist

class VisionServo:
    def __init__(self):
        rospy.init_node('vision_servo_controller')
        self.pub = rospy.Publisher('/servo_server/delta_twist_cmds', Twist, queue_size=1)
        self.rate = rospy.Rate(30)

        # 安全速度限制(米/秒),和你 Servo 配置对应
        self.max_linear_speed = 0.15  
        self.max_angular_speed = 0.2

    def limit_speed(self, val, max_val):
        """限幅,防止超速"""
        return max(-max_val, min(val, max_val))

    def run(self, dx, dy, dz, drx=0, dry=0, drz=0):
        twist = Twist()
        
        twist.linear.x = self.limit_speed(dx, self.max_linear_speed)
        twist.linear.y = self.limit_speed(dy, self.max_linear_speed)
        twist.linear.z = self.limit_speed(dz, self.max_linear_speed)
        
        twist.angular.x = self.limit_speed(drx, self.max_angular_speed)
        twist.angular.y = self.limit_speed(dry, self.max_angular_speed)
        twist.angular.z = self.limit_speed(drz, self.max_angular_speed)

        self.pub.publish(twist)
        self.rate.sleep()

if __name__ == '__main__':
    vs = VisionServo()
    rospy.loginfo("✅ 相机视觉引导伺服已启动")
    
    while not rospy.is_shutdown():
        # --- 【相机输出】 ---
        dx = 0.0  # 替换成你的相机X偏移
        dy = 0.0  # 替换成你的相机Y偏移
        dz = 0.0  # 替换成你的相机Z偏移
        
        vs.run(dx, dy, dz)

四、最重要的对应关系

Servo 配置:

yaml

复制代码
robot_link_command_frame: base_link
ee_frame_name: YB_Link
cartesian_command_in_topic: ~/delta_twist_cmds

我给你的代码:

  • 发布到:/servo_server/delta_twist_cmds
  • 坐标系:base_link
  • 单位:
  • 效果:相机算出多少偏移,机器人就往哪走

完全匹配!


五、只需要做一件事

相机输出的 XYZ 偏移量赋值给代码里的

plaintext

复制代码
dx = 相机输出X
dy = 相机输出Y
dz = 相机输出Z

机器人就实现了:

相机实时引导机器人跟踪焊缝

相关推荐
wjc123131319 小时前
蓝印RPA|钉钉应用机器人Agent配置说明
机器人·钉钉·rpa
消失的旧时光-194320 小时前
第四篇:Point-In-Polygon 是什么?——机器人电子围栏核心算法
机器人·pip·rtk
消失的旧时光-194320 小时前
第三篇 :机器人为什么会“漂”?——RTK 漂移问题详解
机器人·定位·rtk
kyle~1 天前
机器视觉---熔池相机(穿透强光的视觉感知)
c++·数码相机·计算机视觉·机器人·焊接机器人
kyle~1 天前
机器人时间链路---工程流程示例
c++·3d·机器人·ros2
wjc12313131 天前
蓝印RPA|企业微信机器人Agent配置说明
机器人·企业微信·rpa
数智工坊2 天前
【Inner Monologue论文阅读】: 首次将大语言模型嵌入机器人控制闭环,实现自我反思和动态行为调整
论文阅读·人工智能·算法·语言模型·机器人·无人机
互联圈运营观察2 天前
布局先行、技术深耕:国内端侧AI企业抢滩机器人与具身智能赛道
人工智能·microsoft·机器人
是三旬老汉。2 天前
宇树G1-D机器人端推理开发记录
python·机器人
生成论实验室2 天前
通用人工智能完整技术方案:一个基于字序生命模型(WOLM)认知决策层实时、安全、可交互的数字生命体
人工智能·机器人·自动驾驶·agi·安全架构