12:遨博机器人开发

article/2025/8/18 5:24:39

一、流程步骤


1.获取当前点关节坐标

2.走当前点关节坐标



1.获取目标点x,y,z(位置坐标,以m为单位,需要*1000变成mm)和四元素(位姿坐标)

2.四元素→欧拉角(弧度制)

3.欧拉角(弧度制)→(角度制)

4.得到x,y,z+欧拉角坐标(法兰盘坐标)

5.法兰盘坐标→工具末端坐标

5.保存该点

换一个位置

1.读取该点:工具末端坐标→法兰盘坐标

2.法兰盘坐标:x,y,z + 欧拉角(角度制→弧度制)→目标点四元素

3.获取当前点坐标  + 法兰盘转化后的 x,y,z +  目标点四元素

4.逆解得到目标点的关节坐标,然后走点。



二、程序

.pro

INCLUDEPATH += $$PWD/include/HalconX20
INCLUDEPATH += $$PWD/include/HalconX20/halconcppLIBS += -L$$PWD/lib/HalconX20 -lhalcon
LIBS += -L$$PWD/lib/HalconX20 -lhalconcppINCLUDEPATH += $$PWD/include/AuboX64
LIBS += -L$$PWD/lib/AuboX64 -llibserviceinterface

.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "rsdef.h"
#include "HalconCpp.h"using namespace  HalconCpp;namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();//机械臂控制上下文句柄RSHD g_rshd = -1;bool example_login(RSHD &rshd, const char * addr, int port);  //登录int GetCurrentWayPoint();                                     //获取坐标bool example_moveJ(RSHD rshd);                                //走关节角void GetPoseFromWayPoint(wayPoint_S wayPoint,  HTuple  &Point1);  //路点 转  halcon posevoid WriteHalconPose(HTuple Point1);                              //保存halcon posevoid ChangeFlangerToToolPose(HTuple FlangerCenterPoint,HTuple &ToolInBasePose); //法兰盘转工具//读取 坐标 并且走点void ReadLocalToolPose(HTuple &Point13);    //读取  工具坐标void ChangeToolPoseToFlangerPose(HTuple ToolInBasePose,HTuple &FlangerCenterPoseX);//工具转法兰盘void GetOrientationPoseFromHalconPose(HTuple Point13,Pos &pos,wayPoint_S &wayPoint2);//换算4元素与pose,从halconPosevoid RunInverseKinPoint(Pos pos,wayPoint_S wayPoint2);  //逆解与走点bool result = false;
private slots:void on_pB_ConnectRobtics_clicked();void on_pB_GetCurrentWayPoint_clicked();void on_pB_GetJointPos_clicked();void on_pB_MoveGJJ_clicked();void on_pB_MoveFlangerCenterPose_clicked();void on_RobSpeed_valueChanged(double arg1);private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

.cpp头文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qdebug.h"
#include "qfile.h"
#define ROBOT_ADDR "192.168.2.60"
#define ROBOT_PORT 8899
#define M_PI 3.14159265358979323846
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}

1.连接机器人

void MainWindow::on_pB_ConnectRobtics_clicked()
{if(result){return;}example_login(g_rshd, ROBOT_ADDR, ROBOT_PORT);
}bool MainWindow::example_login(RSHD &rshd, const char * addr, int port)
{rshd = RS_FAILED;//初始化接口库if (rs_initialize() == RS_SUCC){//创建上下文if (rs_create_context(&rshd)  == RS_SUCC ){//登陆机械臂服务器if (rs_login(rshd, addr, port) == RS_SUCC){result = true;//登陆成功ui->textBrowser->append(QString::fromLocal8Bit("连接机器人成功"));std::cout<<"login succ"<<std::endl;}else{//登陆失败std::cerr<<"login failed"<<std::endl;ui->textBrowser->append(QString::fromLocal8Bit("连接机器人失败"));}}else{//创建上下文失败std::cerr<<"rs_create_context error"<<std::endl;ui->textBrowser->append(QString::fromLocal8Bit("连接机器人失败"));}}else{//初始化接口库失败std::cerr<<"rs_initialize error"<<std::endl;ui->textBrowser->append(QString::fromLocal8Bit("连接机器人失败"));}return result;
}

