V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  dododada  ›  全部回复第 1 页 / 共 58 页
回复总数  1158
1  2  3  4  5  6  7  8  9  10 ... 58  
1 天前
回复了 bk201 创建的主题 生活 婆媳问题求助过来人
让你丈母娘带啊,最优解;

现在生活条件好,关注产妇心理健康,也有一点说法吧;

反正不要和女人讲道理,不管什么阶段的女人,女人这玩意儿本来就难搞,有一个算一个都是犟种,比如我老婆没有晒过太阳的衣服晾多久都不会收的,问就是没晒太阳没干透;

有兄弟觉得花钱能解决的问题都不是问题,这么多年的经验告诉各位兄弟,婆媳关系和钱没太大关系,女人不会考虑对方的想法和做法,无一例外;

所以最好让你丈母娘带,不行就找个保姆;

你个大老爷们儿,在外面打工要当孙子,回家还要几头受气,你不难受么
开户找驴哥,专业靠谱!
2 天前
回复了 longyunxie 创建的主题 职场话题 从年初到现在投了上百份简历的我
感觉可以转电气,我这边的电气老哥 50 多了;机械老哥也 55 多了,孙子都上幼儿园了
看过,家庭矛盾实在憋不住了,那时候公司给员工提供免费心里咨询,新加坡的机构,据说很贵;

看过之后确实好很多,其实并不能解决问题,但是能疏解情绪,很温和,那种环境很放松;

我妈老是疑神疑鬼怀疑有人要害她,带她去医院看过心理医生,最后开的镇定剂,说是暴恐症,多出去转转少瞎想就行了,然而没啥用;再去精神科看,结论一样,还是开的镇定剂。。。
9 天前
回复了 wang93wei 创建的主题 程序员 感觉这一行,人生尽头就是 AI 了
AI 给的代码,算法公式看不懂怎么办呢,它还正儿八经的给了学习路径,我也大概知道那个路径是对的,但是实在不想学,也学不动了,怎么办呢
9 天前
回复了 sport123 创建的主题 职场话题 想请假去面试,找什么理由请假好
车撞了,去公安局扯皮;真被撞了,顺便面个试
9 天前
回复了 velf8 创建的主题 程序员 嵌入式软件都用哪个 Ai 编程工具的?
@happydezhangning 哈哈,ai 适应不了复杂恶劣的工况
9 天前
回复了 dododada 创建的主题 程序员 工厂业务系统开发的框架
@zhangli2946 odoo 太重了
关于癌症,鼻癌的生存周期,根据亲戚的经验,第一个 5 年周期问题不大,第二个 5 年周期就不好讲了;十多年前农村家庭的总费用大概在 45W ;

乳腺癌,这个早期好像不算什么问题,切掉就 OK 了;我家邻居奶奶十多年了,啥事没有,天天干活儿带孙女;有个朋友女儿初中的时候切的,现在女儿上大学了,也没啥事儿;

不过不生孩子这个要考虑下的,真的要考虑下,另外对象兄妹 4 个,应该没什么担心的吧,不过如果小的没工作负担就有些重了
[email protected] 同求同求
有的内容有视频
2 月 27 日
回复了 dododada 创建的主题 程序员 机械臂工具坐标转换
另外我这个 scara 的上下轴在基座上,Z+轴向上,和普通的 scara 有点不一样
2 月 27 日
回复了 dododada 创建的主题 程序员 机械臂工具坐标转换
@Canva 大佬您好,是的,末端姿态不对

def compute_gripper_target(
camera_data, # [xc, yc, zc, rc] 来自 VisionSystem
robot_state, # [x, y, z, r] 当前 PLC 反馈的坐标
elbow_config, # 当前机械臂的 elbow 状态
robot_joints, # [j1, j2, j3, j4] 当前关节角

# --- 标定参数 ---
camera_offset, # [dx, dy] 相机中心相对于电机中心的偏移
gripper_offset, # [dx, dy] 选定夹爪相对于电机中心的偏移
z_diff, # 夹爪指尖比相机镜头低多少 (正数)

# --- 结构参数 ---
robot_params, # {l1, l2, ...}
cam_rotation=0, # 相机安装旋转角 (0: 图像上=机器后, 90: 图像上=机器右...)
gripper_install_angle=0 # 如果夹爪本身装歪了,也可以传这个
):
try:
logger.info(f"camera data: {camera_data}")
logger.info(f"robot state: {robot_state}")
logger.info(f"elbow config: {elbow_config}")
logger.info(f"robot joints: {robot_joints}")
# 1. 解包
xc, yc, zc, rc = camera_data
curr_x, curr_y, curr_z, curr_r = robot_state
j1, j2, j3, j4 = robot_joints
cam_dx, cam_dy = camera_offset
grip_dx, grip_dy = gripper_offset

# 2. 计算当前末端绝对角度 (弧度)
# 逆时针为正
current_abs_angle_deg = j1 + j2 + j4
rad_curr = math.radians(current_abs_angle_deg)

# 3. 相机坐标 -> 法兰坐标系 (Flange Frame)
# Orbbec: X 右, Y 下. Robot: X 前, Y 左.
# 假设标准安装:相机正对下方,图像上方指向机器人后方(X-)
# 图像 X+ (右) -> 机器人 Y- (右)
# 图像 Y+ (下) -> 机器人 X- (后)

