上一讲,我们成功烧写了Ubuntu系统、搭建了旭日X3派的环境,熟悉了基本了VNC、SSH远程登陆等操作,并且安装了Opencv库。

这一讲,我们主要学习利用Shell语言来操作Ubuntu系统,并简单学习了ROS操作系统的一些基本指令和操作。在此基础上,我们下载了VSCode来运行我们的工程代码,同时发现了下载Pybluez资源包时的一些问题。

一、Linux操作系统指令学习

1、Sudo dpkg -i + 文件路径

Sudo:表示提升至管理员权限

Dpkg:表示安装在ubuntu系统里面的一个deb文件的

2、ROS2的工作空间结构

 

3、新建文件(夹)与删除

Mkdir -p ~/dev_ws/src

在主文件夹下面创建一个dev_ws/src这样的文件夹

Touch read.txt

touch新建一个新的文件

rm -R text

rm -R递归删除文件夹

4、添加环境变量:

每次启动前要在终端输入下面这一句话:

Source install/local_setup.sh

表示增加环境变量

Source+路径表示增加环境变量

如果在.bashrc文件中添加环境变量,则上电之后就会加入环境变量

5、传输文件:

scp [可选参数] file_source file_target

(1)将本地文件复制到目标服务器

scp /home/bill/jay.mp3 root@10.214.127.53:/home/jack/

/home/bill/jay.mp3:本地要传输的文件\文件夹

root:要传输到机器的用户名

(2)将服务器文件复制到本地电脑

scp root@10.214.127.53:/home/jack/jay.mp3 /home/bill/

在MobaXterm上,Ubuntu系统表示本地文件,个人端PC电脑表示目标服务器。

6、连接wifi:sudo nmcli wifi connect + wifi名字  password + wifi密码

7、更新源:sudo apt-get update ,当更新完新的源(镜像源)之后再用这句话

更新软件:sudo apt-get upgrade

修复损坏的软件包,尝试卸载出错的包,重新安装正确版本的:sudo apt-get -f install

8、自动安装缺少依赖:sudo apt install -f

9、输入Pwd 查看当前目录的路径

10、架构问题:

  • ARM架构和X86架构
  • ARM架构下分为arm32和arm64
  • X86架构下分为x64(64位)和

二、Shell语言学习

计算机只能认识(识别)机器语言(0和1),如(11000000 这种)。但是,我们的程序猿们不能直接去写01这样的代码,所以,要想将程序猿所开发的代码在计算机上运行,就必须找"人"(工具)来翻译成机器语言,这个"人"(工具)就是我们常常所说的 编译器或者解释器。

1. 编程语言分类


编译型语言:
程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++

解释型语言:
程序不需要编译,程序在运行时由解释器翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。比如Python/JavaScript/ Perl /ruby/Shell等都是解释型语言。

2.shell简介

shell的种类

[root@wolf ~]# cat /etc/shells
/bin/sh #是bash的一个快捷方式
/bin/bash #bash是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能
/sbin/nologin #表示非交互,不能登录操作系统
/bin/dash #小巧,高效,功能相比少一些
/bin/csh #具有C语言风格的一种shell,具有许多特性,但也有一些缺陷
/bin/tcsh #是csh的增强版,完全兼容csh

3. shell脚本

(一) 什么是shell脚本?

简单来说就是将需要执行的命令保存到文本中,按照顺序执行。它是解释型的,意味着不需要编译。

若干命令 + 脚本的基本格式 + 脚本特定语法 + 思想= shell脚本

(二) 什么时候用到脚本?

重复化、复杂化的工作,通过把工作的命令写成脚本,以后仅仅需要执行脚本就能完成这些工作。

(三)shell脚本能干啥?

①自动化软件部署 LAMP/LNMP/Tomcat…
②自动化管理 系统初始化脚本、批量更改主机密码、推送公钥
③自动化分析处理 统计网站访问量
④自动化备份 数据库备份、日志转储…
⑤自动化监控脚本

(四)shell脚本的基本写法

1)脚本第一行,魔法字符#!指定解释器【必写】
#!/bin/bash 表示以下内容使用bash解释器解析
注意: 如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题,所以可以使用: #!/bin/env 解释器

2)脚本第二部分,注释(#号)说明,对脚本的基本信息进行描述【可选】

#!/bin/env bash
# 以下内容是对脚本的基本信息的描述
# Name: 名字
# Desc:描述describe
# Path:存放路径
# Usage:用法
# Update:更新时间
#下面就是脚本的具体内容
commands
...


3)脚本第三部分,脚本要实现的具体代码内容



(五)shell脚本的执行方法

标准脚本执行方法(建议)

1) 编写人生第一个shell脚本
[root@wolf shell01]# cat first_shell.sh
#!/bin/env bash
# 以下内容是对脚本的基本信息的描述
# Name: first_shell.sh
# Desc: num1
# Path: /shell01/first_shell.sh
# Usage:/shell01/first_shell.sh
# Update:2019-05-05
echo "hello world"
echo "hello world"
echo "hello world"
2) 脚本增加可执行权限
[root@wolf shell01]# chmod +x first_shell.sh
3) 标准方式执行脚本
[root@wolf shell01]# pwd
/shell01
[root@wolf shell01]# /shell01/first_shell.sh
或者
[root@wolf shell01]# ./first_shell.sh
注意:标准执行方式脚本必须要有可执行权限

该部分参考链接:

1、https://blog.csdn.net/wolfGuiDao/article/details/105694828

2、https://xiejun.blog.csdn.net/article/details/52693464

三、ubuntu18.04修改IP为静态IP并能够上网(傻瓜式教学)


目的:自建局域网解决Wifi变更下,X3派IP地址不变的问题。

前提:X3派和PC设置同一个静态IP地址。

连接我的手机的局域网,IP地址是192.168.148.28

VNCserver启动

https://blog.csdn.net/booklijian/article/details/107734980

 

四、python相关库(Pybluez)安装遇到的问题

安装pybluez的问题:

前提:使用Ubuntu的清华镜像源无法安装pybluez。

更改使用原厂源。使用的Ubuntu原厂的源,Ubuntu安装pybluez的时候报错

 

尝试的方法包括但不限于:

1、sudo update

2、将依赖包放在同一个文件夹下面,全部解压。

 

问题:现在依赖中缺乏依赖

相关问题以及尝试如下图:

(1)使用阿里镜像源,利用sudo apt-get install libbluetoothdev后,显示报错

(2)更换Ubuntu原厂源后,使用sudo apt-get install libbluetoothdev显示无法locate package

(3)按照网上搜索的帖子,我们单独下载了libbluetooth的三个包,并且放在同一个文件夹下面解压。显示缺少依赖

 

对于蓝牙库的建立依然需要工程师的帮助,如若不能完全安装将会影响到之后的上下机位整机调控。需要x3工程师尽快帮助我们解决。