实验一 机器人足球比赛编程预备知识
1、实验目的
掌握 RoboCup 仿真机器人足球比赛相关知识点,具体内容如下:
(1)Linux 操作系统的熟悉及了解其基本操作。
(2)掌握 Linux 下如何进行 C++编程,了解 gcc 编译器以及一些简单编辑工具,如:vim、vscode、gedit、Kdevelope 等。
(3)启动 RoboCup 仿真(2D)足球队的比赛。
2、实验设备
硬件环境:PC 机
软件环境:操作系统 Linux
3、实验内容
1.掌握 Linux 一些常用的命令:
- 更改账号密码
格式:passwd
输入后,屏幕显示: Old password: <输入旧密码>
New password: <输入新密码>
Retype new password: <确认新密码>
- 联机帮助
格式: man [命令名]
例如: man ls
屏幕上就会显示所有 ls 的用法。
- 文件或目录处理
格式:ls [-atFlgR][name]
第一项是一些语法加量。第二项是文件名。
常用的方法有:
ls 列出当前目录下的所有文件。
ls –a 列出包括以 .开始的隐藏文件的所有文件名。
ls –t 依照文件最后修改时间的顺序列出文件名。
ls –F 列出当前目录下的文件名及其类型。以/结尾表示为目录名、以*结尾表示未可执行文件、以@结尾表示为符号连接。
ls –l 列出目录下所有文件的权限、所有者、文件大小、修改时间及名称。
ls –lg 同上,并显示出文件的所有者工作组名。
ls –R 显示出目录下以及其所有子目录的文件名。
- 改变工作目录
格式:: cd [name]
name :目录名、路径或目录缩写。
常用的方法有: cd 改变目录位置至用户登录时的工作目录。
cd dirl 改变目录位置至 dirl 目录下。
cd ~user 改变目录位置至用户的工作目录。
cd .. 改变目录位置至。
cd ../user 改变目录位置至相对路径 user 的目录下。
cd /../.. 改变目录位置至绝对路径的目录位置下。
- 复制文件
格式:cp [-r] 源地址 目的地址
常用的方法有: cp file1 file2 将文件 file1 复制成 file2
cp file1 dir1 将文件 file1 复制到目录 dir1 下,文件名仍为 file1。
cp /tmp/file1 将目录/tmp 下的文件 file1 复制到当前目录下,文件名仍为 file1。
cp /tmp/file1 file2 将目录/tmp 下的文件 file1 复制到当前目录下,文件名仍为 file2。
cp -r dir1 dir2 复制整个目录。
- 移动或更改文件、目录名称
格式:mv 源地址 目的地址
常用的方法有:
mv file1 file2 将文件 file1 更名为 file2。
mv file1 dir1 将文件 file1 转移到目录 dir1 下,文件名仍为 file1。
mv dir1 dir2 将目录 dir1 更改为目录 dir2。
- 建立新目录
格式:mkdir 目录名 - 删除目录
格式:rmdir [目录名|文件名]
常用的方法有:
rm –r dir1 删除目录 dir1 及其子目录下的所有文件。
- 列出当前所在的目录位置
格式:pwd
- 查看文件内容
格式: cat 文件名
- 文件权限的设定
格式:chmod [-R] mode name
name:文件名或目录名。
mode:3 个或 8 个数字或 rwx 的组合。r-read(读权限)、w-write(写权限)、x-execute(执行)
常用的方法有:
chmod 777 file1 给所有用户 file1 全部的权限。
- 文件的解压缩
格式:tar [option] [file] gzip[option] [file]
option 的组合较为复杂,通常的解压缩方法是:
tar czvf filename.tar
参数:c create z zip压缩 v 显示 f file
通常的压缩方法是:
tar xzvf filename.tar
参数:x Extract z zip压缩 v 显示 f file
完成以下操作:- 如何找到用户主目录的绝对路径名?在自己的系统上,用户主目录的绝对路径名是什么?
- 将当前工作目录从/home/UVA 转到/home/Tsinghua 需要使用什么命令?
- 如何显示当前目录?
- 如何在当前目录下建立子目录 RoboCup?
- 如何删除子目录 RoboCup?
- 如何查看当前目录下的内容?
- 如何将文件start.sh的权限设定为:tart.sh属主可读、可写、可执行?
- 如何将当前目录包括所有子目录全部做备份文件,备份文件名为 first.tar?
- 如何将目录/home 下每一个文件压缩成.gz 文件?
- 如何把上例中每个压缩的文件解压,并列出详细的信息?
- 建立新目录
2.掌握 vscode、vi、gedit 等编辑工具以及 gcc、anjuta、Kdevelope 等编译工具的使用
vscode、vi、gedit 等工具是类似 Windows 操作系统下的 txt 文本、Word 等编辑器工具,完成对文本的编辑工作。以 vscode 为例介绍一下这类工具的使用情况:
vscode有图形界面十分便利,vscode有很多插件,安装c++插件可以出现代码提示,安装git插件可以进行版本控制,安装markdown可以实时预览等。ctrl+` 可以打开内置的终端,运行shell命令。
gcc、anjuta 等是 Linux 下的源程序编译工具,类似 Tubro C/Turbo C++、C++builder、VC++等编译工具,以 gcc 为例介绍一下情况: 看下面的例子:test.c
#include<stdio.h>
main()
{
char *str="I like Linux! I advices you jion in the Linux World";
printf("%s\n",str);
exit(0);
}
使用 gcc 编译。输入 gcc -c test.c 得到目标文件 test.o.-c 命令表示对文件进行编译和汇编。
但并不连接。如果再健入 gcc -o ../bin/test test.o,那么将得到名为 test 的可执行文件。其实这两可以一气呵成,gcc ../bin/test test.c.如果程序没有错误救生成了可执行文件。也许你会觉
得基于命令行的编译器比不上如 VC 之类的集成开发环境,的确 gcc 的界面要改进,但是你
一旦熟练了就会感到,gcc 的效率如此之高。可以告诉大家的是 Linux 底下强大的 C/C++集
成开发环境 Kdevelope 和 Vc 一样强大,使用了 GCC 编译器。
如果一个工程有几个源文件构成,就需要编写 Makefile 文件,makefile 的编写见讲义附录。
完成下面功能:
- 使用上述其中之一编辑环境,编写文件 counter.h、counter.C、appl.C:
// File counter.h
class counter
{
private:
unsigned int value; // 私有数据成员
public:
counter(void);
void increment(void);
void decrement(void);
unsigned int getvalue(void);
};
//File counter.C
#include "counter.h"
counter::counter(void) {value=0;} // 构造函数(Constructor)
void counter::increment(void) { if (value<9999) value++;}
void counter::decrement(void) { if (value>0) value--;}
unsigned int counter::getvalue(void) { return value;}
//File appl.C
#include <iostream.h>
#include "counter.h"
void main()
{
counter c1,c2;
for(int i=1; i<5; i++)
{
c1.increment();
cout<<"c1="<<c1.getvalue()<<"\n";
c2.increment();
}
c2.decrement();
cout<<"The final value of c1="<<c1.getvalue()<<"\n";
cout<<"The final value of c2="<<c2.getvalue()<<"\n";
}