Opengl实验报告及源代码实验五 几何变换

Opengl实验报告及源代码实验五  几何变换
Opengl实验报告及源代码实验五  几何变换

实验报告

学生姓名:学号:专业班级:

实验类型:□验证□综合□设计□创新实验日期:2018.11 实验成绩:

一、实验名称

实验五几何变换

二、实验内容

1.编写程序绘制若干三维物体,将其放置在场景的不同位置,并让物体绕自身的某条

轴做旋转运动;

2.编写一个可在三维场景中自由移动和改变观察方向的摄像机,利用键盘和鼠标控制

摄像机实现三维场景的动态漫游。

三、实验目的

1.了解缩放、平移和旋转等模型变换的实现原理,掌握模型变换矩阵的使用方法,能

够利用模型变换建立三维场景;

2.了解视点变换的实现原理,掌握视点变换与摄像机功能的具体关系和利用视点变换

矩阵构造摄像机的具体方法。

3.了解投影变换和视口变换的实现原理,掌握投影变换与视口变换在场景缩放和显示

中的作用。

四、实验步骤

1.建立立方体几何模型。定义立方体顶点的位置坐标和纹理坐标,设置不同立方体在

世界坐标系中的位置。

// Set up vertex data and attribute pointers

GLfloat vertices[] = {

-0.5f, -0.5f, -0.5f, 0.0f, 0.0f,

0.5f, -0.5f, -0.5f, 1.0f, 0.0f,

0.5f, 0.5f, -0.5f, 1.0f, 1.0f,

0.5f, 0.5f, -0.5f, 1.0f, 1.0f,

-0.5f, 0.5f, -0.5f, 0.0f, 1.0f,

-0.5f, -0.5f, -0.5f, 0.0f, 0.0f,

-0.5f, -0.5f, 0.5f, 0.0f, 0.0f,

0.5f, -0.5f, 0.5f, 1.0f, 0.0f,

0.5f, 0.5f, 0.5f, 1.0f, 1.0f,

0.5f, 0.5f, 0.5f, 1.0f, 1.0f,

-0.5f, 0.5f, 0.5f, 0.0f, 1.0f,

-0.5f, -0.5f, 0.5f, 0.0f, 0.0f,

-0.5f, 0.5f, 0.5f, 1.0f, 0.0f,

-0.5f, 0.5f, -0.5f, 1.0f, 1.0f,

-0.5f, -0.5f, -0.5f, 0.0f, 1.0f,

-0.5f, -0.5f, -0.5f, 0.0f, 1.0f,

-0.5f, -0.5f, 0.5f, 0.0f, 0.0f,

-0.5f, 0.5f, 0.5f, 1.0f, 0.0f,

0.5f, 0.5f, 0.5f, 1.0f, 0.0f,

0.5f, 0.5f, -0.5f, 1.0f, 1.0f,

0.5f, -0.5f, -0.5f, 0.0f, 1.0f,

0.5f, -0.5f, -0.5f, 0.0f, 1.0f,

0.5f, -0.5f, 0.5f, 0.0f, 0.0f,

0.5f, 0.5f, 0.5f, 1.0f, 0.0f,

-0.5f, -0.5f, -0.5f, 0.0f, 1.0f,

0.5f, -0.5f, -0.5f, 1.0f, 1.0f,

0.5f, -0.5f, 0.5f, 1.0f, 0.0f,

0.5f, -0.5f, 0.5f, 1.0f, 0.0f,

-0.5f, -0.5f, 0.5f, 0.0f, 0.0f,

-0.5f, -0.5f, -0.5f, 0.0f, 1.0f,

-0.5f, 0.5f, -0.5f, 0.0f, 1.0f,

0.5f, 0.5f, -0.5f, 1.0f, 1.0f,

0.5f, 0.5f, 0.5f, 1.0f, 0.0f,

0.5f, 0.5f, 0.5f, 1.0f, 0.0f,

-0.5f, 0.5f, 0.5f, 0.0f, 0.0f,

-0.5f, 0.5f, -0.5f, 0.0f, 1.0f };

// World space positions of our cubes glm::vec3 cubePositions[] = {

glm::vec3(0.0f, 0.0f, 0.0f),

glm::vec3(2.0f, 5.0f, -15.0f),

glm::vec3(-1.5f, -2.2f, -2.5f),

glm::vec3(-3.8f, -2.0f, -12.3f),

glm::vec3(2.4f, -0.4f, -3.5f),

glm::vec3(-1.7f, 3.0f, -7.5f),

glm::vec3(1.3f, -2.0f, -2.5f),

glm::vec3(1.5f, 2.0f, -2.5f),

glm::vec3(1.5f, 0.2f, -1.5f),

glm::vec3(-1.3f, 1.0f, -1.5f)

};

2.加载立方体模型的顶点数据。建立VAO、VBO 对象变量,编写顶点数据加载函数,

组织并加装几何模型的数据。

GLuint VBO, VAO;

glGenVertexArrays(1, &VAO);

glGenBuffers(1, &VBO);

glBindVertexArray(VAO);

glBindBuffer(GL_ARRAY_BUFFER, VBO);

glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

// Position attribute

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)0);

glEnableVertexAttribArray(0);

// TexCoord attribute

glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));

glEnableVertexAttribArray(2);

glBindVertexArray(0); // Unbind VAO

3.加载纹理图像并生成纹理对象。编写纹理加装函数,创建纹理对象、设置纹理属性、

加装纹理图像生成2D纹理。

// Load and create a texture

GLuint texture1;

GLuint texture2;

// ====================

// Texture 1

// ====================

glGenTextures(1, &texture1);

glBindTexture(GL_TEXTURE_2D, texture1);

// All upcoming GL_TEXTURE_2D operations now have effect on our texture object

// Set our texture parameters

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

// Set texture wrapping to GL_REPEAT

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

// Set texture filtering

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

// Load, create texture and generate mipmaps

int width, height;

unsigned char* image = SOIL_load_image("wall.jpg", &width, &height, 0, SOIL_LOAD_RGB);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

glGenerateMipmap(GL_TEXTURE_2D);

SOIL_free_image_data(image);

glBindTexture(GL_TEXTURE_2D, 0); // Unbind texture when done, so we won't accidentily mess up our texture.

// ===================

// Texture 2

// ===================

glGenTextures(1, &texture2);

glBindTexture(GL_TEXTURE_2D, texture2);

// Set our texture parameters

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

