4:机器人目标识别无序抓取程序二次开发

判断文件是否存在


//判断文件在不在
int HandEyeCalib::AnsysFileExists(QString FileAddr)
{QFile File1(FileAddr);if(!File1.exists()){QMessageBox::warning(this,QString::fromLocal8Bit("提示"),FileAddr+QString::fromLocal8Bit("文件不存在"));return -1;}else{return 0;}
}

图像九点坐标的获取与显示

1.首先进行九点标定

在UI界面上添加九点标定QT设计师类

在主程序中声明此类头文件,并添加此界面

.h文件

private:   
//手眼标定类HandEyeCalib *m_PHandEyeCalib=NULL;

.cpp文件

  m_PHandEyeCalib=new HandEyeCalib();ui->MainTab->addTab(m_PHandEyeCalib,QString::fromLocal8Bit("标定"));if(m_PHandEyeCalib!=NULL){delete m_PHandEyeCalib;m_PHandEyeCalib=NULL;}


第一步应该是打开一张拍摄好的九点图像,或者是打开相机现场采集。

则读图操作为:

//读图
void HandEyeCalib::on_pB_OpenImage_clicked()
{//调取 不同的图像 在这里完成测试//传入路径QString path = QFileDialog::getOpenFileName(this,"选择图片","","JPG文件(*.jpg;*.bmp)");if(path == "") return;//read  imageHTuple file2=HTuple(path.toStdString().c_str());ReadImage(&halconImage,file2);//2592 1544SetPart(WindowHandle, 0, 0, 1544, 2592);DispObj(halconImage,WindowHandle);
}

绘制像素坐标点或者圆

可以现在HALCON中编写程序,如何导出C++添加到QT中

//绘制点
void MainWindow::on_action_triggered()
{HObject Cross;DrawPoint(WindowHandle, &Row, &Column);GenCrossContourXld(&Cross, Row, Column, 116, 0.785398);DispObj(Cross, WindowHandle);
}

由于绘制的点,在九点标定类中需要用到,所以要把得到的XY坐标点声明在全局变量中

HTuple Row, Column; //绘制点

然后在九点标定类的上面引用这两个变量(这是个通用方法,如果两个类都需要用到同一个变量,则可以使用此方法;也可以利用信号与槽机制)

extern HTuple Row, Column;  //画点   -

在得到像素点之后,则可以显示加载在界面上

