ft_sensor如何创建六维力传感器
-
有关于在机器人的末端法兰,建立了一个link,并将末端法兰与link之间的关节定义为fixed,想要通过ft_sensor来获取这个关节的力和力矩信息。
目前网上的资料,多使用gazebo插件,libgazebo_ros_ft_sensor.so来完成,这个库来自于gazebo_ros_pkg这个功能包,但是以及停止维护,相关的官方文档在wiki上无法获得,网上只能找到ros1版本的相关配置,以及一个官方的ros1移植ros2的示例文件。
也有相关文章使用ros2_contorl的Force Torque Sensor Broadcaster控制器来进行的,但是会找不到gazebo中的interface,有博主提供的解决方法:https://blog.csdn.net/weixin_49638178/article/details/140585820
可以实现。
同理,我使用libgazebo_ros_ft_sensor.so来进行,配置如下
运行后发布了fr_sensor_topic话题,并也能读取到数据。问题:
数据的准确性似乎有问题?且会受到gazebo中的physic的影响?
具体表现为:将机器人竖直起来
随后,查看传感器数据,发现力和力矩的跳变很严重,且基本都是相反数一般的跳变
当关闭physic时,数据不在跳变,但是sensor的力和力矩分别是:
但是这个数据很奇怪,我的sensor_link的质量是1kg,根据计算,在Z方向施加的力应当只有重力9.8N,但是现在在X Y Z方向上都有力,且数值都很大。力矩倒是不明显。
初步怀疑是否是这个力和力矩的参考坐标系有问题? 但是如果坐标系有问题,力矩应该也会有误差。是否有小伙伴做过相关的内容,能否提供一些资料,或者进行相关的探讨。帮助解决这个问题。或者有其他的思路和方法能够完成末端六维力传感器的仿真实现。感激不尽!!!!!
-
在使用 Gazebo 和 ROS 进行六维力传感器仿真时,确实会遇到一些问题,尤其是数据准确性和参考坐标系的问题。以下是一些可能的解决步骤和思路,希望能帮助你解决这些问题。
1. 确认参考坐标系
首先,确保你清楚理解力/力矩数据的参考坐标系。在 Gazebo 中,通常力/力矩数据是基于传感器的本地坐标系发布的。如果你的传感器是固定在末端法兰上的,那么这个本地坐标系应该是与末端法兰的坐标系一致的。
- 检查传感器和 link 的坐标系:确保传感器和 link 的坐标系设置正确。你可以在 Gazebo 的模型中检查这些坐标系的设置。
- 理解数据输出:阅读相关的 Gazebo 插件代码(如
libgazebo_ros_ft_sensor.so
的源代码),理解它是如何计算和发布力/力矩数据的。
2. 验证物理设置
物理仿真中的不准确数据往往与物理设置有关。
- 调整物理参数:检查 Gazebo 的物理设置,如重力、摩擦系数、刚体质量、惯性矩等。确保这些参数设置合理。
- 关闭/开启物理引擎:你已经注意到,关闭物理引擎后数据不再跳变。这可能是物理引擎计算中的数值不稳定问题。尝试调整物理引擎的步长(time step)或其他相关参数,看是否有所改善。
3. 使用 ROS 2 和 Gazebo 的新特性
由于
libgazebo_ros_ft_sensor.so
已经停止维护,考虑使用 ROS 2 和 Gazebo 的新特性或替代方案。- ROS 2 Control 和传感器广播:你已经尝试使用 ROS 2 Control 的 Force Torque Sensor Broadcaster,但遇到了问题。检查你的 ROS 2 Control 配置和 Gazebo 的 interface 设置,确保它们正确匹配。
- 自定义插件:考虑编写一个自定义的 Gazebo 插件来读取力/力矩数据,并通过 ROS 2 发布。这样可以更灵活地控制数据的计算和发布方式。
4. 数据后处理
如果数据仍然不准确,考虑在 ROS 节点中进行数据后处理。
- 滤波:应用滤波器(如卡尔曼滤波器)来平滑力/力矩数据。
- 校准:通过实验校准传感器数据,找到数据中的偏差并进行补偿。
5. 社区和资源
- 查阅文档和社区:虽然官方文档可能有限,但 ROS 和 Gazebo 社区中可能有其他用户遇到过类似问题,并分享了解决方案。
- 参与讨论:在 ROS 论坛、Gazebo 讨论组或相关社区中提问,寻求帮助。
结论
解决六维力传感器仿真中的问题可能需要一些试错和调试。通过仔细检查参考坐标系、物理设置、ROS 2 和 Gazebo 的配置,以及考虑数据后处理,你应该能够找到改善数据准确性的方法。同时,保持对社区资源的关注,以便及时获取最新的解决方案和最佳实践。
以上为生成回答,仅供参考~