// Set texture filtering

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

// Load, create texture and generate mipmaps

image = SOIL_load_image("test_rect.png", &width, &height, 0, SOIL_LOAD_RGB);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

glGenerateMipmap(GL_TEXTURE_2D);

SOIL_free_image_data(image);

glBindTexture(GL_TEXTURE_2D, 0);

4.编写顶点着色器,在顶点着色器中处理顶点数据,执行模型、视点和投影变换。编

写片段着色器,在片段着色器中进行纹理采样和多重纹理贴图。

#version 330 core

layout (location = 0) in vec3 position;

layout (location = 2) in vec2 texCoord;

out vec2 TexCoord;

uniform mat4 model;

uniform mat4 view;

uniform mat4 projection;

void main()

{

gl_Position = projection * view * model * vec4(position, 1.0f);

TexCoord = vec2(texCoord.x, 1.0 - texCoord.y);

}

#version 330 core

in vec2 TexCoord;

out vec4 color;

uniform sampler2D ourTexture1;

uniform sampler2D ourTexture2;

void main()

{

color = mix(texture(ourTexture1, TexCoord), texture(ourTexture2, TexCoord), 0.2);

}

5.编写场景渲染函数,在其中绑定 VAO、启用着色器、激活纹理对象,并将纹理数据

传送到片段着色器中指定的纹理采样器变量,再调用绘制函数进行场景绘制。

// Bind Textures using texture units

glActiveTexture(GL_TEXTURE0);

glBindTexture(GL_TEXTURE_2D, texture1);

glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture1"), 0);

glActiveTexture(GL_TEXTURE1);

glBindTexture(GL_TEXTURE_2D, texture2);

glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture2"), 1);

// Activate shader

https://www.360docs.net/doc/b95754695.html,e();

6.编写摄像机类,定以摄像机的位置、朝向、视点空间坐标系等属性变量,和构造函

数、视点空间坐标系构造函数。

// Create transformations

glm::mat4 view;

glm::mat4 projection;

view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f));

projection = glm::perspective(45.0f, (GLfloat)WIDTH / (GLfloat)HEIGHT, 0.1f, 100.0f);

// Get their uniform location

GLint modelLoc = glGetUniformLocation(ourShader.Program, "model");

GLint viewLoc = glGetUniformLocation(ourShader.Program, "view");

GLint projLoc = glGetUniformLocation(ourShader.Program, "projection");

// Pass the matrices to the shader

glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));

// Note: currently we set the projection matrix each frame, but since the projection matrix rarely changes it's often best practice to set it outside the main loop only once.

glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));

glBindVertexArray(VAO);

for (GLuint i = 0; i < 10; i++)

{

// Calculate the model matrix for each object and pass it to shader before drawing

glm::mat4 model;

model = glm::translate(model, cubePositions[i]);

GLfloat angle = 20.0f * i;

model = glm::rotate(model, angle, glm::vec3(1.0f, 0.3f, 0.5f));

glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));

glDrawArrays(GL_TRIANGLES, 0, 36);

}

glBindVertexArray(0);

// Swap the screen buffers

glfwSwapBuffers(window);

}

7.实现摄像机类的成员函数以及涉嫌机漫游的键盘控制函数。

Camera::Camera(glm::vec3 position, glm::vec3 up, GLfloat yaw, GLfloat pitch)

: front(glm::vec3(0.0f, 0.0f, -1.0f)), movementSpeed(SPEED),

mouseSensitivity(SENSITIVTY),

zoom(ZOOM)

{

this->position = position;

this->worldUp = up;

this->yaw = yaw;

this->pitch = pitch;

this->updateCameraVectors();

}

Camera::Camera(GLfloat posX, GLfloat posY, GLfloat posZ,

GLfloat upX, GLfloat upY, GLfloat upZ,

GLfloat yaw, GLfloat pitch)

: front(glm::vec3(0.0f, 0.0f, -1.0f)), movementSpeed(SPEED),

mouseSensitivity(SENSITIVTY),

zoom(ZOOM)

{

this->position = glm::vec3(posX, posY, posZ);

this->worldUp = glm::vec3(upX, upY, upZ);

this->yaw = yaw;

this->pitch = pitch;

this->updateCameraVectors();

}

void Camera::processKeyboard(Camera_Movement direction, float deltaTime)

{

float velocity = movementSpeed * deltaTime;

if (direction == FORWARD)

position += front * velocity;

if (direction == BACKWARD)

position -= front * velocity;

if (direction == LEFT)

position -= right * velocity;

if (direction == RIGHT)

position += right * velocity;

}

void Camera::processMouseMovement(float xoffset, float yoffset, GLboolean constrainPitch)

{

xoffset *= mouseSensitivity;

yoffset *= mouseSensitivity;

yaw += xoffset;

pitch += yoffset;

if (constrainPitch) {

if (pitch > 89.0f)

pitch = 89.0f;

if (pitch < -89.0f)

pitch = -89.0f;

}

updateCameraVectors();

}

void Camera::processMouseScroll(float yoffset)

{

if (zoom >= 1.0f && zoom <= 45.0f)

zoom -= yoffset;

if (zoom <= 1.0f)

zoom = 1.0f;

if (zoom >= 45.0f)

zoom = 45.0f;

}

glm::mat4 Camera::getViewMatrix()

{

return glm::lookAt(position, position + front, up);

}

void Camera::updateCameraVectors()

{

front.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch));

front.y = sin(glm::radians(pitch));

front.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch)); front = glm::normalize(front);

right = glm::normalize(glm::cross(front, worldUp));

up = glm::normalize(glm::cross(right, front));

}

五、实验结果

六、实验体会

这次实验是做几何变换,在实验中是把课堂是上学到的图像几何变换的矩阵表示应用到模型的变换上。另外还掌握了模型变换矩阵的使用方法和视点变换与摄像机功能的具体关系以及利用视点变换矩阵构造摄像机的具体方法。

在实验过程中,对摄像机、视点这些概念有了更加具体的理解。现在对OpenGL编程的具体步骤已经比较熟悉,所以在实验过程中没有遇见太大问题,是一次比较顺利的

实验。

最新西华大学机器人创新设计实验报告(工业机械手模拟仿真)

实验报告 (理工类) 课程名称: 机器人创新实验 课程代码: 6003199 学院(直属系): 机械学院机械设计制造系 年级/专业/班: 2010级机制3班 学生姓名: 学号: 实验总成绩: 任课教师: 李炜 开课学院: 机械工程与自动化学院 实验中心名称: 机械工程基础实验中心