//加载显示像素点
void HandEyeCalib::on_pB_LoadPixelCoord_clicked()
{// Row  的长度为0// try catch    ----HTuple Length;TupleLength(Row, &Length);if(Length[0].D()==0){QMessageBox::warning(this,"warning",QString::fromLocal8Bit("数据异常"));return;}//点1if(ui->spinBox_PointNum2->value()==1){//界面的点1  的 xy  更新为  row  columnui->x_17->setValue(Row[0].D());   //HTUPLE  转换为 doubleui->y_17->setValue(Column[0].D());}//点2if(ui->spinBox_PointNum2->value()==2){//界面的点1  的 xy  更新为  row  columnui->x_18->setValue(Row[0].D());   //HTUPLE  转换为 doubleui->y_18->setValue(Column[0].D());}//点3if(ui->spinBox_PointNum2->value()==3){//界面的点1  的 xy  更新为  row  columnui->x_19->setValue(Row[0].D());   //HTUPLE  转换为 doubleui->y_19->setValue(Column[0].D());}//点4if(ui->spinBox_PointNum2->value()==4){//界面的点1  的 xy  更新为  row  columnui->x_20->setValue(Row[0].D());   //HTUPLE  转换为 doubleui->y_20->setValue(Column[0].D());}//点5if(ui->spinBox_PointNum2->value()==5){//界面的点1  的 xy  更新为  row  columnui->x_21->setValue(Row[0].D());   //HTUPLE  转换为 doubleui->y_21->setValue(Column[0].D());}//点6if(ui->spinBox_PointNum2->value()==6){//界面的点1  的 xy  更新为  row  columnui->x_22->setValue(Row[0].D());   //HTUPLE  转换为 doubleui->y_22->setValue(Column[0].D());}//点7if(ui->spinBox_PointNum2->value()==7){//界面的点1  的 xy  更新为  row  columnui->x_23->setValue(Row[0].D());   //HTUPLE  转换为 doubleui->y_23->setValue(Column[0].D());}//点8if(ui->spinBox_PointNum2->value()==8){//界面的点1  的 xy  更新为  row  columnui->x_24->setValue(Row[0].D());   //HTUPLE  转换为 doubleui->y_24->setValue(Column[0].D());}//点9if(ui->spinBox_PointNum2->value()==9){//界面的点1  的 xy  更新为  row  columnui->x_25->setValue(Row[0].D());   //HTUPLE  转换为 doubleui->y_25->setValue(Column[0].D());}}


机械臂坐标的获取与显示

包含库目录

include文件

lib文件

realse文件

.pro目录

INCLUDEPATH += $$PWD/include/libfairinoLIBS += -L$$PWD/lib/FairinoLib/ -lfairino
LIBS += -L$$PWD/lib/FairinoLib/ -lfairinod

头文件声明

#include <QWidget>
#include "robot.h"
#ifdef WINDOWS_OPTION
#include <string.h>
#include <windows.h>
#elif LINUX_OPTION
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <unistd.h>
#endif#include <chrono>
#include <thread>

添加机械臂的UI类,并在主函数中声明添加界面

.h文件

 //法奥机器人类FairinoRobtics *m_pFairinoRobtics=NULL;

.cpp文件

  //机器人UI类的实例化m_pFairinoRobtics= new FairinoRobtics();ui->MainTab->addTab(m_pFairinoRobtics,QString::fromLocal8Bit("法奥机器人"));if(m_pFairinoRobtics!=NULL){delete m_pFairinoRobtics;m_pFairinoRobtics=NULL;}

获取坐标

在机械臂类中,实例化具体的对象 —名字叫:robot

    FRRobot robot;//声明机器人对象

连接机械臂

void FairinoRobtics::on_pushButton_2_clicked()
{robot.RPC("192.168.1.2");
}

获取当前坐标点


void FairinoRobtics::on_ptn_ModifyA_clicked()
{GetTargetTCPPose(nowPos);//获取坐标函数RobX=nowPos.tran.x;RobY=nowPos.tran.y;}//获取坐标定义
void FairinoRobtics::GetTargetTCPPose(DescPose &nowPos)
{int ret=robot.GetActualTCPPose(0,&nowPos);ui->Dx->setValue(nowPos.tran.x);ui->Dy->setValue(nowPos.tran.y);ui->Dz->setValue(nowPos.tran.z);ui->Drx->setValue(nowPos.rpy.rx);ui->Dry->setValue(nowPos.rpy.ry);ui->Drz->setValue(nowPos.rpy.rz);}

机械臂走点

void FairinoRobtics::on_pushButton_clicked()
{DescPose desc_pos;//创建一个笛卡尔空间位置数据memset(&desc_pos, 0, sizeof(DescPose));//初始化笛卡尔空间位置数据double x = ui->Dx->value();//取得ui空间的值(doubleSpinBox)double y = ui->Dy->value();//取得ui空间的值(doubleSpinBox)double z = ui->Dz->value();//取得ui空间的值(doubleSpinBox)double rx = ui->Drx->value();//取得ui空间的值(doubleSpinBox)double ry = ui->Dry->value();//取得ui空间的值(doubleSpinBox)double rz = ui->Drz->value();//取得ui空间的值(doubleSpinBox)desc_pos.tran.x = x;   //为desc_pos赋值desc_pos.tran.y = y;desc_pos.tran.z = z;desc_pos.rpy.rx = rx;desc_pos.rpy.ry = ry;desc_pos.rpy.rz = rz;int tool = ui->sTool->value();int user = ui->sUser->value();double vel = 100;double acc = 100;double ovl = 100;double blendT = -1;double config = -1;robot.MoveCart(&desc_pos,tool,user,vel,acc,ovl,blendT,config);
}

在获取到坐标之后,需要把前两个参数传给九点标定的类中,所以需要把下面这两个坐标声明为全局变量


double  RobX=1.5;
double  RobY=1.6;

然后在九点标定类中引用这两个点

extern double  RobX;
extern double  RobY;

加载显示机械臂的点

void HandEyeCalib::on_pB_LoadRobCoord_clicked()
{if(ui->spinBox_PointNum1->value()==1)  //value 获取值{ui->x_1->setValue(RobX);   //机器人类的变量  extern  引用,赋值 设置值ui->y_1->setValue(RobY);   //机器人类的变量  extern  引用,赋值 设置值}//点2if(ui->spinBox_PointNum1->value()==2)  //value 获取值{ui->x_2->setValue(RobX);   //机器人类的变量  extern  引用,赋值 设置值ui->y_2->setValue(RobY);   //机器人类的变量  extern  引用,赋值 设置值}//点3if(ui->spinBox_PointNum1->value()==3)  //value 获取值{ui->x_3->setValue(RobX);   //机器人类的变量  extern  引用,赋值 设置值ui->y_3->setValue(RobY);   //机器人类的变量  extern  引用,赋值 设置值}//点2if(ui->spinBox_PointNum1->value()==4)  //value 获取值{ui->x_4->setValue(RobX);   //机器人类的变量  extern  引用,赋值 设置值ui->y_4->setValue(RobY);   //机器人类的变量  extern  引用,赋值 设置值}//点2if(ui->spinBox_PointNum1->value()==5)  //value 获取值{ui->x_5->setValue(RobX);   //机器人类的变量  extern  引用,赋值 设置值ui->y_5->setValue(RobY);   //机器人类的变量  extern  引用,赋值 设置值}//点2if(ui->spinBox_PointNum1->value()==6)  //value 获取值{ui->x_6->setValue(RobX);   //机器人类的变量  extern  引用,赋值 设置值ui->y_6->setValue(RobY);   //机器人类的变量  extern  引用,赋值 设置值}//点2if(ui->spinBox_PointNum1->value()==7)  //value 获取值{ui->x_7->setValue(RobX);   //机器人类的变量  extern  引用,赋值 设置值ui->y_7->setValue(RobY);   //机器人类的变量  extern  引用,赋值 设置值}//点2if(ui->spinBox_PointNum1->value()==8)  //value 获取值{ui->x_8->setValue(RobX);   //机器人类的变量  extern  引用,赋值 设置值ui->y_8->setValue(RobY);   //机器人类的变量  extern  引用,赋值 设置值}//点2if(ui->spinBox_PointNum1->value()==9)  //value 获取值{ui->x_9->setValue(RobX);   //机器人类的变量  extern  引用,赋值 设置值ui->y_9->setValue(RobY);   //机器人类的变量  extern  引用,赋值 设置值}
}


上面已经完整对像素和机械臂的坐标加载显示;为了方便需要保存这些点

//保存所有点
void HandEyeCalib::on_pB_SaveParamters_clicked()
{//机器人坐标  ---QSeting   ,htuple WriteTuple//像素坐标  PixelX,PixelYHTuple RobX,RobY,PixelX,PixelY;RobX = HTuple();RobX[0]=ui->x_1->value();RobX[1]=ui->x_2->value();RobX[2]=ui->x_3->value();RobX[3]=ui->x_4->value();RobX[4]=ui->x_5->value();RobX[5]=ui->x_6->value();RobX[6]=ui->x_7->value();RobX[7]=ui->x_8->value();RobX[8]=ui->x_9->value();RobY = HTuple();RobY[0]=ui->y_1->value();RobY[1]=ui->y_2->value();RobY[2]=ui->y_3->value();RobY[3]=ui->y_4->value();RobY[4]=ui->y_5->value();RobY[5]=ui->y_6->value();RobY[6]=ui->y_7->value();RobY[7]=ui->y_8->value();RobY[8]=ui->y_9->value();PixelX=HTuple();PixelX[0]=ui->x_17->value();PixelX[1]=ui->x_18->value();PixelX[2]=ui->x_19->value();PixelX[3]=ui->x_20->value();PixelX[4]=ui->x_21->value();PixelX[5]=ui->x_22->value();PixelX[6]=ui->x_23->value();PixelX[7]=ui->x_24->value();PixelX[8]=ui->x_25->value();PixelY = HTuple();PixelY[0]=ui->y_17->value();PixelY[1]=ui->y_18->value();PixelY[2]=ui->y_19->value();PixelY[3]=ui->y_20->value();PixelY[4]=ui->y_21->value();PixelY[5]=ui->y_22->value();PixelY[6]=ui->y_23->value();PixelY[7]=ui->y_24->value();PixelY[8]=ui->y_25->value();//判断文件夹是否存在QString  FileAddr="./data/Param";QFile File1(FileAddr);if(File1.exists()){WriteTuple(RobX, "./data/Param/robX.tup");WriteTuple(RobY, "./data/Param/robY.tup");WriteTuple(PixelX, "./data/Param/RowS.tup");WriteTuple(PixelY, "./data/Param/ColumnS.tup");ui->textBrowser->append(QString::fromLocal8Bit("保存成功"));}else{ui->textBrowser->append(FileAddr+QString::fromLocal8Bit("文件不存在,无法保存"));}}

重新读图保存的坐标

void HandEyeCalib::on_pB_LoadParameters_clicked()
{HTuple RobX,RobY;QString  FileAddr="./data/Param";QFile File1(FileAddr);try{if(File1.exists()){ReadTuple("./data/Param/robX.tup", &RobX);ReadTuple("./data/Param/robY.tup", &RobY);ui->textBrowser->append(QString::fromLocal8Bit("读取成功"));ui->x_1->setValue(RobX[0].D());ui->x_2->setValue(RobX[1].D());ui->x_3->setValue(RobX[2].D());ui->x_4->setValue(RobX[3].D());ui->x_5->setValue(RobX[4].D());ui->x_6->setValue(RobX[5].D());ui->x_7->setValue(RobX[6].D());ui->x_8->setValue(RobX[7].D());ui->x_9->setValue(RobX[8].D());ui->y_1->setValue(RobY[0].D());ui->y_2->setValue(RobY[1].D());ui->y_3->setValue(RobY[2].D());ui->y_4->setValue(RobY[3].D());ui->y_5->setValue(RobY[4].D());ui->y_6->setValue(RobY[5].D());ui->y_7->setValue(RobY[6].D());ui->y_8->setValue(RobY[7].D());ui->y_9->setValue(RobY[8].D());}else{ui->textBrowser->append(FileAddr+QString::fromLocal8Bit("文件不存在,无法保存"));}}catch(...){ui->textBrowser->append(FileAddr+QString::fromLocal8Bit("文件缺失"));}}

因为保存点和重新读图点,都是数组点;可以现在HALCON软件中写好程序,然后导出更方便


最终生成标定文件

void HandEyeCalib::on_pB_GenCalibResult_clicked()
{HTuple  RowS, ColumnS, RobX, RobY;HTuple  HomMat2D;//1.获取 4---9个点的  像素坐标系RowS = HTuple();ColumnS = HTuple();RobX = HTuple();RobY = HTuple();QString  FileAddr;FileAddr="./data/Param/robX.tup";//判断文件在不在int ret=AnsysFileExists( FileAddr);if(ret==-1){return;}FileAddr="./data/Param/robY.tup";ret=AnsysFileExists( FileAddr);if(ret==-1){return;}FileAddr="./data/Param/RowS.tup";ret=AnsysFileExists( FileAddr);if(ret==-1){return;}FileAddr="./data/Param/ColumnS.tup";ret=AnsysFileExists( FileAddr);if(ret==-1){return;}try{ReadTuple("./data/Param/robX.tup", &RobX);ReadTuple("./data/Param/robY.tup", &RobY);ReadTuple("./data/Param/RowS.tup", &RowS);ReadTuple("./data/Param/ColumnS.tup", &ColumnS);//生成一个矩阵  HomMat2DVectorToHomMat2d(RowS, ColumnS, RobX, RobY, &HomMat2D);WriteTuple(HomMat2D, "./data/Param/HomMat2D.tup");  //标定文件QMessageBox::warning(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("创建标定矩阵成功"));return;}catch(...){QMessageBox::warning(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("创建标定矩阵失败"));return;}}




HALCON程序附录

保存、读图数组、绘制点、绘制圆


九点标定
 

    *1.获取 4---9个点的  像素坐标系RowS:=[]ColumnS:=[]RobX:=[]RobY:=[]dev_open_window(0, 0, 512, 512, 'black', WindowHandle)*     read_image(Image, '标定')
*     draw_circle(WindowHandle, Row, Column, Radius)
*     CenterCoord:=[Row, Column]Pose:=[253.871, 342.389]write_tuple(Pose,'./像素/Pose0.dat')Pose:=[253.487, 591.21]write_tuple(Pose,'./像素/Pose1.dat')Pose:=[251.388, 849.435]write_tuple(Pose,'./像素/Pose2.dat')Pose:=[496.451, 340.278]write_tuple(Pose,'./像素/Pose3.dat')Pose:=[499.304, 590.602]write_tuple(Pose,'./像素/Pose4.dat')Pose:=[502.83, 851.243]write_tuple(Pose,'./像素/Pose5.dat')Pose:=[707.115, 339.089]write_tuple(Pose,'./像素/Pose6.dat')Pose:=[700.256, 591.442]write_tuple(Pose,'./像素/Pose7.dat')Pose:=[694.649, 853.365]write_tuple(Pose,'./像素/Pose8.dat')*获取9个点的像素点for I := 0 to 8 by 1FileName:='./像素/Pose'+I+'.dat'read_tuple(FileName, Pose)RowS[I]:=Pose[0]ColumnS[I]:=Pose[1]endfor*获取9个点的机械手坐标*2获取4---9个点  机械手 坐标!  (mm)for I := 11 to 19 by 1FileName:='./坐标/Pose'+I$'01d'+'.dat'read_pose(FileName, Pose)RobX[I-11]:=Pose[0]RobY[I-11]:=Pose[1]endfor*两者进行仿射变换 ,就可以得到  像素坐标和 机械手坐标的变换 。 *相机固定位置 ,   机械手 定点拍照 都可以使用 *如果机械手移动拍照 ,  + 机械手 和标定 时刻拍照间的差值 !*生成一个矩阵  HomMat2Dvector_to_hom_mat2d(RowS ,ColumnS,RobX,RobY, HomMat2D)write_tuple(HomMat2D, 'HomMat2D')**识别图像的坐标 假如是RowS[0]  ,ColumnS[0]*根据 这个矩阵 能否求出机械手坐标!Row1:=512Column1:= 640affine_trans_point_2d(HomMat2D,253.871, 342.389,Qx, Qy)

TCP标定

1.法兰盘姿态换算到工具姿态

     *法兰盘坐标 换算到 工具末端坐标*X219.108Y579.008Z364.915RX-179.026RY0.549RZ-64.079,2*法兰盘 坐标  记录pose1:=[219.108,579.008,364.915,-179.026,0.549,-64.079,2]*坐标换算  旋转轴2 换算到旋转轴0convert_pose_type(pose1, 'Rp+T', 'gba', 'point', Pose11)*标定的 工具与法兰盘的 位置 tcptcpPose:=[-5.593,7.166,249.3040,0,0,0,0]*法兰盘 换算到 工具坐标系pose_compose( Pose11,tcpPose,  PoseCompose1)*工具坐表 旋转 状态变换convert_pose_type(PoseCompose1, 'Rp+T', 'abg', 'point', Pose22)if(Pose22[3]>180)Pose22[3]:=Pose22[3]-360 endifif(Pose22[4]>180)Pose22[4]:=Pose22[4]-360 endifif(Pose22[5]>180)Pose22[5]:=Pose22[5]-360 endif*Pose22 就是最终的姿态结果*[212.986, 584.908, 115.59, 180.92, 0.636037, 64.0786,2]

2.工具姿态换算到法兰盘姿态

     * 工具末端坐标换算到法兰盘坐标 *X212.988Y584.915Z115.59RX-179.026RY0.549RZ-64.079Pose22:=[212.986, 584.908, 115.59, -179.026, 0.549, -64.079, 2]*坐标换算  旋转轴2 换算到旋转轴0convert_pose_type(Pose22, 'Rp+T', 'gba', 'point', Pose2)*标定的 工具与法兰盘的 位置 tcptcpPose:=[-5.593,7.166,249.3040,0,0,0,0]*对标定结果进行逆变换pose_invert(tcpPose, PoseInvert1)pose_compose( Pose2, PoseInvert1,  Pose11)*工具坐表 旋转 状态变换convert_pose_type(Pose11, 'Rp+T', 'abg', 'point', Pose1)if(Pose1[3]>180)Pose1[3]:=Pose1[3]-360 endifif(Pose1[4]>180)Pose1[4]:=Pose1[4]-360 endifif(Pose1[5]>180)Pose1[5]:=Pose1[5]-360 endif*Pose1 就是最终的姿态结果*[219.108, 579.008, 364.915, -179.026, 0.549, -64.079, 2]*法兰盘 坐标  记录*pose1:=[219.108,579.008,364.915,-179.026,0.549,-64.079,2]

已经看到这里了,点个赞和关注吧!

      刚开始写文章,如有不足请多多包含;之后会持续更新关于(halcon学习,VS联合编程,QT联合编程,C++,C#,Opencv图像处理库,三维点云库pcl,相机以及机器人的二次开发)等系统化学习文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Touching China】2007-2011

文章目录 1、20072、20083、20094、20105、2011 1、2007 钱学森 身份&#xff1a;中国航天事业奠基人&#xff0c;中国科学院、中国工程院资深院士获奖事迹&#xff1a;钱学森1955年冲破重重阻力回到祖国&#xff0c;长期担任火箭导弹和航天器研制的技术领导职务。他以总体、动…

linux常用基础命令_最新版

常用命令 查看当前目录下个各个文件大小查看当前系统储存使用情况查看当前路径删除当前目录下所有包含".log"的文件linux开机启动jar更改自动配置文件后操作关闭自启动linux静默启动java服务查询端口被占用查看软件版本重启关机开机启动取别名清空当前行创建文件touc…

Mamba+Attention+CNN 预测模型:破局长程依赖的计算机视觉新范式

目录 一、引言:从 CNN 到 Mamba 的视觉建模进化之路 二、模型关键组成部分解析 (一)CNN 基干:局部特征提取器 (二)Mamba 块:长程依赖建模核心 (三)注意力机制:特征交互增强器 三、模型创新点 四、模型原理与作用 五、优缺点对比 六、应用领域 一、引言:从 C…

LangChain4j +DeepSeek大模型应用开发——8 Function Calling 函数调用

Function Calling 函数调用也叫 Tools 工具 入门案例 例如&#xff0c;大语言模型本身并不擅长数学运算。如果应用场景中偶尔会涉及到数学计算&#xff0c;我们可以**为他提供一个 “数学工具”。**当我们提出问题时&#xff0c;大语言模型会判断是否使用某个工具。 创建工具…

【Prometheus-Mongodb Exporter安装配置指南,开机自启】

目录 内容概述 一、创建MongoDB监控专用用户二、安装MongoDB Exporter三、启动Exporter服务四、配置Systemd服务五、服务管理命令六、Prometheus集成配置七、Grafana看板 内容概述 本教程详细演示了如何在Linux系统中部署MongoDB Exporter以监控MongoDB数据库&#xff0c;并将…

在 Ubuntu 上安装 cPanel

开始之前&#xff0c;请确保拥有一台 Ubuntu 服务器&#xff0c;推荐使用 Ubuntu 22.04 LTS。如果没有&#xff0c;可以查看免费服务器&#xff1a; 11个免费 VPS&#xff0c;够用一辈子了&#xff01;&#xff08;2025最新&#xff09;Top 11 免费VPS推荐平台对比&#xff08…

【算法基础】插入排序算法 - JAVA

一、算法基础 1.1 什么是插入排序 插入排序是一种简单直观的排序算法&#xff0c;它的工作原理类似于我们打牌时整理手牌的过程。插入排序的核心思想是将数组分为已排序和未排序两部分&#xff0c;每次从未排序部分取出一个元素&#xff0c;插入到已排序部分的适当位置。 1.…

WEB前端小练习——记事本

一、登陆页面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>记事本登录注册</title><link…

[ACTF2020 新生赛]Include [ACTF2020 新生赛]Exec

[ACTF2020 新生赛]Include 因为前端过滤的太多了 所以直接使用 日志包含 搞 包含这个 /var/log/nginx/access.log [ACTF2020 新生赛]Include蚁剑连接 翻看 flag{1ce7a81e-0339-44ef-a398-a7784d3efe37} [ACTF2020 新生赛]Exec [ACTF2020 新生赛]Exec 127.0.0.1 |echo <?…

VFS Global 携手 SAP 推动数字化转型

2025年5月2日&#xff0c;SAP 公司宣布&#xff0c;全球领先的签证、领事和技术服务提供商 VFS Global 将采用 SAP 的多项核心软件解决方案&#xff0c;推动其全球政务服务和跨境流动解决方案迈向全面数字化和智能化。此次合作标志着 VFS Global 在 AI 赋能的政府科技&#xff…

GTC2025全球流量大会:领驭科技以AI云端之力,助力中国企业出海破浪前行

在全球化与数字化浪潮下&#xff0c;AI技术正成为中国企业出海的重要驱动力。一方面&#xff0c;AI通过语言处理、数据分析等能力显著提升出海企业的运营效率与市场适应性&#xff0c;尤其在东南亚等新兴市场展现出"高性价比场景适配"的竞争优势&#xff1b;另一方面…

安全漏洞扫描费用受哪些因素影响?市场价格区间是多少?

安全漏洞扫描费用是个复杂且关键的话题。它涉及多种影响因素。合理的费用可让企业有效防范安全风险。下面我们深入探讨一番。 市场价格区间 安全漏洞扫描的费用在市场上差别很大。小型企业进行简单扫描&#xff0c;可能只要几千元。大型企业做全面的深度扫描&#xff0c;费用…

n8n工作流自动化平台的实操:解决中文乱码

解决问题&#xff1a; 通过ftp读取中文内容的文件&#xff0c;会存在乱码&#xff0c;如下图&#xff1a; 解决方案 1.详见《安装 iconv-lite》 2.在code节点&#xff0c;写如下代码&#xff1a; const iconv require(iconv-lite);const items $input.all(); items.forEa…

豪越科技消防立库方案:实现应急物资高效管理

在消防救援工作中&#xff0c;应急物资管理是至关重要的一环。然而&#xff0c;当前应急物资管理的现状却令人担忧。传统的应急物资管理方式存在诸多弊端&#xff0c;严重影响了消防救援的效率和效果。 走进一些传统的消防仓库&#xff0c;映入眼帘的往往是杂乱无章的存储场景。…

zabbix 重置登录密码

概述 本节介绍在 Zabbix 中重置用户密码的步骤。 步骤 如果您忘记了 Zabbix 密码并且无法登录&#xff0c;请联系您的 Zabbix 管理员。 超级管理员用户可以更改用户 配置表单 中所有用户的密码。 如果超级管理员忘记了密码并且无法登录&#xff0c;则必须运行以下 SQL 查询…

生成树、Prime、Kruskal

1、任何一个带权无向连通图的最小生成树——可能是不唯一的。 2、给定有权无向图的邻接矩阵如下&#xff0c;其最小生成树的总权重是&#xff1a;14 3、给定有权无向图如下。关于其最小生成树&#xff0c;最小生成树不唯一&#xff0c;其总权重为23。 4、给出如下图所示的具有…

用Suno V4.5试了一下1850字的歌词进行创作出来了6分钟的歌曲

我的宝贝V1,未来AI视界,5分钟 之前的Suno 3和Suno 4的版本&#xff0c;创作的音乐最长是4分钟&#xff0c;这里最大的问题就是&#xff0c;唱到4分钟歌曲就突然断了&#xff0c;那么只能使用续写的方式进行创作。对于续写的问题&#xff0c;其一增加用户的使用和理解成本&…

机器人编程基础---C语言中的表达式和求值

C语言中的表达式和求值 C语言中的表达式和求值表达式示例代码示例说明C语言中的表达式和求值 表达式是运算符和操作数(变量、常量、表达式等)的组合,它们可以产生一个值。 表达式示例 int x = 10, y = 20; int z = x + y * 2; // 根据运算符优先级,先计算y*2,然后计算x…

[UVM]在SoC中用寄存器模型backdoor访问寄存器的案例

在SoC中用寄存器模型backdoor访问寄存器的案例 摘要:在 UVM (Universal Verification Methodology) 验证环境中,寄存器模型是验证 DUT (Design Under Test) 寄存器行为的重要工具。特别是对于层次化的验证环境(如 IP 到 Sub-system 再到 SoC 的集成),使用 UVM 寄存…

NV203NV207SSD固态闪存NV208NV213

NV203NV207SSD固态闪存NV208NV213 美光SSD全解析&#xff1a;NV203/NV207/NV208/NV213技术矩阵 一、产品定位与技术脉络 在存储技术迭代浪潮中&#xff0c;美光NV系列产品构建起多层次的技术矩阵。NV203作为入门级SATA SSD&#xff0c;主打成本控制与基础性能平衡&#xff0c…