ur机械臂 + robotiq gripper + robotiq ft sensor + gazebo + 连接真实机械臂 + 网页控制

在这里插入图片描述
在这里插入图片描述


仓库地址:ur_ws,欢迎debug和develop。


xacro制作

xacro主要负责将ur机械臂、robotiq gripper和robotiq ft sensor装配起来,确保装配正确,供后面生成moveit文件和gazebo仿真使用。
具体讲解请参考:ur机械臂工作空间description的讲解


连接真实机械臂

目前采用的是最新的ur_robot_driver, 关于这个最新驱动的使用,请参考:ROS - 使用UR机械臂最新的 ur_robot_driver

后面如果有需要,会添加ur_modern_driver的版本,对于笔者使用的机器,是ur3 CB3.12,原版ur_modern_driver有些错误,即使kinetic版本的也会可能执行不过,所以我先提供了一份修改版,确保可以正常执行:ur_modern_driver选择iron-kinetic-devel,对于git clone到本地的,直接执行

git checkout -b iron-kenetic-devel

即可切换到iron-kinetic-devel分支。


gazebo、moveit

这部分代码不多,也基本固定,请阅读源码。


网页控制

请移步ros网页控制机械臂

### GazeboUR机械夹取物体时防止碰撞导致物体被撞飞的解决方案 在Gazebo环境中,当UR机械尝试夹取物体时,如果参数未合理配置,可能会因力矩过大或其他原因导致物体被撞飞。以下是针对此问题的具体分析解决方案: #### 1. 力矩控制器调整 通过调节末端执行器(如Robotiq Gripper)的力矩限制来降低抓取过程中施加于物体上的作用力。这可以通过修改`effort_limits`参数实现[^1]。具体操作如下: - 找到对应gripper插件的配置文件(通常位于`.xacro`或`.sdf`文件中),定位至`transmission`部分。 - 修改`<limit>`标签下的`effort`属性值以减小最大允许扭矩。 ```xml <!-- Example of adjusting effort limit --> <joint name="finger_joint"> <limit> <!-- Reduce the maximum allowable torque here --> <effort value="50"/> </limit> </joint> ``` #### 2. 碰撞检测优化 启用精确的物理引擎模拟可以有效减少误判情况的发生。推荐使用ODE作为默认求解器并开启实时步进模式[^2]: ```bash # In your .world file, ensure ODE is selected as physics engine. <physics type='ode'> <real_time_update_rate>1000</real_time_update_rate> </physics> ``` 此外,在模型定义阶段需仔细设定各部件间的接触属性,特别是摩擦系数μ以及恢复能量e等重要变量: ```xml <!-- Define surface properties to improve grasping stability --> <gazebo reference="object_link"> <mu>1.0</mu> <!-- Static friction coefficient --> <mu2>0.8</mu2> <!-- Rolling resistance --> <kp>1e7</kp> <!-- Contact stiffness --> <kd>1</kd> <!-- Damping factor --> </gazebo> ``` #### 3. 控制策略改进 引入基于阻抗/导纳的行为规划方法能够显著提升系统的柔顺性能表现。例如采用PD控制器动态计算目标位置偏差量Δq,并结合当前速度v共同决定下一步动作指令u(t): \[ u(t)=K_p \cdot e + K_d \cdot de/dt \] 其中\( K_p\) \( K_d \)分别为比例增益项微分增益项;而误差向量e则表示期望轨迹y*(t)-实际测量反馈z(t). 对于上述提到的所有改动均应在充分测试验证之后再部署上线运行环境当中去应用实施. ```python import rospy from std_msgs.msg import Float64 def impedance_control(): pub = rospy.Publisher('/joint_position_controller/command', Float64, queue_size=10) rate = rospy.Rate(10) kp = 50.0 # Proportional gain kd = 10.0 # Derivative gain while not rospy.is_shutdown(): error = desired_pos - current_pos velocity_error = target_vel - actual_vel command = (kp * error) + (kd * velocity_error) pub.publish(command) rate.sleep() ``` ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值