增加一键启动相机脚本,修改目标位置限幅
This commit is contained in:
parent
98797842f4
commit
404ceea8ac
@ -1,12 +1,37 @@
|
|||||||
|
import os
|
||||||
from launch import LaunchDescription
|
from launch import LaunchDescription
|
||||||
|
from launch.actions import ExecuteProcess, TimerAction, IncludeLaunchDescription
|
||||||
|
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
||||||
|
from launch.substitutions import PathJoinSubstitution
|
||||||
from launch_ros.actions import Node
|
from launch_ros.actions import Node
|
||||||
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
import xacro
|
||||||
|
|
||||||
def generate_launch_description():
|
def generate_launch_description():
|
||||||
stereo_proc = Node(
|
camera_init = Node(
|
||||||
package='stereo_image_proc',
|
package='openarm_camera',
|
||||||
executable='stereo_image_proc',
|
executable='camera_pub_node',
|
||||||
|
output='screen'
|
||||||
|
)
|
||||||
|
camera_cal_init = Node(
|
||||||
|
package='openarm_camera',
|
||||||
|
executable='camera_node',
|
||||||
|
output='screen'
|
||||||
|
)
|
||||||
|
stereo_hand_depth = Node(
|
||||||
|
package='openarm_camera',
|
||||||
|
executable='stereo_hand_depth_node',
|
||||||
output='screen'
|
output='screen'
|
||||||
)
|
)
|
||||||
return LaunchDescription([
|
return LaunchDescription([
|
||||||
stereo_proc
|
camera_init,
|
||||||
|
# TimerAction(
|
||||||
|
# period=4.0,
|
||||||
|
# actions=[camera_cal_init]
|
||||||
|
# ),
|
||||||
|
TimerAction(
|
||||||
|
period=8.0,
|
||||||
|
actions=[stereo_hand_depth]
|
||||||
|
),
|
||||||
])
|
])
|
||||||
|
|||||||
@ -26,7 +26,7 @@ class HandFollowMoveIt(Node):
|
|||||||
self.p_prev = None
|
self.p_prev = None
|
||||||
|
|
||||||
self.plan_period = 1.0 # 秒(规划频率)
|
self.plan_period = 1.0 # 秒(规划频率)
|
||||||
self.min_delta = 0.05 # m,手移动超过才重新规划
|
self.min_delta = 0.01 # m,手移动超过才重新规划
|
||||||
self.z_min = 0.15 # 防止撞桌
|
self.z_min = 0.15 # 防止撞桌
|
||||||
self.z_max = 0.60
|
self.z_max = 0.60
|
||||||
self.latest_hand = None
|
self.latest_hand = None
|
||||||
@ -37,6 +37,8 @@ class HandFollowMoveIt(Node):
|
|||||||
# ====== TF ======
|
# ====== TF ======
|
||||||
self.tf_buffer = tf2_ros.Buffer()
|
self.tf_buffer = tf2_ros.Buffer()
|
||||||
self.tf_listener = tf2_ros.TransformListener(self.tf_buffer, self)
|
self.tf_listener = tf2_ros.TransformListener(self.tf_buffer, self)
|
||||||
|
self.send_goal([0.0, 0.15, 0.3])
|
||||||
|
time.sleep(3)
|
||||||
|
|
||||||
# ====== 订阅 ======
|
# ====== 订阅 ======
|
||||||
self.sub = self.create_subscription(
|
self.sub = self.create_subscription(
|
||||||
@ -69,9 +71,9 @@ class HandFollowMoveIt(Node):
|
|||||||
""" p: np.array([x,y,z]) in base_link """
|
""" p: np.array([x,y,z]) in base_link """
|
||||||
|
|
||||||
# 1️⃣ 限幅(按你机械臂改)
|
# 1️⃣ 限幅(按你机械臂改)
|
||||||
p[0] = np.clip(p[0], 0.25, 0.55)
|
p[0] = np.clip(p[0], -0.1, 0.1)
|
||||||
p[1] = np.clip(p[1], -0.30, 0.30)
|
p[1] = np.clip(p[1], -0.20, 0.20)
|
||||||
p[2] = np.clip(p[2], 0.25, 0.30)
|
p[2] = np.clip(p[2], 0.0, 0.30)
|
||||||
|
|
||||||
# 2️⃣ 低通滤波
|
# 2️⃣ 低通滤波
|
||||||
if self.p_prev is None:
|
if self.p_prev is None:
|
||||||
@ -96,17 +98,20 @@ class HandFollowMoveIt(Node):
|
|||||||
def send_goal(self, p):
|
def send_goal(self, p):
|
||||||
pose = PoseStamped()
|
pose = PoseStamped()
|
||||||
pose.header.frame_id = "openarm_body_link0"
|
pose.header.frame_id = "openarm_body_link0"
|
||||||
pose.pose.position.x = float(p[0])
|
# pose.pose.position.x = float(p[0])
|
||||||
pose.pose.position.y = float(p[1])
|
# pose.pose.position.y = float(p[0])
|
||||||
pose.pose.position.z = float(p[2])
|
# pose.pose.position.z = float(p[2])
|
||||||
pose.pose.orientation.w = 1.0
|
pose.pose.orientation.x = 0.72
|
||||||
# pose.pose.position.x = 0.0
|
pose.pose.orientation.y = 0.0
|
||||||
# pose.pose.position.y = 0.153
|
pose.pose.orientation.z = 0.68
|
||||||
# pose.pose.position.z = 0.262
|
pose.pose.orientation.w = 0.0
|
||||||
|
pose.pose.position.x = 0.1
|
||||||
|
pose.pose.position.y = 0.155
|
||||||
|
pose.pose.position.z = 0.31
|
||||||
goal = MoveGroup.Goal()
|
goal = MoveGroup.Goal()
|
||||||
req = goal.request
|
req = goal.request
|
||||||
req.group_name = "left_arm"
|
req.group_name = "left_arm"
|
||||||
req.allowed_planning_time = 2.0
|
req.allowed_planning_time = 5.0
|
||||||
req.max_velocity_scaling_factor = 0.2
|
req.max_velocity_scaling_factor = 0.2
|
||||||
|
|
||||||
pc = PositionConstraint()
|
pc = PositionConstraint()
|
||||||
@ -132,7 +137,9 @@ class HandFollowMoveIt(Node):
|
|||||||
|
|
||||||
# 限制 workspace
|
# 限制 workspace
|
||||||
target = self.latest_hand.copy()
|
target = self.latest_hand.copy()
|
||||||
target[2] = np.clip(target[2], self.z_min, self.z_max)
|
target[0] = np.clip(target[0], -0.1, 0.1)
|
||||||
|
target[1] = np.clip(target[1], -0.2, 0.2)
|
||||||
|
target[2] = np.clip(target[2], 0.0, 0.3)
|
||||||
|
|
||||||
# 判断是否值得重新规划
|
# 判断是否值得重新规划
|
||||||
if self.last_target is not None:
|
if self.last_target is not None:
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<exec_depend>sensor_msgs</exec_depend>
|
<exec_depend>sensor_msgs</exec_depend>
|
||||||
<exec_depend>cv_bridge</exec_depend>
|
<exec_depend>cv_bridge</exec_depend>
|
||||||
<exec_depend>usb_cam</exec_depend>
|
<exec_depend>usb_cam</exec_depend>
|
||||||
<exec_depend>stereo_image_proc</exec_depend>
|
<exec_depend>ros2launch</exec_depend>
|
||||||
|
|
||||||
|
|
||||||
<test_depend>ament_copyright</test_depend>
|
<test_depend>ament_copyright</test_depend>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user