webots和ros2笔记03-解析

举报
zhangrelay 发表于 2021/07/15 00:36:10 2021/07/15
【摘要】 在完成02-启程:https://zhangrelay.blog.csdn.net/article/details/112675018 那么会思考两个机械臂拿起易拉罐的过程是如何实现了。 简要分析一下: launch(armed_robots.launch.py): import osimport launchfrom ament_index_python.packa...

在完成02-启程:https://zhangrelay.blog.csdn.net/article/details/112675018

那么会思考两个机械臂拿起易拉罐的过程是如何实现了。

简要分析一下:

launch(armed_robots.launch.py):


  
  1. import os
  2. import launch
  3. from ament_index_python.packages import get_package_share_directory
  4. from webots_ros2_core.utils import ControllerLauncher
  5. from webots_ros2_core.webots_launcher import WebotsLauncher
  6. def generate_launch_description():
  7. # Webots
  8. webots = WebotsLauncher(world=os.path.join(get_package_share_directory('webots_ros2_demos'), 'worlds', 'armed_robots.wbt'))
  9. # Controller nodes
  10. synchronization = launch.substitutions.LaunchConfiguration('synchronization', default=False)
  11. abb_controller = ControllerLauncher(
  12. package='webots_ros2_core',
  13. executable='webots_robotic_arm_node',
  14. arguments=['--webots-robot-name=abbirb4600'],
  15. parameters=[{'synchronization': synchronization, 'controller_name': 'abb'}],
  16. output='screen'
  17. )
  18. ure5_controller = ControllerLauncher(
  19. package='webots_ros2_core',
  20. executable='webots_robotic_arm_node',
  21. arguments=['--webots-robot-name=UR5e'],
  22. parameters=[{'synchronization': synchronization, 'controller_name': 'ur'}],
  23. output='screen'
  24. )
  25. # Control nodes
  26. armed_robots_ur = ControllerLauncher(
  27. package='webots_ros2_demos',
  28. executable='armed_robots_ur',
  29. output='screen'
  30. )
  31. armed_robots_abb = ControllerLauncher(
  32. package='webots_ros2_demos',
  33. executable='armed_robots_abb',
  34. output='screen'
  35. )
  36. return launch.LaunchDescription([
  37. webots, abb_controller, ure5_controller, armed_robots_ur, armed_robots_abb,
  38. launch.actions.RegisterEventHandler(
  39. event_handler=launch.event_handlers.OnProcessExit(
  40. target_action=webots,
  41. on_exit=[launch.actions.EmitEvent(event=launch.events.Shutdown())],
  42. )
  43. ),
  44. ])

启动环境和机械臂:

成功

失败

使用world下armed_robots环境文件。


  
  1. # Webots
  2. webots = WebotsLauncher(world=os.path.join(get_package_share_directory('webots_ros2_demos'), 'worlds', 'armed_robots.wbt'))

控制器节点(两个机械臂分别为ur和abb):

ur:


  
  1. ure5_controller = ControllerLauncher(
  2. package='webots_ros2_core',
  3. executable='webots_robotic_arm_node',
  4. arguments=['--webots-robot-name=UR5e'],
  5. parameters=[{'synchronization': synchronization, 'controller_name': 'ur'}],
  6. output='screen'
  7. )

abb:


  
  1. abb_controller = ControllerLauncher(
  2. package='webots_ros2_core',
  3. executable='webots_robotic_arm_node',
  4. arguments=['--webots-robot-name=abbirb4600'],
  5. parameters=[{'synchronization': synchronization, 'controller_name': 'abb'}],
  6. output='screen'
  7. )

这里需要注意(synchronization同步)两个机械臂要同步运动否则无法协调完成任务。

控制器不同于控制,对于两个机械臂有具体的控制节点完成对应的控制指令,如下:

ur:


  
  1. armed_robots_ur = ControllerLauncher(
  2. package='webots_ros2_demos',
  3. executable='armed_robots_ur',
  4. output='screen'
  5. )

具体指令为一系列轨迹和抓取动作坐标。


  
  1. import rclpy
  2. from webots_ros2_demos.follow_joint_trajectory_client import FollowJointTrajectoryClient
  3. def main(args=None):
  4. rclpy.init(args=args)
  5. armed_robot_ur = FollowJointTrajectoryClient('armed_robots_ur', '/ur/follow_joint_trajectory')
  6. armed_robot_ur.send_goal({
  7. 'joint_names': [
  8. 'shoulder_pan_joint',
  9. 'shoulder_lift_joint',
  10. 'elbow_joint',
  11. 'wrist_1_joint',
  12. 'finger_1_joint_1',
  13. 'finger_2_joint_1',
  14. 'finger_middle_joint_1'
  15. ],
  16. 'points': [
  17. {
  18. 'positions': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
  19. 'velocities': [5] * 7,
  20. 'accelerations': [5] * 7,
  21. 'time_from_start': {'sec': 3, 'nanosec': 0}
  22. },
  23. {
  24. 'positions': [0.0, 0.0, 0.0, 0.0, 0.85, 0.85, 0.6],
  25. 'velocities': [5] * 7,
  26. 'accelerations': [5] * 7,
  27. 'time_from_start': {'sec': 4, 'nanosec': 0}
  28. },
  29. {
  30. 'positions': [0.63, -2.26, -1.88, -2.14, 0.85, 0.85, 0.6],
  31. 'velocities': [5] * 7,
  32. 'accelerations': [5] * 7,
  33. 'time_from_start': {'sec': 5, 'nanosec': 0}
  34. },
  35. {
  36. 'positions': [0.63, -2.26, -1.88, -2.14, 0.0, 0.0, 0.0],
  37. 'velocities': [5] * 7,
  38. 'accelerations': [5] * 7,
  39. 'time_from_start': {'sec': 6, 'nanosec': 0}
  40. },
  41. {
  42. 'positions': [0.63, -2.0, -1.88, -2.14, 0.0, 0.0, 0.0],
  43. 'velocities': [5] * 7,
  44. 'accelerations': [5] * 7,
  45. 'time_from_start': {'sec': 7, 'nanosec': 0}
  46. },
  47. {
  48. 'positions': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
  49. 'velocities': [5] * 7,
  50. 'accelerations': [5] * 7,
  51. 'time_from_start': {'sec': 8, 'nanosec': 0}
  52. },
  53. {
  54. 'positions': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
  55. 'velocities': [5] * 7,
  56. 'accelerations': [5] * 7,
  57. 'time_from_start': {'sec': 9, 'nanosec': 0}
  58. }
  59. ]
  60. }, 10)
  61. rclpy.spin(armed_robot_ur)
  62. if __name__ == '__main__':
  63. main()