2.获取关节角坐标

void MainWindow::on_pB_GetJointPos_clicked()
{wayPoint_S wayPoint;  //AOBO  自身定位 数据类型if (RS_SUCC==rs_get_current_waypoint(g_rshd, &wayPoint)){//保存 poseHTuple  Point1;Point1.Clear();Point1[0] = wayPoint.jointpos[0];Point1[1] = wayPoint.jointpos[1];Point1[2] = wayPoint.jointpos[2];Point1[3] = wayPoint.jointpos[3];Point1[4] = wayPoint.jointpos[4];Point1[5] = wayPoint.jointpos[5];Point1[6] = 0; //旋转轴 : --- 机器人  2   , halcon  0int Num=ui->PointNum->value();QString FileName="./Image/JointPose"+QString::number(Num)+".dat";HTuple  FileName1=HTuple(FileName.toLatin1().data());  //QString类型  转换到HTuple 方法WritePose(Point1, FileName1);ui->textBrowser->append("jointpos[0]:"+QString::number(Point1[0].D()));ui->textBrowser->append(QString::fromLocal8Bit("坐标保存在:")+FileName);}else{ui->textBrowser->append(QString::fromLocal8Bit("坐标获取失败"));}
}

3.走关节角坐标

//走关节角
void MainWindow::on_pB_MoveGJJ_clicked()
{example_moveJ(g_rshd);
}bool MainWindow::example_moveJ(RSHD rshd)
{bool result = false;RobotRecongnitionParam param;rs_get_robot_recognition_param(rshd, 1, &param);//该位置为机械臂的初始位置(提供6个关节角的关节信息(单位:弧度))//加载点HTuple Point13;int Num=ui->PointNum->value();QString FileName="./Image/JointPose"+QString::number(Num)+".dat";HTuple  FileName1=HTuple(FileName.toLatin1().data());  //QString类型  转换到HTuple 方法try{ReadPose(FileName1, &Point13);}catch(...){ui->textBrowser->append(QString::fromLocal8Bit("读取路点成功"));return false;}double initPos[6]={Point13[0].D(),Point13[1].D(),Point13[2].D(),Point13[3].D(),Point13[4].D(),Point13[5].D()};//首先运动到初始位置if (rs_move_joint(rshd, initPos) == RS_SUCC){result = true;std::cout<<"movej succ"<<std::endl;ui->textBrowser->append(QString::fromLocal8Bit("机器人走路点成功"));}else{std::cerr<<"movej failed!"<<std::endl;ui->textBrowser->append(QString::fromLocal8Bit("机器人走路点失败"));}return result;
}



4.获取X,Y,Z和四元素坐标

   1.获取xyz和四元素

   2.四元素→欧拉角(得到xyz和欧拉角(法兰盘坐标))

   3.法兰盘坐标→工具末端坐标

   4.保存坐标