一、设计题目 工业机器人设计及仿真分析 二、成员分工:(5分) 三、设计方案:(整个系统工作原理和设计)(20分) 1、功能分析 工业机器人由操作机(机械本体)、控制器、伺服驱动系统和检测传感装置构成,是一种仿人操作、自动控制、可重复编程、能在三维空间完成各种作业的机电一体化自动化生产设备。特别适合于多品种、变批量的柔性生产。它对稳定、提高产品质量,提高生产效率,改善劳动条件和产品的快速更新换代起着十分重要的作用。机器人技术是综合了计算机、控制论、机构学、信息和传感技术、人工智能、仿生学等多学科而形成的高新技术,是当代研究十分活跃,应用日益广泛的领域。机器人应用情况,是一个国家工业自动化水平的重要标志。机器人并不是在简单意义上代替人工的劳动,而是综合了人的特长和机器特长的一种拟人的电子机械装置,既有人对环境状态的快速反应和分析判断能力,又有机器可长时间持续工作、精确度高、抗恶劣环境的能力,从某种意义上说它也是机器的进化过程产物,它是工业以及非产业界的重要生产和服务性设备,也是先进制造技术领域不可缺少的自动化设备。 本次我们小组所设计的工业机器人主要用来完成以下任务: (1)、完成工业生产上主要焊接任务; (2)、能够在上产中完成油漆、染料等喷涂工作; (3)、完成加工工件的夹持、送料与转位任务; (5)、对复杂的曲线曲面类零件加工;(机械手式数控加工机床,如英国DELCAM公司所提供的风力发电机叶片加工方案,起辅助软体为powermill,本身为DELCAM公司出品)

AMI、HDB3码型变换实验

实验二码型变换AMI/HDB3实验 一.实验目的 1.了解二进制单极性码变换为AMI/HDB3 码的编码规则; 2.熟悉AMI码与HDB3 码的基本特征; 3.熟悉HDB3 码的编译码器工作原理和实现方法; 4.根据测量和分析结果,画出电路关键部位的波形; 二.实验仪器 1.JH7001 通信原理综合实验系统一台 2.双踪示波器一台 3.函数信号发生器一台 三、实验任务与要求 1实验原理和电路说明 1.1.1 实验原理 AMI 码的全称是传号交替反转码。这是一种将消息代码0(空号)和1(传号)按如下规则进行编码的码:代码的0 仍变换为传输码的0,而把代码中的1 交替地变换为传输码的+1、–1、+1、–1…由于AMI 码的传号交替反转,故由它决定的基带信号将出现正负脉冲交替,而0 电位保持不变的规律。由此看出,这种基带信号无直流成分,且只有很小的低频成分,因而它特别适宜在不允许这些成分通过的信道中传输。 由AMI 码的编码规则看出,它已从一个二进制符号序列变成了一个三进制符号序列,即把一个二进制符号变换成一个三进制符号。把一个二进制符号变换成一个三进制符号所构成的码称为1B/1T 码型。。AMI 码对应的波形是占空比为0.5 的双极性归零码,即脉冲宽度τ与码元宽度(码元周期、码元间隔)TS 的关系是τ=0.5TS。 AMI 码除有上述特点外,还有编译码电路简单及便于观察误码情况等优点,它是一种基本的线路码,并得到广泛采用。但是,AMI 码有一个重要缺点,即接收端从该信号中来获取定时信息时,由于它可能出现长的连0 串,因而会造成提取定时信号的困难。为了保持AMI 码的优点而克服其缺点,人们提出了许多种类的改进AMI 码,HDB3 码就是其中有代表性的一种。 HDB3码的全称是三阶高密度双极性码。它的编码原理是这样的:先把消息代码变换成AMI码,然后去检查AMI 码的连0串情况,当没有4个以上连0串时,则这时的AMI码就是HDB3码;当出现4个以上连0串时,则将每4个连0小段的第4个0变换成与其前一非0符号(+1 或–1)同极性的符号。显然,这样做可能破坏“极性交替反转”的规律。这个符号就称为破坏符号,用V 符号表示(即+1 记为+V, –1记为–V)。为使附加V符号后的序列不破坏“极性交替反转”造成的无直流特性,还必须保证相邻V符号也应极性交替。这一点,当相邻符号之间有奇数个非0符号时,则是能得到保证的;当有偶数个非0 符号时,则就得不到保证,这时再将该小段的第1个0 变换成+B 或–B符号的极性与前一非0 符号的相反,并让后面的非0符号从V 符号开始再交替变化。 虽然HDB3码的编码规则比较复杂,但译码却比较简单。从上述原理看出,每一个破坏

程序设计实验报告

学生实验报告 院系:测绘学院 专业班级:测绘13级3班 学号:2013305517 学生姓名:王泽 指导教师:郭辉老师 2016年05月20日

安徽理工大学实验报告 实验课程名称:数据结构与软件开发上机实验 开课院系及实验室:测绘学院红楼二楼机房 实验1 编程基本知识练习 实验目的: 通过该实验课内容的练习,学生应掌握VB 编程的基本语法、变量的定义、数组(动态数组)的定义、VB 语言中子过程与函数的定义以及文本文件的读写等知识。 实验内容: 1)变量的定义动态数组的定义与应用; 2)矩阵的加、减、乘运算(定义Sub()子过程或Function()来实现); 3)数据文件的建立、数据的读取与写入。 实验步骤: 1.编辑界面 1.1 打开VB 编程工具,进入编程主界面。

1.2 在窗体上新建“读入数据”和“输出数据”两个按钮。 1.3 双击“窗体”进入代码输入界面,进行代码编辑。 2.用VB 编写的源代码 2.1 矩阵基本运算源码详见附录一。 (1)两矩阵相加 (2)两矩阵相减 (3)矩阵转置 (4)两矩阵相乘 (5)矩阵求逆 2.2 文本文件(本实验中data.txt)的读取源代码 (1)建立文本文件并输入数据 在桌面上新建一“data.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\data.txt”)。输入以下内容: 6,7,4,0.005 A,35.418 B,45.712 C,25.270

