黑马ros小车1——linux命令

https://robot.czxy.com/car/

Ubuntu操作系统

常用的linux命令

ls常用参数
ls -a : 查看当前所有文件和目录,包含隐藏文件和目录。
ls -l : 以列表形式查看所有文件和目录。
ll 等同于ls -al 即等同于以上两个命令结合。
通配符
ls te* : 查看所有以te开头的文件和目录。
ls .txt: 查看所有以.txt结尾的文件及目录。
ls te[sx]t : 将匹配test或text
clear清屏命令
也可使用快捷键:Ctrl + l
cd切换目录
cd: 切换到当前用户的主目录(/home/用户目录),用户登陆时,默认的目录就是用户的主目录。
cd ~: 切换到当前用户的主目录(/home/用户目录)。
cd . :切换到当前目录。
cd … :切换到上级目录。
cd - : 可进入上次所在的目录。
cd / : 切换到系统根目录/
pwd显示当前路径
mkdir创建目录
通过mkdir命令可以创建一个新的目录。参数-p可递归创建目录。
mkdir TestDir
mkdir -p a/b/c/d
touch 创建文件
用户可以通过touch来创建一个空的文件:
touch hello.txt
rm 删除文件
rm -f :强制删除
rm -r test_dir: 删除目录。
rm xxx.txt aaa.txt :删除文件,一次可删除多个
rmdir test_dir: 删除目录,但必须保证被删除目录里为空。
cp 拷贝文件及目录
cp file.txt abc/: 将当前目录的file.txt拷贝到abc目录。
cp abc/
.txt . :将abc目录下的所有txt文件拷贝到当前目录。
cp -r abc aaa :将abc目录拷贝为aaa目录(包含所有子目录及文件)
mv 移动、重命名
mv a.md abc.txt: 将a.md重命名为abc.txt。
mv abc.txt ./aaa:将abc.txt移动到当前的aaa目录中。
echo控制台输出
echo “HelloWorld” : 向控制台输出helloworld信息。
输出重定向
ls > test.txt :test.txt如果不存在,则创建,存在则覆盖其内容。
注意:>输出重定向会覆盖原来的内容,>>输出重定向则会追加到文件的尾部。
cat查看&合并文件内容
cat xxx.py : 可以用来快速查看某个文件内容,输出到控制台。
cat test.txt >>haha.txt :将test.txt的内容追加到haha.txt中。
cat 1.txt 2.txt >1_2.txt : 将1.txt 2.txt内容合并到1_2.txt中。
tar归档管理
打包并压缩:
tar -czvf xxx.tar.gz * : 当前目录所有文件。
tar -czvf xxx.tar.gz *.txt : 以.txt结尾的文件。
tar -czvf xxx.tar.gz my-file my-dir : 打包制定目录或文件。
解压缩包:
tar -xzvf xxx.tar.gz : 解包到当前目录。
tar -xzvf xxx.tar.gz -C my-dir : 解包到指定目录,需要先创建my-dir目录。
zip、unzip文件压缩解压
压缩文件:zip[-r] 目标文件(没有扩展名) 源文件
zip bak * : 压缩当前目录所有文件,也可以指定文件。
zip -r bak * : 压缩当前目录所有文件&目录递归。
解压文件:unzip -d 解压后目录文件 压缩文件
unzip -d ./target_dir bak.zip : 解压到指定目录。
unzip bak.zip : 解压到当前目录。
scp 远程拷贝文件
从远程复制文件到本地
scp root@192.168.16.66:/home/poplar/xxx.tar.gz /home/test/
从本地复制文件到远程
scp /home/test/xxx.png root@192.168.16.66:/home/poplar/
从远程复制目录到本地 -r
scp -r root@192.168.16.66:/home/poplar/day01 /home/test/
从本地复制目录到远程 -r
scp -r /home/test/day01 root@192.168.16.66:/home/poplar/
wget 文件下载
下载普通文件
wget http://p1.qhimgs4.com/t01ce0387e64e3428ca.jpg
以指定文件名保存文件
wget -O girl.jpg http://p1.qhimgs4.com/t01ce0387e64e3428ca.jpg
断点续传
wget -c http://p1.qhimgs4.com/t01ce0387e64e3428ca.jpg
tree 目录树状结构
使用tree命令可以查看指定目录的树状结构
which 查看命令位置
有时我们想知道被执行的命令在哪个目录,以方便切换或更新不同版本,如Python。可以使用which 命令
poplar@PoplarTang:~/Lesson$ which python
/usr/bin/python
poplar@PoplarTang:~/Lesson$ which ls
/bin/ls
reboot、shutdown 关机重启
reboot 重新启动操作系统
shutdown –r now 重新启动操作系统,shutdown会给别的用户提示
shutdown -h now 立刻关机,其中now相当于时间为0的状态
shutdown -h 20:25 系统在今天的20:25 会关机
shutdown -h +10 系统再过十分钟后自动关机
ifconfig 查看ip地址
ssh 连接远程电脑
ssh root@192.168.37.123
chmod 修改文件权限
chmod u/g/o/a +/-/= rwx 文件
u user 表示该文件的所有者
g group 表示与该文件的所有者属于同一组( group )者,即用户组
o other 表示其他以外的人
a all 表示这三者皆是

  • 增加权限
  • 撤销权限
    = 设定权限
    r read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录的内容。
    w write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。
    x excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。
    chmod u=rw 1.py: 修改一个文件所属用户的权限为可读可写。
    chmod a+x 1.py : 为文件添加所有人可执行权限。
    passwd 修改用户密码
    为了系统安全起见,要使用比较复杂的口令,最好使用8位以上的口令,并且口令中包含有大写、小写字母和数字。
    whoami 我是谁
    whoami可以获取当前登录账户的用户名。
    exit 退出登录账户
    如果是图形界面,退出当前终端;
    如果是使用ssh远程登录,退出登陆账户;
    如果是切换后的登陆用户,退出则返回上一个登陆账号。
    su 切换到普通用户
    su username 切换到username用户,当前路径不变。
    su - username切换到username用户,当前路径变更为/home/username
    sudo su 切换到管理员账号
    sudo su 或sudo -s Linux 下切换到root的命令。
    查看系统版本
    发行版本号
    lsb_release -a
    内核版本及系统位数
    uname -a
    内核版本及gcc版本
    cat /proc/version
    查看硬件信息
    cpu信息
    cat /proc/cpuinfo or lscpu
    内存信息
    sudo dmidecode -t memory
    运行时信息
    top实时CPU&内存使用情况
    free当前内存占用情况
    ps -aux查看当前进程状态(CPU、内存占用、开启时间)
    kill根据进程pid杀死指定进程,可以配合参数-9强制杀死