//获取xyz坐标和四元素
void MainWindow::on_pB_GetCurrentWayPoint_clicked()
{int ret=GetCurrentWayPoint();if(ret==-1){qDebug()<<"read coord faild";}}int MainWindow::GetCurrentWayPoint()
{HTuple FlangerCenterPoint;  //法兰盘坐标HTuple ToolInBasePose;      //工具末端坐标wayPoint_S wayPoint;  //AOBO  自身定位 数据类型//1.获取点--此刻  4元素if (RS_SUCC==rs_get_current_waypoint(g_rshd, &wayPoint)){//为了 后面 图像处理的  计算  ,--xyz  +  欧拉角//2.路点  换算到 pose (xyz  rpy)--法兰盘坐标GetPoseFromWayPoint(wayPoint,FlangerCenterPoint);//3.法兰盘坐标  --换算成为工具坐标  --对照下看看ChangeFlangerToToolPose(FlangerCenterPoint,ToolInBasePose);//4.保存ToolInBasePoseWriteHalconPose(ToolInBasePose);//保存了 工具末端坐标  为了后期 手眼标定的使用return 0;}else{return -1;}}//从路点 换算成 halcon pose 姿态
void  MainWindow::GetPoseFromWayPoint(wayPoint_S wayPoint,  HTuple  &Point1)
{// 1. 得到 xyz 和 四元素,// 2. 四元素 -欧拉角-// 3.-弧度RAD   --角度Deg// 4.--writeposeqDebug()<<"x:"<<wayPoint.cartPos.position.x;  //以米的单位double  x=wayPoint.cartPos.position.x*1000;  //  毫米//转换4元数 到 欧拉角Rpy rpy;HTuple  Rx,Ry,Rz;int ret=rs_quaternion_to_rpy(g_rshd, &wayPoint.orientation , &rpy);//转换下  弧度制 转 角度制TupleDeg(rpy.rx, &Rx);TupleDeg(rpy.ry, &Ry);TupleDeg(rpy.rz, &Rz);//保存 posePoint1.Clear();Point1[0] = wayPoint.cartPos.position.x;Point1[1] = wayPoint.cartPos.position.y;Point1[2] = wayPoint.cartPos.position.z;Point1[3] = Rx;Point1[4] = Ry;Point1[5] = Rz;Point1[6] = 2; //旋转轴 : --- 机器人  2   , halcon  0qDebug()<<QString::fromLocal8Bit("欧拉角 -第1个值:")<<Point1[3].D();}void MainWindow::ChangeFlangerToToolPose(HTuple FlangerCenterPoint,HTuple &ToolInBasePose)
{HTuple TcpPose;          //标定的结果 tool center point ,相对于 法兰盘 的工具中心HTuple I;                //数组下标//看一下  法兰盘 和 工具坐标//偏离值TcpPose.Clear();TcpPose[0] = -0.002479;TcpPose[1] = 0.003514;TcpPose[2] = 0.211092;TcpPose[3] = 0;TcpPose[4] = 0;TcpPose[5] = 0;TcpPose[6] = 2;//法兰盘换算到工具末端//相乘PoseCompose(FlangerCenterPoint, TcpPose, &ToolInBasePose);for (I=3; I<=5; I+=1){if (0 != (int(HTuple(ToolInBasePose[I])>180))){ToolInBasePose[I] = HTuple(ToolInBasePose[I])-360;}}
}void  MainWindow::WriteHalconPose(HTuple Point1)
{//./Image  判断QString str=  "./Image";QFile File00(str);if(!File00.exists()){qDebug()<<"file not exist";return ;}int Num=ui->PointNum->value();QString FileName="./Image/Pose"+QString::number(Num)+".dat";HTuple  FileName1=HTuple(FileName.toLatin1().data());  //QString类型  转换到HTuple 方法//乘以tcp标定结果 就得到工具末端坐标WritePose(Point1, FileName1);ui->textBrowser->append(QString::fromLocal8Bit("坐标保存在:")+FileName);ui->textBrowser->append("x:"+QString::number(Point1[0].D()));ui->textBrowser->append("y:"+QString::number(Point1[1].D()));ui->textBrowser->append("z:"+QString::number(Point1[2].D()));ui->textBrowser->append("Rx:"+QString::number(Point1[3].D()));ui->textBrowser->append("Ry:"+QString::number(Point1[4].D()));ui->textBrowser->append("Rz:"+QString::number(Point1[5].D()));}


5.走xyz rx,ry,rz

1.读取坐标

2.工具坐标→法兰盘坐标

3.欧拉角→四元素

4.逆解关节角坐标

//走  基于base坐标系的 法兰盘坐标
void MainWindow::on_pB_MoveFlangerCenterPose_clicked()
{bool result = false;HTuple ToolInBasePose;  //工具末端坐标HTuple FlangerCenterPose;  //法兰盘坐标RobotRecongnitionParam param;rs_get_robot_recognition_param(g_rshd, 1, &param);//该位置为机械臂的初始位置(提供6个关节角的关节信息(单位:弧度))//1.读取坐标ReadLocalToolPose(ToolInBasePose);//2.工具转法兰盘ChangeToolPoseToFlangerPose(ToolInBasePose,FlangerCenterPose);//3.欧拉角换算4元数 与pos//XYZ  RPY  ---欧拉角--Point13    ---->逆解成 关节角aubo_robot_namespace::wayPoint_S wayPoint2;Pos pos;GetOrientationPoseFromHalconPose(FlangerCenterPose,pos,wayPoint2);// 4.逆解与走点RunInverseKinPoint(pos,wayPoint2);}//加载本地坐标
void MainWindow::ReadLocalToolPose(HTuple &Point13)
{//加载点int Num=ui->PointNum->value();QString FileName="./Image/Pose"+QString::number(Num)+".dat";HTuple  FileName1=HTuple(FileName.toLatin1().data());  //QString类型  转换到HTuple 方法try{ReadPose(FileName1, &Point13);//工具转法兰盘}catch(...){ui->textBrowser->append(QString::fromLocal8Bit("读取路点成功"));return ;}
}void  MainWindow::ChangeToolPoseToFlangerPose(HTuple ToolInBasePose,HTuple &FlangerCenterPoseX)
{//工具末端换算法兰盘HTuple  I, TcpPose,PoseInvert1;//偏离值TcpPose.Clear();TcpPose[0] = -0.002479;TcpPose[1] = 0.003514;TcpPose[2] = 0.211092;TcpPose[3] = 0;TcpPose[4] = 0;TcpPose[5] = 0;TcpPose[6] = 2;//逆变换PoseInvert(TcpPose, &PoseInvert1);PoseCompose(ToolInBasePose, PoseInvert1, &FlangerCenterPoseX);for (I=3; I<=5; I+=1){if (0 != (int(HTuple(FlangerCenterPoseX[I])>180))){FlangerCenterPoseX[I] = HTuple(FlangerCenterPoseX[I])-360;}}
}//欧拉角换算成为4元数
void MainWindow::GetOrientationPoseFromHalconPose(HTuple Point13,Pos &pos,wayPoint_S &wayPoint2)
{//目标位置pos = {Point13[0].D(), Point13[1].D(),Point13[2].D()};Rpy rpy;  //已有 欧拉角 ,目标 得到4元数 --wayPoint.orientationHTuple  Rx,Ry,Rz;  //弧度制TupleRad(Point13[3].D(), &Rx); //角度 换算成为 弧度TupleRad(Point13[4].D(), &Ry);TupleRad(Point13[5].D(), &Rz);rpy.rx=Rx[0].D();  //HTUPLE  换算成为 结构体 double类型rpy.ry=Ry[0].D();rpy.rz=Rz[0].D();//欧拉角换算成为4元数int ret=rs_rpy_to_quaternion(g_rshd, &rpy, &wayPoint2.orientation);
}//逆解位置信息
void MainWindow::RunInverseKinPoint(Pos pos,wayPoint_S wayPoint2)
{//获取当前路点信息aubo_robot_namespace::wayPoint_S wayPoint1;//逆解位置信息aubo_robot_namespace::wayPoint_S targetPoint;//目标位置对应的关节角double targetRadian[ARM_DOF] = {0};if (RS_SUCC == rs_get_current_waypoint(g_rshd, &wayPoint1)){//参考当前姿态逆解得到六个关节角if (RS_SUCC == rs_inverse_kin(g_rshd, wayPoint1.jointpos, &pos, &wayPoint2.orientation, &targetPoint)){//将得到目标位置,将6关节角度设置为用户给定的角度(必须在+-175度)targetRadian[0] = targetPoint.jointpos[0];targetRadian[1] = targetPoint.jointpos[1];targetRadian[2] = targetPoint.jointpos[2];targetRadian[3] = targetPoint.jointpos[3];targetRadian[4] = targetPoint.jointpos[4];targetRadian[5] = targetPoint.jointpos[5];HTuple Pose,Deg1;Pose[0]=targetRadian[0];TupleDeg( Pose[0],&Deg1);ui->textBrowser->append(" joint Deg"+QString::number(Deg1[0].D()));for(int i=0; i<6 ;i++){qDebug()<<" i"<<i  <<" targetRadian"<<targetRadian[i];}//轴动到目标位置if (RS_SUCC == rs_move_line(g_rshd, targetRadian)){std::cout<<"at target"<<std::endl;}else{std::cerr<<"move joint error"<<std::endl;}}else{std::cerr<<"ik failed"<<std::endl;}}else{std::cerr<<"get current waypoint error"<<std::endl;}
}

6.直线速度

void MainWindow::on_RobSpeed_valueChanged(double arg1)
{/** 模拟业务 **//** 接口调用: 初始化运动属性 ***/qDebug()<<"arg1:="<<arg1;rs_init_global_move_profile(g_rshd);/** 接口调用: 设置关节型运动的最大加速度 ***/aubo_robot_namespace::JointVelcAccParam jointMaxAcc;jointMaxAcc.jointPara[0] = 50.0/180.0*M_PI;jointMaxAcc.jointPara[1] = 50.0/180.0*M_PI;jointMaxAcc.jointPara[2] = 50.0/180.0*M_PI;jointMaxAcc.jointPara[3] = 50.0/180.0*M_PI;jointMaxAcc.jointPara[4] = 50.0/180.0*M_PI;jointMaxAcc.jointPara[5] = 50.0/180.0*M_PI;   //接口要求单位是弧度rs_set_global_joint_maxacc(g_rshd, &jointMaxAcc);/** 接口调用: 设置关节型运动的最大速度 ***/aubo_robot_namespace::JointVelcAccParam jointMaxVelc;jointMaxVelc.jointPara[0] = 50.0/180.0*M_PI;jointMaxVelc.jointPara[1] = 50.0/180.0*M_PI;jointMaxVelc.jointPara[2] = 50.0/180.0*M_PI;jointMaxVelc.jointPara[3] = 50.0/180.0*M_PI;jointMaxVelc.jointPara[4] = 50.0/180.0*M_PI;jointMaxVelc.jointPara[5] = 50.0/180.0*M_PI;   //接口要求单位是弧度rs_set_global_joint_maxvelc(g_rshd, &jointMaxVelc);/** 接口调用: 初始化运动属性 ***/rs_init_global_move_profile(g_rshd);qDebug()<<"arg2:="<<arg1;/** 接口调用: 设置末端型运动的最大加速度   直线运动属于末端型运动***/double endMoveMaxAcc;endMoveMaxAcc = 0.2;   //单位米每秒rs_set_global_end_max_line_acc(g_rshd, endMoveMaxAcc);rs_set_global_end_max_angle_acc(g_rshd, endMoveMaxAcc);/** 接口调用: 设置末端型运动的最大速度 直线运动属于末端型运动***/double endMoveMaxVelc;endMoveMaxVelc =ui->RobSpeed->value();   //单位米每秒qDebug()<<"arg3:="<<arg1;ui->textBrowser->append(QString::fromLocal8Bit("当前速度是")+QString::number(endMoveMaxVelc)+"m/s");rs_set_global_end_max_line_velc(g_rshd, endMoveMaxVelc);rs_set_global_end_max_angle_velc(g_rshd, endMoveMaxVelc);}


http://www.hkcw.cn/article/LmyUPdAJHg.shtml

相关文章

婚内强奸案当事人已与妻子协议离婚 申请国家赔偿33万

婚内强奸案当事人已与妻子协议离婚 申请国家赔偿33万!5月29日下午,40岁的尹某在律师的陪同下,向河南省濮阳县人民检察院递交了《国家赔偿申请书》,申请国家赔偿33万元,并要求追责相关办案人员。此前,尹某因“婚内强奸”被羁押了285天。在未被关押之前,尹某妻子两次起诉离…

女厅官杨慧被双开 曾花4000万买别墅 权钱交易终落马

女厅官杨慧被双开曾花4000万买别墅!贵州省纪委监委对中共贵州省第十三届委员会委员、贵州省卫生健康委员会原党组书记杨慧严重违纪违法问题进行了立案审查调查。调查显示,杨慧丧失理想信念,背离初心使命,搞政治攀附;违背组织原则,不按规定报告个人有关事项,在干部调动工…

谢锋说哪里有封锁哪里就有突围 科技创新勇往直前

中国驻美大使谢锋在华盛顿的一次活动中谈及中国的科技创新历程时提到,面对封锁和风浪,中国总能找到突围之路。此次活动由中国驻美国大使馆举办,名为“我的中国相册——我的中国足迹”影片首映会暨现代化的中国体验活动。谢锋在致辞中强调,中国科技创新历经重重困难持续升级…

年轻人开始在生产线上操作机械臂 蓝领知识化趋势显现

富士康郑州科技园是苹果全球最大的生产基地之一。富士康的郑州厂区已有15年的历史,从iPhone 4s一直延续到最新的iPhone 16系列。一些制程已经发展到全自动化,比如电路板工厂高度自动化,技术含量高,处于全球领先水平。苹果在华供应商正在参与制造苹果所有最先进的产品,苹果…

学习路之PHP--easyswoole操作数据库

学习路之PHP--easyswoole操作数据库 0、安装orm插件一、创建数据库二、创建模型三、控制器显示四、效果五、问题 0、安装orm插件 composer require easyswoole/orm一、创建数据库 表&#xff1a; CREATE TABLE cases (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,titl…

LangChain快速筑基(带代码)P1-输入控制与输出解析

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 引言基础代码LangChain python官方文档 输出可控…

在哈佛毕业礼上演讲的中国女孩是谁?江玉蓉来自中国青岛

在哈佛毕业礼上演讲的中国女孩是谁?5月29日,在哈佛大学毕业典礼上,三名毕业生代表在演讲时强调,要保持学生群体的多元化和国际化,并在特朗普政府的攻击面前坚持真理。其中一位演讲者是来自中国的江玉蓉(音译)。她说,自己从小就相信世界正在变成一个小村庄,并在哈佛找到…

日本北海道东部近海发生5.4级地震

日本北海道东部近海发生地震。5月30日电,据日本气象厅消息,当地时间5月30日7时23分左右,日本北海道东部近海地区发生5.4级地震,最大震感为震度3,震源深度50公里。责任编辑:0882

ubuntu24.04启用fcitx 5

在ubuntu24.04中启用fcitx 5 ubuntu24.04系统自带三种键盘输入法系统&#xff1a; IBusFcitx 5XIM 系统默认使用的是IBus,这个拼音输入少了一些智能的味道&#xff0c;比较影响输入体验。换用Fcitx 5后&#xff0c;加上搜狗细胞词库&#xff0c;感觉很丝滑&#xff0c;特记录…

C++多态的详细讲解

【本节目标】 1. 多态的概念 2. 多态的定义及实现 3. 抽象类 4. 多态的原理 5. 单继承和多继承关系中的虚函数表 前言 需要声明的&#xff0c;本博客中的代码及解释都是在 vs2013 下的 x86 程序中&#xff0c;涉及的指针都是 4bytes 。 如果要其他平台下&#xff0c;部…

上海女子新装修房子被人拆光 乌龙事件背后的真相

最近,家住浦东新区“芳草苑”小区的张女士向《新闻坊》同心服务平台反映,她家刚刚完成了老房新装,原本计划第二天从出租屋搬回去。但当她回家查看收尾进度时,发现厨房和卫生间里的设施设备被三个陌生人拆了。这些设施和装修材料都是全新的、一线品牌的定制款,这让张女士非…

范丞丞广电培训手写笔记曝光 青年演员心得分享

5月30日,“陈都灵杨超越范丞丞广电培训笔记”的词条冲上热搜。此前,5月18日至21日,2025年青年演员和经纪人培训班(第二期)在广电总局研修学院顺义校区举办。这是广电总局组织的总第6期青年演员和经纪人培训班,共有34名青年演员和23名经纪人参加了为期四天的封闭学习。参加…

万达已出售近五分之一的万达广场!

万达已出售近五分之一的万达广场。距离卖掉万达集团北京总部还不到半年时间,王健林再次出售手中资产。2025年5月20日,根据国家市场监督管理总局官网信息:太盟(珠海)管理咨询合伙企业(有限合伙)、高和丰德(北京)企业管理服务有限公司、腾讯控股有限公司、北京市潘达商业…

YOLO12改进-模块-引入AFE模块 增强模型对复杂场景(如杂乱背景、小目标、半透明物体)的特征提取能力

在语义分割任务中&#xff0c;复杂场景&#xff08;如杂乱背景、半透明物体&#xff09;下的语义线索捕捉是难点。现有方法&#xff08;如基于 CNN 和 Transformer 的模型&#xff09;存在以下局限&#xff1a; CNN&#xff1a;受限于局部感受野&#xff0c;难以建模长…

华为OD机试真题——字母组合过滤组合字符串(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

男子深夜爬泰山崩溃痛哭:大喊要回家找媳妇

男子深夜爬泰山崩溃痛哭。全网疯传!夜爬泰山避坑指南:为何有人登顶后痛哭?这些细节能救命!泰山景区数据显示,夜爬游客受伤率同比激增,其中78%因未携带照明设备跌落台阶。最近曝光的"大学生夜爬冻伤事件",正是轻视了泰山顶与山脚高达15℃的温差。正值暑期夜爬高…

网友在摩洛哥偶遇成都“洋中医”狂飙四川话

网友在摩洛哥偶遇成都“洋中医”。首位外籍中医博士迪亚拉在摩洛哥被偶遇与成都“老乡”狂飙四川话5月26日,有网友发布视频称在摩洛哥偶遇首位外籍中医博士迪亚拉,两人狂飙四川话,还约在成都吃火锅。迪亚拉,1984年获奖学金到中国学习,于1997年获得成都中医药大学博士学位,…

端午假期首都博物馆延长开放时间 六月活动精彩纷呈

端午假期首都博物馆延长开放时间!为了满足广大观众的参观需求,首都博物馆2025年6月将进行部分场次的延时开放活动。端午假期及6月份延时开放相关事宜如下:2025年5月31日(端午节、周六)至6月2日(周一)正常开放。延时开放场次为5月31日(端午节、周六)、6月7日(周六)、…

老人骑电动车捎人遇车祸后被判赔14万 好心搭载惹争议

老人骑电动车捎人遇车祸后被判赔14万 好心搭载惹争议!2023年8月15日清晨,浙江省东阳市六石街道徐庄村的卢某芳老人骑电动车前往镇上参加领鸡蛋的促销活动。在现场,她遇到了隔壁村的老友吕某,在返程时捎带吕某一同回家,尽管这需要绕路。不幸的是,在返程途中,电动车与一辆…

辣目洋子回母校重大讲座分享 勇敢追梦不惧质疑

5月29日,李嘉琦回到母校重庆大学,参加新闻学院“优秀校友回母校”系列讲座。她以“梦想?梦幻?人生也是一部电视剧”为主题,与学弟学妹们分享了自己在母校时的学习生活和进入娱乐圈的经历。李嘉琦从小有一个当演员的梦想,但不知道如何实现。高考时,她从内蒙古考入重庆大学…