D,24.678 在桌面上新建一“result.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\result.txt”)。(2)从文本文件中读数据 Dim linedata as string, m_GaochaN as integer,m_Pnumber as integer,m_knPnumber as integer,M as Double,k1 as integer 'linedata 为存储文本文件一行信息的字符串变量 Dim a() as String,H() as Double 'a()为存储点名,H()存储高程 Open“C:\Users\ WH\Desktop\练习\data.txt”For Input As #1 Line Input #1, linedata k = Split(linedata, ",") m_GaochaN = Val(k(0)) m_Pnumber = Val(k(1)) m_knPnumber = Val(k(2)) M = CDbl(k(3)) For k1 = 1 To m_knPnumber Line Input #1, linedata k = Split(linedata, ",") a(k1)= k(0) GetstationNumber (a) H(k1) = CDbl(k(1)) Next Close #1 (3)将读入点名存储到点名数组中,且返回该点名所对应编号 Function GetstationNumber(name As String) Dim i As Integer For i = 1 To m_Pnumber If P_Name(i) <> "" Then '将待查点名与已经存入点名数组的点比较 If P_Name(i) = name Then GetstationNumber = i Exit For End If Else '待查点是新的点名,将新点名放到P_Name 数组中 P_Name(i) = name GetstationNumber = i Exit For End If Next i End Function (4)从文本文件中写数据(将从data.txt 读入的数据,写入到result.txt 文件中) Open“C:\Users\ WH\Desktop\ 练习\result.txt” For Output As #1 outstring = outstring + str(m_GaochaN) +","

机器人实验报告

智能机器人实验报告1 学院:化学与材料科学学院 学号: 2015100749 姓名:朱巧妤 评阅人:评阅时间:

实验1 电驱动与控制实验 (一)实验目的 熟悉和掌握机器人开发环境使用,超声传感器、碰撞传感器、温度传感器、颜色传感器等常见机器人传感器工作原理与使用方法,熟悉机器人平台使用与搭建;设计一个简单的机器人,并采用多种程序设计方法使它能动起来。 (二)仪器工具及材料 计算机、机器人实验系统、机器人软件开发平台、编程下载器等设备。 (三)内容及程序 实验内容: (1)碰撞传感器原理与应用; (2)颜色传感器原理与应用; (3)测距传感器原理与应用; (4)温度传感器原理与应用; (5)熟悉开发环境使用与操作;设计一个简单轮式移动机器人,并使用图形化编程方式实现对机器人的控制,通过该设计掌握机器人开发平台的结构设计、程序设计等基本方法。 实验步骤: 1)首先确定本次要做的机器人为货架物品颜色辨别的机器人。 2)根据模型将梁、轴、插销、螺丝等零件拼装成一个货架台 3)将货架台安装上可识别颜色的摄像头,并装在控制器上方,将两个摄像头的连接线分 别插入控制器的传感器接口,将显示器连接线插入传感器接口。 4)拼装完成后将控制器连接电脑,在电脑上运用Innobot软件对机器人进行颜色识别动 作的编程,拖动颜色传感器模块,对应选择数码管接口以及两个摄像头的接口,使机器人能将货架台上物品的颜色反应到数码管上。 5)将所编程序进行上传。测试看机器人是否能将颜色反映到显示器上完成所编动作。

(四)结果及分析 使用梁和轴以及螺钉拼装出货架台。 将拼装好的货架台装到传感器上。

HDB3码型变换实验报告

实验二HDB3码型变换实验 一、实验目的 1、了解几种常用的数字基带信号的特征和作用。 2、掌握HDB3码的编译规则。 3、了解滤波法位同步在的码变换过程中的作用。 二、实验器材 1、主控&信号源、2号、8号、13号模块各一块 2、双踪示波器一台 3、连接线若干 三、实验原理 1、HDB3编译码实验原理框图

HDB3编译码实验原理框图 2、实验框图说明 我们知道AMI编码规则是遇到0输出0,遇到1则交替输出+1和-1。而HDB3编码由于需要插入破坏位B,因此,在编码时需要缓存3bit的数据。当没有连续4个连0时与AMI编码规则相同。当4个连0时最后一个0变为传号A,其极性与前一个A的极性相反。若该传号与前一个1的极性不同,则还要将这4个连0的第一个0变为B,B的极性与A相同。实验框图中编码过程是将信号源经程序处理后,得到HDB3-A1和HDB3-B1两路信号,再通过电平转换电路进行变换,从而得到HDB3编码波形。 同样AMI译码只需将所有的±1变为1,0变为0即可。而HDB3译码只需找到传号A,将传号和传号前3个数都清0即可。传号A的识别方法是:该符号的极性与前一极性相同,该符号即为传号。实验框图中译码过

程是将HDB3码信号送入到电平逆变换电路,再通过译码处理,得到原始码元。 四、实验步骤 实验项目一HDB3编译码(256KHz归零码实验) 概述:本项目通过选择不同的数字信源,分别观测编码输入及时钟,译码输出及时钟,观察编译码延时以及验证HDB3编译码规则。 1、关电,按表格所示进行连线。 2、开电,设置主控菜单,选择【主菜单】→【通信原理】→【HDB3编译码】→【256K归零码实验】。将模块13的开关S3分频设置拨为0011,即提取512K同步时钟。 3、此时系统初始状态为:编码输入信号为256K的PN序列。 4、实验操作及波形观测。

浙江大学Linux程序设计实验报告

Linux程序设计实验报告1 ——操作系统基本命令使用 一、实验目的 1.通过对Emacs、vi、vim、gedit文本编辑器的使用,掌握在Linux环境下文本文件的编辑方法; 2.通过对常用命令mkdir、cp、cd、ls、mv、chmod、rm等文件命令的操作,掌握Linux操作系统中文件命令的用法。 二、实验任务与要求 1.emacs的使用,要求能新建、编辑、保存一个文本文件 2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 3.gedit的使用,要求能新建、编辑、保存一个文本文件 4.掌握mkdir、cd命令的操作,要求能建立目录、进入与退出目录 5.掌握cp、ls、mv、chmod、rm命令的操作,要求能拷贝文件、新建文件、查看文件、文件重命名、删除文件等操作。 三、实验工具与准备 计算机PC机,Linux Redhat Fedora Core6操作系统 四、实验步骤与操作指导 任务1.学习emacs的使用,要求能新建、编辑、保存一个文本文件 (1)启动emacs (2)输入以下C程序 (3)保存文件为kk.c (4)用emacs打开文件kk.c (5)修改程序 (6)另存为文件aa.txt并退出。 任务2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 (1)点击”应用程序”→ “附件”→“终端”,打开终端,在终端输入命令: [root@localhost root]#vi kk.c 按i键,进入插入状态。 (2)输入以下C程序 #include int main( ) {