pyQT5

from PyQt5.QtGui import QIcon,QPixmap
# from PyQt5.QtWidgets import *
# import sys
# from PyQt5.QtCore import *
#
#
# app = QApplication(sys.argv)
# window = QWidget()
#
# window.setWindowTitle("无人小车")
# icon=QIcon('D://网页下载//icon32//1.png')
# window.setWindowIcon(icon)
# #用label控件显示图像
# # label = QLabel()
# # pixmap = QPixmap('D://网页下载//icon32//1.jpg')
# # label.setPixmap(pixmap)
# # label.setParent(window)
# # window.resize(pixmap.width(),pixmap.height())
#
# # #输入框
# # edit = QLineEdit()
# # #设置输入框显示模式
# # edit.setEchoMode(QLineEdit.Normal)
# # #设置输入框提示
# # edit.setPlaceholderText("请输入用户名")
# # edit.setText('张三')
# # text = edit.text()
# # edit.setMaxLength(10)
# # edit.setParent(window)
#
# #按钮
#
# def my_click():
#     QMessageBox.about(window, 'title', '登陆成功')
#
# btn = QPushButton()
# btn.setText('登陆')
# btn.setToolTip('登陆按钮')
# btn.setParent(window)
#
# window.show()
# btn.clicked.connect(my_click)
# sys.exit(app.exec())
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys

import serial
import struct


