質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%

Q&A

0回答

1156閲覧

エラーの解決方法がわかりません

meishousen

総合スコア0

0グッド

0クリップ

投稿2021/03/26 09:05

前提・実現したいこと

crane_x7というロボットアームを使用しています。
0から3までの4種類のマーカーを使用して
0番のマーカーが貼ってある物体をつかむ → 2番のマーカーの上に置く
1番のマーカーが貼ってある物体をつかむ → 3番のマーカーの上に置く
という動作をさせたいです。

発生している問題・エラーメッセージ

Failed to import pyassimp, see https://github.com/ros-planning/moveit/issues/86 for more info Traceback (most recent call last): File "/home/rhp/crane_catkin_ws/src/crane_x7_ros/crane_x7_examples/scripts/crane_x7_pick_and_place_demo_camera_3.py", line 282, in <module> main() File "/home/rhp/crane_catkin_ws/src/crane_x7_ros/crane_x7_examples/scripts/crane_x7_pick_and_place_demo_camera_3.py", line 30, in main marker_pose.transform.translation.x, AttributeError: 'NoneType' object has no attribute 'transform'

該当のソースコード

import rospy import moveit_commander import geometry_msgs.msg import tf2_ros import rosnode from tf.transformations import quaternion_from_euler def main(): rospy.init_node("crane_x7_pick_and_place_camera_controller") tfBuffer = tf2_ros.Buffer() listener = tf2_ros.TransformListener(tfBuffer) rate = rospy.Rate(10.0) marker_pose = None while marker_pose == None: try: marker_pose0 = tfBuffer.lookup_transform('base_link', 'ar_marker_0', rospy.Time(0)) marker_pose1 = tfBuffer.lookup_transform('base_link', 'ar_marker_1', rospy.Time(0)) marker_pose2 = tfBuffer.lookup_transform('base_link', 'ar_marker_2', rospy.Time(0)) marker_pose3 = tfBuffer.lookup_transform('base_link', 'ar_marker_3', rospy.Time(0)) except (tf2_ros.LookupException, tf2_ros.ConnectivityException, tf2_ros.ExtrapolationException): continue print('{0:.3f}, {1:.3f}, {2:.3f}'.format( marker_pose.transform.translation.x, marker_pose.transform.translation.y, marker_pose.transform.translation.z )) print('{0:.2f}, {1:.2f}, {2:.2f}, {3:.2f}'.format( marker_pose.transform.rotation.x, marker_pose.transform.rotation.y, marker_pose.transform.rotation.z, marker_pose.transform.rotation.w )) rate.sleep() robot = moveit_commander.RobotCommander() arm = moveit_commander.MoveGroupCommander("arm") arm.set_max_velocity_scaling_factor(0.1) arm.set_max_acceleration_scaling_factor(1.0) gripper = moveit_commander.MoveGroupCommander("gripper") while len([s for s in rosnode.get_node_names() if 'rviz' in s]) == 0: rospy.sleep(1.0) rospy.sleep(1.0) print("Group names:") print(robot.get_group_names()) print("Current state:") print(robot.get_current_state()) # アーム初期ポーズを表示 arm_initial_pose = arm.get_current_pose().pose print("Arm initial pose:") print(arm_initial_pose) # 何かを掴んでいた時のためにハンドを開く gripper.set_joint_value_target([0.9, 0.9]) gripper.go() # SRDFに定義されている"home"の姿勢にする arm.set_named_target("home") arm.go() gripper.set_joint_value_target([0.8, 0.8]) gripper.go() # 0番を掴む準備をする target_pose = geometry_msgs.msg.Pose() target_pose.position.x = marker_pose0.transform.translation.x - 0.06 target_pose.position.y = marker_pose0.transform.translation.y target_pose.position.z = marker_pose0.transform.translation.z + 0.2 q = quaternion_from_euler(-3.14, 0.0, -3.14/2.0) # 上方から掴みに行く場合 target_pose.orientation.x = q[0] target_pose.orientation.y = q[1] target_pose.orientation.z = q[2] target_pose.orientation.w = q[3] arm.set_pose_target(target_pose) # 目標ポーズ設定 arm.go() # 実行 # ハンドを開く gripper.set_joint_value_target([1.0, 1.0]) gripper.go() # 0番を掴みに行く target_pose = geometry_msgs.msg.Pose() target_pose.position.x = marker_pose0.transform.translation.x - 0.06 target_pose.position.y = marker_pose0.transform.translation.y target_pose.position.z = marker_pose0.transform.translation.z + 0.04 q = quaternion_from_euler(-3.14, 0.0, -3.14/2.0) # 上方から掴みに行く場合 target_pose.orientation.x = q[0] target_pose.orientation.y = q[1] target_pose.orientation.z = q[2] target_pose.orientation.w = q[3] arm.set_pose_target(target_pose) # 目標ポーズ設定 arm.go() # 実行 # ハンドを閉じる gripper.set_joint_value_target([0.5, 0.5]) gripper.go() # 持ち上げる target_pose = geometry_msgs.msg.Pose() target_pose.position.x = 0.2 target_pose.position.y = 0.0 target_pose.position.z = 0.3 q = quaternion_from_euler(-3.14, 0.0, -3.14/2.0) # 上方から掴みに行く場合 target_pose.orientation.x = q[0] target_pose.orientation.y = q[1] target_pose.orientation.z = q[2] target_pose.orientation.w = q[3] arm.set_pose_target(target_pose) # 目標ポーズ設定 arm.go() # 実行 # 2番の上まで移動する target_pose = geometry_msgs.msg.Pose() target_pose.position.x = marker_pose2.transform.translation.x target_pose.position.y = marker_pose2.transform.translation.y target_pose.position.z = marker_pose2.transform.translation.z + 0.2 q = quaternion_from_euler(-3.14, 0.0, -3.14/2.0) # 上方から掴みに行く場合 target_pose.orientation.x = q[0] target_pose.orientation.y = q[1] target_pose.orientation.z = q[2] target_pose.orientation.w = q[3] arm.set_pose_target(target_pose) # 目標ポーズ設定 arm.go() # 実行 # 0番を2番に下ろす target_pose = geometry_msgs.msg.Pose() target_pose.position.x = marker_pose2.transform.translation.x target_pose.position.y = marker_pose2.transform.translation.y target_pose.position.z = marker_pose2.transform.translation.z + 0.03 q = quaternion_from_euler(-3.14, 0.0, -3.14/2.0) # 上方から掴みに行く場合 target_pose.orientation.x = q[0] target_pose.orientation.y = q[1] target_pose.orientation.z = q[2] target_pose.orientation.w = q[3] arm.set_pose_target(target_pose) # 目標ポーズ設定 arm.go() # 実行 # ハンドを開く gripper.set_joint_value_target([1.0, 1.0]) gripper.go() # SRDFに定義されている"home"の姿勢にする(2回目) arm.set_named_target("home") arm.go() gripper.set_joint_value_target([0.8, 0.8]) gripper.go() # 1番を掴む準備をする target_pose = geometry_msgs.msg.Pose() target_pose.position.x = marker_pose1.transform.translation.x - 0.06 target_pose.position.y = marker_pose1.transform.translation.y target_pose.position.z = marker_pose1.transform.translation.z + 0.2 q = quaternion_from_euler(-3.14, 0.0, -3.14/2.0) # 上方から掴みに行く場合 target_pose.orientation.x = q[0] target_pose.orientation.y = q[1] target_pose.orientation.z = q[2] target_pose.orientation.w = q[3] arm.set_pose_target(target_pose) # 目標ポーズ設定 arm.go() # 実行 # ハンドを開く gripper.set_joint_value_target([1.0, 1.0]) gripper.go() # 1番を掴みに行く target_pose = geometry_msgs.msg.Pose() target_pose.position.x = marker_pose1.transform.translation.x - 0.06 target_pose.position.y = marker_pose1.transform.translation.y target_pose.position.z = marker_pose1.transform.translation.z + 0.04 q = quaternion_from_euler(-3.14, 0.0, -3.14/2.0) # 上方から掴みに行く場合 target_pose.orientation.x = q[0] target_pose.orientation.y = q[1] target_pose.orientation.z = q[2] target_pose.orientation.w = q[3] arm.set_pose_target(target_pose) # 目標ポーズ設定 arm.go() # 実行 # ハンドを閉じる gripper.set_joint_value_target([0.5, 0.5]) gripper.go() # 持ち上げる target_pose = geometry_msgs.msg.Pose() target_pose.position.x = 0.2 target_pose.position.y = 0.0 target_pose.position.z = 0.3 q = quaternion_from_euler(-3.14, 0.0, -3.14/2.0) # 上方から掴みに行く場合 target_pose.orientation.x = q[0] target_pose.orientation.y = q[1] target_pose.orientation.z = q[2] target_pose.orientation.w = q[3] arm.set_pose_target(target_pose) # 目標ポーズ設定 arm.go() # 実行 # 3番の上まで移動する target_pose = geometry_msgs.msg.Pose() target_pose.position.x = marker_pose3.transform.translation.x - 0.06 target_pose.position.y = marker_pose3.transform.translation.y target_pose.position.z = marker_pose3.transform.translation.z + 0.2 q = quaternion_from_euler(-3.14, 0.0, -3.14/2.0) # 上方から掴みに行く場合 target_pose.orientation.x = q[0] target_pose.orientation.y = q[1] target_pose.orientation.z = q[2] target_pose.orientation.w = q[3] arm.set_pose_target(target_pose) # 目標ポーズ設定 arm.go() # 実行 # 0番を3番に下ろす target_pose = geometry_msgs.msg.Pose() target_pose.position.x = marker_pose3.transform.translation.x - 0.06 target_pose.position.y = marker_pose3.transform.translation.y target_pose.position.z = marker_pose3.transform.translation.z + 0.03 q = quaternion_from_euler(-3.14, 0.0, -3.14/2.0) # 上方から掴みに行く場合 target_pose.orientation.x = q[0] target_pose.orientation.y = q[1] target_pose.orientation.z = q[2] target_pose.orientation.w = q[3] arm.set_pose_target(target_pose) # 目標ポーズ設定 arm.go() # 実行 # ハンドを開く gripper.set_joint_value_target([1.0, 1.0]) gripper.go() # SRDFに定義されている"home"の姿勢にする arm.set_named_target("home") arm.go() print("done") if __name__ == '__main__': try: if not rospy.is_shutdown(): main() except rospy.ROSInterruptException:

試したこと

2番と3番のマーカーの上に下ろすのではなく、決めた位置を直接指示
target_pose.position.x = 0.2
target_pose.position.y = 0.2
target_pose.position.z = 0.3
した場合は、エラーが出ずに動きます。

補足情報(FW/ツールのバージョンなど)

zsh

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問