printf(“Hello world!\n”); return 0; } 此时可以用Backspace、→、←、↑、↓键编辑文本。 (3)保存文件为kk.c 按Esc键,进入最后行状态,在最后行状态输入:wq保存文件,退出vi。 (4)用vi打开文件kk.c,输入命令: [root@localhost root]#vi kk.c (5)修改程序为: #include int main( ) { printf(" Hello world!\n"); printf("*****************\n"); return 0; } (6)按Esc键,进入最后行状态,在最后行状态输入:wq aa.txt保存文件,如图1所示,另存为文件aa.txt并退出vi。。 图1 程序编辑环境 任务3.gedit的使用,要求能新建、编辑、保存一个文本文件 (1)启动gedit,点击”应用程序”→ “附件”→“文本编辑器”,打开文本编辑器,如图所示。

机器人实验报告

一、机器人的定义 美国机器人协会(RIA)的定义: 机器人是一种用于移动各种材料、零件、工具或专用的装置,通过可编程序动作来执行种种任务的、并具有编程能力的多功能机械手。 日本工业机器人协会(JIRA—Japanese Industrial Robot Association):一种带有存储器件和末端执行器的通用机械,它能够通过自动化的动作替代人类劳动。(An all—purpose machine equipped with a memory device and an end—effector,and capable of rotation and of replacing human labor by automatic performance of movements.) 世界标准化组织(ISO):机器人是一种能够通过编程和自动控制来执行诸如作业或移动等任务的机器。(A robot is a machine which can be programmed to perform some tasks which involve manipulative or locomotive actions under automatic control.) 中国(原机械工业部):工业机器人是一种能自动定位控制、可重复编程、多功能多自由度的操作机,它能搬运材料、零件或夹持工具,用以完成各种作业。 二、机器人定义的本质: 首先,机器人是机器而不是人,它是人类制造的替代人类从事某种作业的工具,它能是人的某些功能的延伸。在某些方面,机器人可具有超越人类的能力,但从本质上说机器人永远不可能全面超越人类。

实验十五 码型变换实验

实验十五码型变换实验 一、实验目的 1、了解几种常用的数字基带信号。 2、掌握常用数字基带传输码型的编码规则。 3、掌握常用CPLD实现码型变换的方法。 二、实验内容 1、观察NRZ码、RZ码、AMI码、HDB3码、CMI码、BPH码的波形。 2、观察全0码或全1码时各码型的波形。 3、观察HDB3码、AMI码的正负极性波形。 4、观察RZ码、AMI码、HDB3码、CMI码、BPH码经过码型反变换后的输出波形。 5、自行设计码型变换电路,下载并观察波形。 三、实验器材 1、信号源模块一块 2、⑥号模块一块 3、⑦号模块一块 4、20M双踪示波器一台 5、连接线若干 四、实验原理 (一)基本原理 在数字通信中,有些场合可以不经过载波调制和解调过程而让基带信号直接进行传输。例如,在市区内利用电传机直接进行电报通信,或者利用中继方式在长距离上直接传输PCM 信号等。这种不使用载波调制装置而直接传送基带信号的系统,我们称它为基带传输系统,它的基本结构如图15-1所示。 信道信号形成器信道接收 滤波器 抽样 判决器 基带脉冲 输出 基带脉冲 输入 干扰 图15-1 基带传输系统的基本结构 该结构由信道信号形成器、信道、接收滤波器以及抽样判决器组成。这里信道信号形成

器用来产生适合于信道传输的基带信号,信道可以是允许基带信号通过的媒质(例如能够通过从直流至高频的有线线路等);接收滤波器用来接收信号和尽可能排除信道噪声和其他干扰;抽样判决器则是在噪声背景下用来判定与再生基带信号。 若一个变换器把数字基带信号变换成适合于基带信号传输的基带信号,则称此变换器为数字基带调制器;相反,把信道基带信号变换成原始数字基带信号的变换器,称之为基带解调器。 基带信号是代码的一种电表示形式。在实际的基带传输系统中,并不是所有的基带电波形都能在信道中传输。例如,含有丰富直流和低频成分的基带信号就不适宜在信道中传输,因为它有可能造成信号严重畸变。单极性基带波形就是一个典型例子。再例如,一般基带传输系统都从接收到的基带信号流中提取定时信号,而收定时信号又依赖于代码的码型,如果代码出现长时间的连“0”符号,则基带信号可能会长时间出现0电位,而使收定时恢复系统难以保证收定时信号的准确性。归纳起来,对传输用的基带信号的主要要求有两点:(1)对各种代码的要求,期望将原始信息符号编制成适合于传输用的码型;(2)对所选码型的电波形要求,期望电波形适宜于在信道中传输。 (二)编码规则 1、 NRZ 码 NRZ 码的全称是单极性不归零码,在这种二元码中用高电平和低电平(这里为零电平)分别表示二进制信息“1”和“0”,在整个码元期间电平保持不变。例如: +E 0 1 0 1 0 0 1 1 0 2、 RZ 码 RZ 码的全称是单极性归零码,与NRZ 码不同的是,发送“1”时在整个码元期间高电平只持续一段时间,在码元的其余时间内则返回到零电平。例如: 1 0 1 0 0 1 1 0 +E 0 3、 AMI 码 AMI 码的全称是传号交替反转码。这是一种将信息代码0(空号)和1(传号)按如下方式进行编码的码:代码的0仍变换为传输码的0,而把代码中的1交替地变换为传输码的+1,-1,

实验二M精编B程序设计含实验报告

实验二M精编B程序设 计含实验报告 The following text is amended on 12 November 2020.