class MyWindow(QWidget):

    def __init__(self):
        super(MyWindow, self).__init__()

        self.__init_ui()

        count = 0
        while count < 10:
            count += 1
            try:
                self.ser = serial.Serial(port='/dev/ttyUSB0', baudrate=115200)
                # 如果出错了,后面的代码就不执行了
                # 能到达这个位置说明,链接成功
                break
            except Exception as e:
                print(e)

    def __init_ui(self):
        self.setWindowTitle('下位机控制')

        layout = QHBoxLayout()
        self.setLayout(layout)

        first_layout = QVBoxLayout()
        second_layout = QVBoxLayout()

        layout.addLayout(first_layout)
        layout.addLayout(second_layout)

        self.__init_first(first_layout)
        self.__init_second(second_layout)

    def __init_first(self, layout):
        led_group = QGroupBox('LED控制')
        layout.addWidget(led_group)
        led_layout = QVBoxLayout(led_group)
        self.__init_led_layout(led_layout)

        buzzer_group = QGroupBox('蜂鸣器控制')
        layout.addWidget(buzzer_group)
        buzzer_layout = QVBoxLayout(buzzer_group)
        self.__init_buzzer_layout(buzzer_layout)

    def __init_led_layout(self, layout):
        btn_open = QPushButton('打开LED')
        btn_close = QPushButton('关闭LED')
        btn_toggle = QPushButton('开关LED')

        layout.addWidget(btn_open)
        layout.addWidget(btn_close)
        layout.addWidget(btn_toggle)

        btn_open.clicked.connect(self.led_open)
        btn_close.clicked.connect(self.led_close)
        btn_toggle.clicked.connect(self.led_toggle)

    def __init_buzzer_layout(self, layout):
        btn_open = QPushButton('打开蜂鸣器')
        btn_close = QPushButton('关闭蜂鸣器')
        btn_toggle = QPushButton('开关蜂鸣器')

        layout.addWidget(btn_open)
        layout.addWidget(btn_close)
        layout.addWidget(btn_toggle)

        btn_open.clicked.connect(self.buzzer_open)
        btn_close.clicked.connect(self.buzzer_close)
        btn_toggle.clicked.connect(self.buzzer_toggle)

    def __init_second(self, layout):
        motor_group = QGroupBox('电机控制')
        layout.addWidget(motor_group)
        motor_layout = QVBoxLayout(motor_group)
        self.__init_motor_layout(motor_layout)

        oled_group = QGroupBox('OLED控制')
        layout.addWidget(oled_group)
        oled_layout = QVBoxLayout(oled_group)
        self.__init_oled_layout(oled_layout)

    def __init_motor_layout(self, layout):
        self.__le_motor = QLineEdit()
        btn = QPushButton("发送")

        layout.addWidget(self.__le_motor)
        layout.addWidget(btn)

        btn.clicked.connect(self.motor_spin)

    def __init_oled_layout(self, layout):
        self.__le_oled = QLineEdit()
        btn = QPushButton("发送")

        layout.addWidget(self.__le_oled)
        layout.addWidget(btn)

        btn.clicked.connect(self.oled_show)

    def led_open(self):
        # 字节数据
        data = bytearray([0x01, 0x01])
        self.ser.write(data)

    def led_close(self):
        # 字节数据
        data = bytearray([0x01, 0x02])
        self.ser.write(data)

    def led_toggle(self):
        # 字节数据
        data = bytearray([0x01, 0x03])
        self.ser.write(data)

    def buzzer_open(self):
        # 字节数据
        data = bytearray([0x02, 0x01])
        self.ser.write(data)

    def buzzer_close(self):
        # 字节数据
        data = bytearray([0x02, 0x02])
        self.ser.write(data)

    def buzzer_toggle(self):
        # 字节数据
        data = bytearray([0x02, 0x03])
        self.ser.write(data)

    def motor_spin(self):
        text = self.__le_motor.text()
        pwm = int(text)
        pack = struct.pack('h', pwm)
        data = bytearray([0x03, pack[0], pack[1]])
        self.ser.write(data)

    def oled_show(self):
        text = self.__le_oled.text()
        data = bytearray([0x04])
        data.extend(text.encode())
        self.ser.write(data)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MyWindow()
    window.show()

    sys.exit(app.exec_())

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值