# 将角度转为弧度
# rad_cam = math.radians(cam_rotation) #

# 二维旋转公式:
# X_new = x*cos(theta) - y*sin(theta)
# Y_new = x*sin(theta) + y*cos(theta)

# 计算物料相对于相机中心(但在法兰坐标系方向下)的坐标
# x_f_rot = xc * math.cos(rad_cam) - yc * math.sin(rad_cam)
# y_f_rot = xc * math.sin(rad_cam) + yc * math.cos(rad_cam)

x_f_rot = -yc
y_f_rot = -xc


# 验证一下:
# 如果 rot=-90: cos=0, sin=-1
# x_new = 0 - y*(-1) = y (相机 Y+ 变成 法兰 X+) -> 意味着图像下方是机器人的前方
# y_new = x*(-1) + 0 = -x (相机 X+ 变成 法兰 Y-) -> 意味着图像右方是机器人的右方
# 这与你的物理描述完美契合!

# 加上物理安装偏移 (offset_x, offset_y)
obj_x_flange = x_f_rot + cam_dx
obj_y_flange = y_f_rot + cam_dy

# 4. 法兰坐标 -> 基座坐标 (保持不变)
obj_x_base = curr_x + (obj_x_flange * math.cos(rad_curr) - obj_y_flange * math.sin(rad_curr))
obj_y_base = curr_y + (obj_x_flange * math.sin(rad_curr) + obj_y_flange * math.cos(rad_curr))

# 5. 计算目标角度
# 目标是让夹爪转到 rc 角度。rc 是物料相对于相机的角度。
# 目标绝对角度 = 当前绝对角度 + rc

target_abs_angle = current_abs_angle_deg + rc

# rc = rc + cam_rotation
# phase_diff = cam_rotation - gripper_install_angle
# target_abs_angle = current_abs_angle_deg + rc + phase_diff

rad_target = math.radians(target_abs_angle)

# 6. 计算电机目标坐标
# 目标:让 "夹爪中心" 重合于 "物料中心"
# 电机坐标 = 物料坐标 - 旋转后的夹爪偏移

grip_off_x_world = grip_dx * math.cos(rad_target) - grip_dy * math.sin(rad_target)
grip_off_y_world = grip_dx * math.sin(rad_target) + grip_dy * math.cos(rad_target)

target_motor_x = obj_x_base - grip_off_x_world
target_motor_y = obj_y_base - grip_off_y_world

# 7. Z 轴计算
# zc 是相机测出的深度。如果 zc=200mm, 夹爪比相机长 50mm(z_diff=50)
# 那么还需要下降 200 - 50 = 150mm
target_motor_z = curr_z - (zc - z_diff)

# 8. 反算 PLC 需要的 R (J4 相对角)
# 调用逆解算 J1, J2
ik_res = ScaraKinematics().inverse_kinematics_v2(
target_motor_x, target_motor_y, target_motor_z, 0,
robot_params['l1'], robot_params['l2'], robot_params['z0'], robot_params['nn3'],
config_type=elbow_config
)

if not ik_res:
return None

new_j1 = ik_res['the1']
new_j2 = ik_res['the2']

# J4 = 目标绝对 - (J1 + J2)
target_motor_r = target_abs_angle - (new_j1 + new_j2)

logger.info(f">>>>>>>>>>>>>.target_motor_r: {target_motor_r}")
# 归一化
while target_motor_r > 180: target_motor_r -= 360
while target_motor_r <= -180: target_motor_r += 360

logger.info(f"target coord: {target_motor_x, target_motor_y, target_motor_z, target_motor_r}")

return [target_motor_x, target_motor_y, target_motor_z, target_motor_r]
except Exception as ex:
logger.error(f"{ex} \n{traceback.format_exc()}")
return None

这是坐标转换的代码

{
"name": "1 号夹具",
"camera": {
"offset_x": 96.0,
"offset_y": 8,
"rotation": 0
},
"main_gripper": {
"desc": "夹爪的几何中心",
"offset_x": 130.0,
"offset_y": 0.0,
"z_diff": 142,
"gripper_install_angle": -90
}
}

这是配置,rotation 和 gripper_install_angle 没用上

代码里面的相机坐标和基座标的旋转是硬编码的:

x_f_rot = -yc
y_f_rot = -xc
一般都是搞逆向的去做系统安全,主机安全,手机安全什么的,你这个反过来好像有点难搞
你这个年纪,就不要瞎搞了,这个年纪在年轻化的岗位要求上算老人了;你再出去还要重头来,重头来你也搞不几年,当干电池有寿命的;

还是在派出所好好干吧
2 月 2 日
回复了 he123 创建的主题 程序员 新手恋爱求后续指导
95 年虚岁 32 了啊,喜欢旅行和自由,小兄弟你图啥?
1  2  3  4  5  6  7  8  9  10 ... 58  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2495 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 44ms · UTC 15:59 · PVG 23:59 · LAX 08:59 · JFK 11:59
♥ Do have faith in what you're doing.