实验二 MATLAB 程序设计 一、 实验目的 1.掌握利用if 语句实现选择结构的方法。 2.掌握利用switch 语句实现多分支选择结构的方法。 3.掌握利用for 语句实现循环结构的方法。 4.掌握利用while 语句实现循环结构的方法。 5.掌握MATLAB 函数的编写及调试方法。 二、 实验的设备及条件 计算机一台(带有以上的软件环境)。 M 文件的编写: 启动MATLAB 后,点击File|New|M-File ,启动MATLAB 的程序编辑及调试器 (Editor/Debugger ),编辑以下程序,点击File|Save 保存程序,注意文件名最好用英文字符。点击Debug|Run 运行程序,在命令窗口查看运行结果,程序如有错误则改正 三、 实验内容 1.编写求解方程02=++c bx ax 的根的函数(这个方程不一定为一元二次方程,因c b a 、、的不同取值而定),这里应根据c b a 、、的不同取值分别处理,有输入参数提示,当0~,0,0===c b a 时应提示“为恒不等式!”。并输入几组典型值加以检验。 (提示:提示输入使用input 函数) 2.输入一个百分制成绩,要求输出成绩等级A+、A 、B 、C 、D 、E 。其中100分为A+,90分~99分为A ,80分~89分为B ,70分~79分为C ,60分~69分为D ,60分以下为E 。 要求:(1)用switch 语句实现。 (2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 (提示:注意单元矩阵的用法) 3.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 21 21 421 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 请为关键的Matlab 语句填写上相关注释,说明其含义或功能。 4. y

六轴工业机器人实验报告

六轴工业机器人模块 实验报告 姓名:张兆伟 班级:13 班 学号:30 日期:2016年8月25日

六轴工业机器人模块实验报告 一、实验背景 六自由度工业机器人具有高度的灵活性和通用性,用途十分广泛。本实验是在开放的六自由度机器人系统上,采用嵌入式多轴运动控制器作为控制系统平台,实现机器人的运动控制。通过示教程序完成机器人的系统标定。学习采用C++编程设计语言编写机器人的基本控制程序,学习实现六自由度机器人的运动控制的基本方法。了解六自由度机器人在机械制造自动化系统中的应用。 在当今高度竞争的全球市场,工业实体必须快速增长才能满足其市场需求。这意味着,制造企业所承受的压力日益增大,既要应付低成本国家的对手,还要面临发达国家的劲敌,二后者为增强竞争力,往往不惜重金改良制造技术,扩大生产能力。 机器人是开源节流的得利助手,能有效降低单位制造成本。只要给定输入成值,机器人就可确保生产工艺和产品质量的恒定一致,显著提高产量。自动化将人类从枯燥繁重的重复性劳动中解放出来,让人类的聪明才智和应变能力得以释放,从而生产更大的经济回报。 二、实验过程 1、程序点0——开始位置 把机器人移动到完全离开周边物体的位置,输入程序点 0。按下手持操作示教器上的【命令一览】键,这时在右侧弹出指令列表菜单如图:按手持操作示教器【下移】键,使{移动 1}变蓝后,按【右移】键,打开{移动 1}子列表,MOVJ 变蓝后,按下【选择】键,指令出现在命令编辑区。修改指令参数为需要的参数,设置速度,使用默认位置点 ID 为 1。(P1 必须提前示教好)。按下手持操作示教器上的【插入】键,这时插入绿色灯亮起。然后再按下【确认】键,指令插入程序文件记录列表中。此时列表内容显示为: MOVJ P=1 V=25 BL=0 (工作原点) 2、程序点1——抓取位置附近(抓取前) 位置点1必须选取机器人接近工件时不与工件发生干涉的方向、位置。(通常在抓取位置的正上方)按下手持操作示教器上的【命令一览】键按手持操作示教器【下移】键,使{移动 1}变蓝后,按【右移】键,打开{移动 1}子列表,MOVJ

大学大一c语言程序设计实验室上机题全部代码答案(实验报告)汇编

C语言实验报告 实验1-1: hello world程序: 源代码: #include main() { printf("hello world!\n"); system("pause"); } 实验1-2: 完成3个数据的输入、求和并输出计算结果的程序: 源代码: #include main() { int i,j,k,sum; scanf("%d%d%d",&i,&j,&k); sum=i+j+k; printf("sum=%d",sum); system("pause"); 实验1-3: 在屏幕上输出如下图形: A BBB CCCCC 源代码: #include main() { printf(" A\n"); printf(" BBB\n"); printf(" CCCCC\n"); system("pause"); } 实验2-1: 计算由键盘输入的任何两个双精度数据的平均值 源代码: #include

main() { double a,b; scanf("%lf%lf",&a,&b); printf("%.1lf\n",(a+b)/2); system("pause"); } 实验2-2: 写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算源代码: #include main() { float a,b,c,d,e,f,g,x; scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g); x=a + b * (c - d ) / e * f - g; printf("x=%f",x); system("pause"); } 实验2-3: 编写一个C语言程序,测试下列各表达式: i, j i + 1 , j + 1 i++ , j++ ++i , ++j i+++++j 源代码: #include main() { int i=1,j=1; printf("%d %d\n",i+1,j+1); printf("%d %d\n",i++,j++); printf("%d %d\n",++i,++j); printf("%d\n",(i++)+(++j)); system("pause"); } 实验2-4: 输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest (税前),输出时保留2位小数。 interest = money(1+rate)year - money

实验三 码型变换实验

实验三码型变换实验 一、实验目的 1.了解几种常见的数字基带信号。 2.掌握常用数字基带传输码型的编码规则。 3.掌握用FPGA实现码型变换的方法。 二、实验内容 1.观察NRZ、RZ码、BRZ码、BNRZ码、AMI码、CMI码、HDB3码、BPH码的波形。2.观察全0码或全1码时各码型波形。 3.观察HDB3码、AMI码、BNRZ码正、负极性波形。 4.观察NRZ码、RZ码、BRZ码、BNRZ码、AMI码、CMI码、HDB3码、BPH码经过码型反变换后的输出波形。 5.自行设计码型变换电路,下载并观察输出波形。 三、实验器材 1.信号源模块 2.码型变换模块 3.20M双踪示波器一台 4.频率计(可选)一台 5.PC机(可选)一台 6.连接线若干 四、实验原理 1.编码规则 ①NRZ码(见教材) ②RZ码(见教材) ③BNRZ码-双极性不归零码 1 0 1 0 0 1 1 0 +E -E ④BRZ码-双极性归零码 1 0 1 0 0 1 1 0 +E -E ⑤AMI码(见教材) ⑥HDB3码(见教材) ⑦BPH码

BPH码的全称是数字双相码(Digital Diphase),又叫分相码(Biphase,Split-phase)或曼彻斯特码(Manchester),其编码规则之一是: 0 01(零相位的一个周期的方波); 110(π相位的一个周期的方波)。例如: 代码: 1 1 0 0 1 0 1 双相码: 10 10 01 01 10 01 10 这种码既能提取足够的定时分量,又无直流漂移,编码过程简单。但带宽要宽些。⑧CMI码 CMI码的全称是传号反转码,其编码规则如下:信息码中的“1”码交替用“11”和“00”表示,“0”码用“01”表示。例如: 代码: 1 1 0 1 0 0 1 0 CMI码: 11 00 01 11 01 01 00 01 这种码型有较多的电平跃变,因此,含有丰富的定时信息。该码已被ITU-T推荐为PCM四次群的接口码型。在光纤传输系统中有时也用CMI码作线路传输码型。 2.电路原理 将信号源产生的NRZ码和位同步信号BS送入U900(EPM7128SLC84-15)进行变换,可以直接得到各种单极性码和各种双极性码的正、负极性编码信号。解码时同样也需要送入FPGA进行解码,得到NRZ码。 ①NRZ码 从信号源“NRZ”点输出的数字码型即为NRZ码,请参考信号源工作原理。 ②BRZ、BNRZ码 将NRZ码和位同步信号BS分别送入双四路模拟开关U902(4052)的控制端作为控制信号,在同一时刻,NRZ码和BS信号电平高低的不同组合(00、01、10、11)将控制U902分别接通不同的通道,输出BRZ码和BNRZ码。X通道的4个输入端X0、X1、X2、X3分别接-5V、GND、+5V、GND,在控制信号控制下输出BRZ码;Y通道的4个输入端Y0、Y1、Y2、Y3分别接-5V、-5V、+5V、+5V,在控制信号控制下输出BNRZ 码。解码时通过电压比较器U907(LM339)将双极性的BRZ和BNRZ码转换为两路单极性码,即双—单(极性)变换,再送入U900进行解码,恢复出原始的NRZ码。 ③RZ、BPH码 同BRZ、BNRZ,因是单极性码,其编解码过程全在U900中完成,在这里不再赘述。 ④AMI码 由于AMI码是双极性的码型,所以它的变换过程分成了两个部分。首先,在U900中,将NRZ码经过一个时钟为BS的JK触发器后,再与NRZ信号相与后得到控制信号AMIB,该信号与NRZ码作为控制信号送入单八路模拟开关U905(4051)的控制端,U905的输出即为AMI码。解码过程与BNRZ码一样,也需先经过双—单变换,再送入U900进行解码。 ⑤HDB3码 HDB3码的编、解码框图分别如图3-1、3-2所示,其编、解码过程与AMI码相同,这里不再赘述。

C程序设计上实验报告(完整版)

C语言程序设计上机实验报告 学院:机械工程学院 班级:机自161213 姓名:刘昊 学号:20162181310 实验时间:2017年3月6号 任课老师:张锐

C语言程序设计上机实验报告 实验一 一、实验名称: C程序的运行环境和运行C程序的方法 二、实验目的:了解在C编译系统上如何编辑、编译、连接和运行一个C 程序 三、实验内容: (1). 输入并运行一个简单的C程序。 (2). 设计程序,对给定的两个数求和。 (3). 设计程序,对给定的两个数进行比较,然后输出其中较大的数。 四、源程序代码: 代码1: 运行结果1:

程序分析1: 该程序用来判断所输入的整数是否为一个素数,如果一个数能被除了1和它本身整除,还能被其它数整除,那么它就不是一个素数,因此,用for 循环来进行整除过程的简写。 代码2: 运行结果2:

程序分析2: 简单的使用printf()和scanf()函数进行简单的数据运算。代码3: 运行结果3:

程序分析3: 使用if语句进行判断。 五.实验总结 C语言程序设计上机实验报告 实验二 一、实验名称:顺序结构程序设计 二、实验目的:正确使用常用运算符(算术运算符、赋值运算符)的用法, 熟练掌握算术运算符及其表达式,逻辑运算符和逻辑表达式。 三、实验内容: (1). 编写程序,实现小写字母转大写。

(2). 编写程序,实现输入两个不同类型数据后,经过适当的运算(加、减、乘、除)后输出。 (3). 编写程序,计算三角形面积、立方体的体积和表面积、圆的面积和周长。 (4). 编写程序,实现单字符getchar和putchar输入输出。 (5). 编写程序,实现十进制、八进制、十六进制不同数制的输出。 四、源程序代码 代码1: 运行结果1: 程序分析1:

《工业机器人》实验报告

北京理工大学珠海学院实验报告 实验课程:工业机器人实验名称:实验一:工业机器人认识 教师:时间:班级:姓名:学号: 一、实验目的与任务 了解6自由度工业机器人的机械结构,工作原理,性能指标、控制系统,并初步掌握操作。了解6自由度工业机器人在柔性制造系统中的作用。 二、实验设备 FMS系统(含6-DOF工业机器人) 三、实验内容与步骤 1、描述工业机器人的机械结构、工作原理及性能指标。 2、描述控制系统的组成及各部分的作用。

3、描述机器人的软件平台及记录自己在进行实际操作时的步骤及遇到的问题以及自己的想法。教师批阅:

北京理工大学珠海学院实验报告 实验课程:工业机器人实验名称:实验二:机器人坐标系的建立 教师:时间:班级:姓名:学号: 一、实验目的与任务 了解机器人建立坐标系的意义;了解机器人坐标系的类型;掌握用D-H方法建立机器人坐标系的方法与步骤。 二、实验设备 FMS系统(含6-DOF工业机器人) 三、实验内容与步骤 1、描述机器人建立坐标系的意义以及机器人坐标系的类型。 2、深入研究机器人机械结构,建立6自由度关节型机器人杆件坐标系,绘制机器人杆件坐标系图。

教师批阅:

实验课程:工业机器人实验名称:实验三:机器人示教编程与再现控制 教师:时间:班级:姓名:学号: 一、实验目的与任务 了解机器人示教编程的工作原理,掌握6自由度工业机器人的示教编程与再现控制。 二、实验设备 FMS系统(含6-DOF工业机器人) 三、实验内容与步骤 1、描述机器人示教编程的原理。 2、详细叙述示教编程与再现的操作步骤,记录每一个程序点,并谈谈实验心得体会。教师批阅:

周信东主编版C语言程序设计基础实验一实验报告

周信东主编版C语言程序设计基础实验一实验报告 The latest revision on November 22, 2020

实验1 C程序的运行环境和最简单的C程序设计 学号:姓名:莫新锋实验日期: 一、实验目的和要求 (1)熟悉C语言程序开发环境(Visual C++),了解开发环境中的编辑、编译、链接和运行命令。 (2)掌握在C语言开发环境中如何编辑、编译、链接和运行一个标准C语言程序。(3)掌握简单C语言程序的查错方法,理解编译错误信息的含义。 (4)掌握C语言数据类型的概念,熟悉如何定义一个整型、字符型、实型变量,以及如何对它们进行赋值。 (5)了解下列命令及函数:#include <>、main、printf、scanf。 (6)通过运行简单的程序,熟悉C语言的基本格式规范,并初步了解它的结构特点。 二、实验内容 实验指导书中的实验一的“基础部分”题目。 三、实验步骤及结果 (一)VC 实验平台的使用 1.简要描述在VC环境下开发一个C程序的主要步骤,并粘贴主要操作窗口的截图。【请填空。截图的操作方法:先点击欲截取的窗口使之置于屏幕最前方,并作适当的缩放,再按快捷键+将窗口截取到内存中,然后打开word将光标移到欲插入图片的位置上进行粘贴即可。也可对图片进行适当剪切,裁剪掉多余部分。注意:截图上必须有你自己的学号或姓名等信息,否则视为抄袭。】 主要步骤: 1: 创建一个工作文件夹。 2:启动 Visual C++。 3:新建一个 C 语言源程序。 4:编辑源程序 5:保存源程序 2.编译、链接、运行程序 (1)输入源程序后,如何编译该程序 【请填空】 输入好后在编译器中有一个编译按钮按一下就能编译 (2)如何链接程序生成可执行文件 【请填空】 得到后缀为obj的目标程序后选择build菜单下的build选项,表示要求连接并建立一个可执行文件 (3)如何运行程序查看结果 【请填空】

高级程序设计实验报告

高级程序设计 实验报告 班级 学号: 姓名: 实验名称: 指导老师: 日期:

实验十一文件和流I/O 一、实验题目:文件和流I/O 二、实验内容: 1.掌握磁盘的基本操作 2.掌握目录的基本操作 3.文件的基本操作 4.文本文件的读取和写入 5.字符串的读取和写入 6.二进制文件的读取和写入I 7. 二进制文件的读取和写入2 三、主要程序代码: 1. using System; using System.IO; using System.Collections.Generic; using System.Text; namespace实验1 { class Test { public static void Main() { DriveInfo[] allDrives = DriveInfo.GetDrives(); foreach (DriveInfo d in allDrives) { Console.WriteLine("Drive {0}", https://www.360docs.net/doc/b95754695.html,); Console.WriteLine(" File type: {0}", d.DriveType); if (d.IsReady == true) { Console.WriteLine(" Volume label: {0}", d.VolumeLabel); Console.WriteLine(" File system: {0}", d.DriveFormat); Console.WriteLine(" Available space to current user:{0, 15} bytes",d.AvailableFreeSpace); Console.WriteLine("Total available space: {0, 15} bytes",d.TotalFreeSpace); Console.WriteLine( " Total size of drive: {0, 15} bytes ", d.TotalSize); } } Console.ReadKey();

工业机器人实验分析报告-机械-示教-离线编程

工业机器人实验报告-机械-示教-离线编程

————————————————————————————————作者:————————————————————————————————日期:

工业机器人实验报告 ——机器人示教与离线编程实验 班级:机械41 组别:第一组 组员:陈豪 2140101003 尹鑫鑫 2140101023 武文家 2140101020 指导老师:桂亮 西安交通大学 2017年 5 月 3 日

西安交通大学实验报告 第页(共页)课程:工业机器人实验日期:2017年 5月 3 日 专业班号机械41组别第一组交报告日期:年月日 姓名陈豪学号2140101003 报告退发:(订正、重做) 姓名尹鑫鑫学号2140101023 教师审批签字: 姓名武文家学号2140101020 实验一机器人示教实验 一、实验目的 1.了解机器人示教与再现的原理; 2.掌握机器人示教和再现过程的操作方法。 二、实验设备 1.模块化机器人一台; 2.模块化机器人控制柜一台。 三、实验原理 机器人的示教-再现过程是分为四个步骤:示教、记忆、再现、操作。 示教,就是操作者把规定的目标动作(包括每个运动部件,每个运动轴的动作)一步一步 的教给机器人。 记忆,即是机器人将操作者所示教的各个点的动作顺序信息、动作速度信息、位姿信息 等记录在存储器中。 再现,便是将示教信息再次浮现,即根据需要,将存储器所存储的信息读出,向执行机 构发出具体的指令。 操作,指机器人以再现信号作为输入指令,使执行机构重复示教过程规定的各种动作。 示教的方法有很多种,有主从式,编程式,示教盒式等多种。 四、实验步骤 1.接通控制柜电源,按下“启动”按钮; 2.启动计算机,运行机器人软件; 3.点击主界面“模块组合方式”按钮,按照实际情况选择已组合的模块设备,并点 击“确定”按钮; 4.点击主界面“机器人复位”按钮,机器人进行回零运动。观察机器人的运动,所 有模块全部运动完成后,机器人处于零点位置; 5.点击“示教”按钮,出现界面;

实验报告(五)GUI程序设计(完整代码)

福建农林大学计算机与信息学院实验报告 实验(五)GUI程序设计 一、实验目的和要求 1.掌握简单GUI的设计和实现 2.理解并掌握GUI事件驱动的程序设计 3.理解网络程序设计 二、实验内容和原理 实现一个程序,用于浏览用户指定的文本文件。界面如图1所示: 图1 文本文件浏览的用户界面

2、界面实现 // Panel p to hold a label, a text field, and a button Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add(new Label("Filename"), BorderLayout.WEST); p.add(jtfFilename, BorderLayout.CENTER); p.add(jbtView, BorderLayout.EAST); // Add jsp and p to the frame add(jsp, BorderLayout.CENTER); add(p, BorderLayout.SOUTH); 3、事件驱动 // Register listener jbtView.addActionListener(new ActionListener() { /**Handle the View button*/ public void actionPerformed(ActionEvent e) { if (e.getSource() == jbtView) showFile(); //自己实现这个方法,在textArea中浏览文本文件内容 } }); 4、网络程序设计(可选) 实现一个网络服务,用于把指定的文件内容传给客户端(见Exp_5_Server.java),在“事件驱动”中调用方法“showFileFromServer()” package com.fafu.training; import java.awt.BorderLayout; import java.awt.Panel; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.Inputream; import java.io.Reader; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel;

相关文档
最新文档