要能够知道位置指令中抓取部分:


  
  1. {
  2. 'positions': [0.0, 0.0, 0.0, 0.0, 0.85, 0.85, 0.6],
  3. 'velocities': [5] * 7,
  4. 'accelerations': [5] * 7,
  5. 'time_from_start': {'sec': 4, 'nanosec': 0}
  6. },
  7. {
  8. 'positions': [0.63, -2.26, -1.88, -2.14, 0.85, 0.85, 0.6],
  9. 'velocities': [5] * 7,
  10. 'accelerations': [5] * 7,
  11. 'time_from_start': {'sec': 5, 'nanosec': 0}
  12. },

abb:


  
  1. armed_robots_abb = ControllerLauncher(
  2. package='webots_ros2_demos',
  3. executable='armed_robots_abb',
  4. output='screen'
  5. )

具体指令为一系列轨迹和抓取动作坐标。


  
  1. import rclpy
  2. from webots_ros2_demos.follow_joint_trajectory_client import FollowJointTrajectoryClient
  3. def main(args=None):
  4. rclpy.init(args=args)
  5. armed_robot_abb = FollowJointTrajectoryClient('armed_robots_abb', '/abb/follow_joint_trajectory')
  6. armed_robot_abb.send_goal({
  7. 'joint_names': [
  8. 'A motor',
  9. 'B motor',
  10. 'C motor',
  11. 'E motor',
  12. 'finger_1_joint_1',
  13. 'finger_2_joint_1',
  14. 'finger_middle_joint_1'
  15. ],
  16. 'points': [
  17. {
  18. 'positions': [0.0, 0.0, 0.0, 0., 0.0, 0.0, 0.0],
  19. 'velocities': [5] * 7,
  20. 'accelerations': [5] * 7,
  21. 'time_from_start': {'sec': 0, 'nanosec': 0}
  22. },
  23. {
  24. 'positions': [-0.025, 0.0, 0.82, -0.86, 0.0, 0.0, 0.0],
  25. 'velocities': [5] * 7,
  26. 'accelerations': [5] * 7,
  27. 'time_from_start': {'sec': 1, 'nanosec': 0}
  28. },
  29. {
  30. 'positions': [-0.025, 0.1, 0.82, -0.86, 0.0, 0.0, 0.0],
  31. 'velocities': [5] * 7,
  32. 'accelerations': [5] * 7,
  33. 'time_from_start': {'sec': 2, 'nanosec': 0}
  34. },
  35. {
  36. 'positions': [-0.025, 0.1, 0.82, -0.86, 0.85, 0.85, 0.6],
  37. 'velocities': [5] * 7,
  38. 'accelerations': [5] * 7,
  39. 'time_from_start': {'sec': 3, 'nanosec': 0}
  40. },
  41. {
  42. 'positions': [-0.025, -0.44, 0.82, -0.86, 0.85, 0.85, 0.6],
  43. 'velocities': [5] * 7,
  44. 'accelerations': [5] * 7,
  45. 'time_from_start': {'sec': 4, 'nanosec': 0}
  46. },
  47. {
  48. 'positions': [1.57, -0.1, 0.95, -0.71, 0.85, 0.85, 0.6],
  49. 'velocities': [5] * 7,
  50. 'accelerations': [5] * 7,
  51. 'time_from_start': {'sec': 5, 'nanosec': 0}
  52. },
  53. {
  54. 'positions': [1.57, -0.1, 0.8, -0.81, 0.0, 0.0, 0.0],
  55. 'velocities': [5] * 7,
  56. 'accelerations': [5] * 7,
  57. 'time_from_start': {'sec': 6, 'nanosec': 0}
  58. },
  59. {
  60. 'positions': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
  61. 'velocities': [5] * 7,
  62. 'accelerations': [5] * 7,
  63. 'time_from_start': {'sec': 7, 'nanosec': 0}
  64. },
  65. {
  66. 'positions': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
  67. 'velocities': [5] * 7,
  68. 'accelerations': [5] * 7,
  69. 'time_from_start': {'sec': 9, 'nanosec': 0}
  70. }
  71. ]
  72. }, 10)
  73. rclpy.spin(armed_robot_abb)
  74. if __name__ == '__main__':
  75. main()

更多内容和教程,稍后补充。

  • C:\ros_ws\webots2>ros2 launch webots_ros2_tutorials line_following_launch.py  


 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/112686566

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。