更新一堆

This commit is contained in:
yewuya 2021-04-28 15:14:42 +08:00
parent 4e658a2048
commit f75ec1155a
18 changed files with 443 additions and 45 deletions

View File

@ -0,0 +1,94 @@
# LinuxUbuntu个人常用软件安装
#### Qv2ray
* v2ray core
https://github.com/v2fly/v2ray-core/releases/download/v4.34.0/v2ray-linux-64.zip
* 安装qv2ray
打开terminal运行以下命令安装qv2ray
```sh
sudo snap install qv2ray
```
* 配置v2ray core
[下载](https://github.com/v2fly/v2ray-core/releases/download/v4.34.0/v2ray-linux-64.zip)并解压v2ray core 至任意位置但不能和qv2ray执行文件在统一路径下。
双击打开qv2ray 依次点击 首选项,内核设置
#### Ubuntu安装edge
```sh
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list'
sudo rm microsoft.gpg
sudo apt update
sudo apt install microsoft-edge-dev
```
#### Ubuntu安装gitlab
```shell
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/bionic/gitlab-ce_13.6.7-ce.0_amd64.deb/download.deb
dpkg -i gitlab-ce_13.6.7-ce.0_amd64.deb
```
#### 盒盖不休眠
```shell
sudo vim /etc/systemd/logind.conf
```
其中的
#HandleLidSwitch=suspend 改成 HandleLidSwitch=ignore
之后重启服务或者执行reboot
```shell
service systemd-logind restart
```
#### 切换cmake版本
```shell
sudo gedit ~/.bashrc
```
在文件的末尾加上
```
export CMAKE_HOME=/home/sdu/sxq/tools/cmake-3.18.4-Linux-x86_64/bin
export PATH=$CMAKE_HOME:$PATH
```
CMAKE_HOME后面的路径为下载解压后的cmake的bin路径
#### 切换GCC版本
安装其他版本的gcc其中7为版本号
```shell
sudo apt-get install -y gcc-7 g++-7
```
查看已安装的版本
```sh
ls /usr/bin/gcc*
```
版本切换
```sh
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 20 --slave /usr/bin/g++ g++ /usr/bin/g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 10 --slave /usr/bin/g++ g++ /usr/bin/g++-7
sudo update-alternatives --config gcc
```
输入数字选择版本

View File

@ -0,0 +1,7 @@
# conda 切换虚拟环境
```shell
conda env list //显示所有环境
conda activate my_test //切换到my_test环境
```

View File

@ -10,6 +10,7 @@ git commit -am “” //添加所有修改文件的commit
git push origin master //上传代码到服务器 git push origin master //上传代码到服务器
git remote rm origin //删除所有远程服务器 git remote rm origin //删除所有远程服务器
git remote add origin url //添加新的远程服务器 git remote add origin url //添加新的远程服务器
git submodule update --init --recursive //更新下载全部子模组
``` ```
#### 生成密钥 #### 生成密钥

View File

@ -0,0 +1,21 @@
# phenix mini 移植px4 1.12的无人车代码
* phenix mini 是基于PX4 1.7.3修改而来的
phenix mini在切换到无人车模式后不论哪种车型都没有PWM输出。
后发现使用PX41.11和1.12版本固件的飞控可以输出PWM只是因为PX4没有支持麦克纳姆轮的车型无法做到控制无人车正常移动
刚开始以为是因为混控器方面的问题就参考1.12版本的混控器配置文件把1.12的混控器配置文件移植到phenix mini 移植之后发现也没有PWM输出。后查阅资料发现px41.7.3 版本的无人车模式存在bug有无人车模式但是没有PWM输出同时PX4官方也没有把无人车的代码加入到集成测试中所以也不清楚具体问题出在哪里。如下链接是关于这个问题的相关讨论
[no pwm output in rover mode · Issue #10221 · PX4/PX4-Autopilot (github.com)](https://github.com/PX4/PX4-Autopilot/issues/10221)
[NO PWM SIGNAL OUT - Pixhawk (Rover) - Discussion Forum, for PX4, Pixhawk, QGroundControl, MAVSDK, MAVLink](https://discuss.px4.io/t/no-pwm-signal-out-pixhawk-rover/5920)
和无人车相关的代码有lib中的ROMFS/px4fmu_commom文件夹下的内容
![image-20210426182153765](https://yewuyadeimagewall.oss-cn-hangzhou.aliyuncs.com/image-20210426182153765.png)
其中mixer中是不同机型的混控器配置文件init.d文件夹是不同机型的初始化配置
Src/lib文件夹下的mixeroutput_limit ,pwm,src/modules文件夹下的px4iofirmware,rover_pos_control,这些代码都和无人车的控制相关可能还有部分未列出的由于1.7.3和1.12的版本时间间隔过长等原因导致这两个版本的代码风格和软件架构发生了挺多变化很多东西不是一脉相承的增加了移植的难度而且由于不清楚究竟是哪部分原因导致的1.7.3版本无人车模式没有PWM输出所以可能需要把无人车相关的全部代码都移植到phenix mini中去或者选择找到PWM没有输出的原因修复这个BUG这两者所消耗的时间并不清楚可能找出bug比移植更加耗费时间。

View File

@ -0,0 +1,7 @@
# px4飞控常见报错及解决办法
* # Power redundancy not met: 0 instead of 1
setting COM_POWER_COUNT to 0

32
ubuntu 下vnc的使用.md Normal file
View File

@ -0,0 +1,32 @@
# ubuntu 下vnc的使用
vnc安装
vnc更换桌面
vnc启动
```shell
vncserver -geometry 1920x1080
```
vnc连接
* Mac
启动screensharing输入IP和端口号输入密码
* Windows
启动mobaxterm 找到vnc 输入IP和端口号输入密码
* Ubuntu
安装vnc viewer
*
*

View File

@ -1,7 +0,0 @@
ubuntu 安装gitlab
```shell
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/bionic/gitlab-ce_13.6.7-ce.0_amd64.deb/download.deb
dpkg -i gitlab-ce_13.6.7-ce.0_amd64.deb
```

View File

@ -1,23 +0,0 @@
# ubuntu 笔记本合盖不休眠
```
sudo vim /etc/systemd/logind.conf
```
其中的
#HandleLidSwitch=suspend
改成
HandleLidSwitch=ignore
之后重启服务或者执行reboot
```
service systemd-logind restart
```

View File

@ -1,11 +0,0 @@
# ubuntu安装edge
```sh
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list'
sudo rm microsoft.gpg
sudo apt update
sudo apt install microsoft-edge-dev
```

BIN
~$宣讲会演讲稿.docx Normal file

Binary file not shown.

32
买衣服尺码.md Normal file
View File

@ -0,0 +1,32 @@
# 买衣服尺码
胸围
肩宽
臀围
| 名称 | 尺寸(厘米) |
| ---------------- | :----------: |
| 肩宽 | 48 |
| 胸围 | 90 |
| 臂围 | 28 |
| 臀围 | 97 |
| 衬衫袖长 | 57 |
| 短袖袖长 | |
| 七分袖袖长 | |
| 长袖袖长 | |
| 夹克短袖长袖衣长 | |
| 西装正装衣长 | |
| 中长款外套衣长 | |
| 长款外套衣长 | 100 |
| 高腰腰围 | |
| 中腰腰围 | 80 |
| 低腰腰围 | |
| 大腿围 | 49 |
| 小腿围 | 33 |
| 脚围 | |
| 九分裤裤长 | |
| 长裤裤长 | 86 |
| | |
| | |

View File

@ -1,6 +1,6 @@
# 切换cmake和gcc版本 # 切换cmake和gcc版本
### 切换cmake版本 #### 切换cmake版本
```shell ```shell
sudo gedit ~/.bashrc sudo gedit ~/.bashrc
@ -15,7 +15,7 @@ export PATH=$CMAKE_HOME:$PATH
CMAKE_HOME后面的路径为下载解压后的cmake的bin路径 CMAKE_HOME后面的路径为下载解压后的cmake的bin路径
### 切换GCC版本 #### 切换GCC版本
安装其他版本的gcc其中7为版本号 安装其他版本的gcc其中7为版本号

15
大疆自主降落.md Normal file
View File

@ -0,0 +1,15 @@
# 大疆自主降落
### 之前进展
* Aruco 已经可以正常检测目标根据粗略测试结果误差在5cm左右
* 视频流解码已完成
### 未来计划
* 预计本周末可以进行真机测试
* 根据测试结果进行改进,优化延迟和检测精度
* 目前目标检测都是在A4纸大小的面积上进行后续可以定制一块符合停机坪大小的降落板更大的降落板会提高目标检测的准确性和可检测的最大距离

View File

@ -0,0 +1,144 @@
# 大疆自主降落无人机会议纪要
#### 进展
* 完成视频流数据的解析和降落点的检测,但是还存在一些问题
* 完成了控制器的设计,方同学需重新审核一下即可进行模拟器测试
#### 未解决问题
* 相机自动对焦之后会导致参数变化,导致需要重新标定参数,但是自主降落只是功能
```java
// 配置速度控制指令发送
private static BaseProduct product;
private float virtualroll = 0f;
private float virtualpitch = 0f;
private float virtualyaw = 0f;
private float virtualthrottle = 0f;
private Timer sendVirtualStickDataTimer;
private SendVirtualStickDataTask sendVirtualStickDataTask;
//设置虚拟摇杆
FlightController flightController = getFlightController();
public static synchronized BaseProduct getProductInstance() {
product = DJISDKManager.getInstance().getProduct();
return product;
}
public static boolean isAircraftConnected() {
return getProductInstance() != null && getProductInstance() instanceof Aircraft;
}
public static synchronized Aircraft getAircraftInstance() {
if (!isAircraftConnected()) {
return null;
}
return (Aircraft) getProductInstance();
}
public static FlightController getFlightController() {
Aircraft aircraft = getAircraftInstance();
if (aircraft != null) {
return aircraft.getFlightController();
}
return null;
}
public static boolean isProductModuleAvailable() {
return (null != getProductInstance());
}
public static boolean isAircraft() {
return getProductInstance() instanceof Aircraft;
}
public static boolean isFlightControllerAvailable() {
return isProductModuleAvailable() && isAircraft() && (null != getAircraftInstance()
.getFlightController());
}
private class SendVirtualStickDataTask extends TimerTask {
@Override
public void run() {
if (isFlightControllerAvailable()) {
getAircraftInstance()
.getFlightController()
.sendVirtualStickFlightControlData(new FlightControlData(virtualpitch,
virtualroll,
virtualyaw,
virtualthrottle),
new CommonCallbacks.CompletionCallback() {
@Override
public void onResult(DJIError djiError) {
}
});
}
}
}
// 完成配置速度控制指令发送
//开始发送速度控制指令
private void start_auto_landing(){
if(flightController == null){
if(flightController == null)Toast.makeText(MainActivity.this,"无人机未连接请连接无人机后重新打开app",Toast.LENGTH_SHORT).show();
}else{
long starttime = System.currentTimeMillis();
Toast.makeText(this,"开始任务",Toast.LENGTH_SHORT).show();
flightController.setVirtualStickModeEnabled(true, new CommonCallbacks.CompletionCallback() {
@Override
public void onResult(DJIError djiError) {
if (djiError != null) {
Toast.makeText(MainActivity.this,"err->"+djiError.toString(),Toast.LENGTH_SHORT).show();
}
}
});
flightController.setFlightOrientationMode(FlightOrientationMode.AIRCRAFT_HEADING, new CommonCallbacks.CompletionCallback() {
@Override
public void onResult(DJIError djiError) {
Toast.makeText(MainActivity.this,"err->"+djiError.toString(),Toast.LENGTH_SHORT).show();
}
});
flightController.setVirtualStickAdvancedModeEnabled(true);//打开虚拟摇杆高级模式
flightController.setRollPitchControlMode(RollPitchControlMode.VELOCITY);//设置rollpitch控制为速度
flightController.setYawControlMode(YawControlMode.ANGLE);//设置yaw控制为角度
flightController.setVerticalControlMode(VerticalControlMode.VELOCITY);//设置垂直方向速度为速度
flightController.setRollPitchCoordinateSystem(FlightCoordinateSystem.GROUND);//设置坐标系为大地坐标系
long endTime = System.currentTimeMillis();
if (null == sendVirtualStickDataTimer) {
sendVirtualStickDataTask = new SendVirtualStickDataTask();
sendVirtualStickDataTimer = new Timer();
sendVirtualStickDataTimer.schedule(sendVirtualStickDataTask, 0, 50);
}
}
}
//结束发送速度控制指令
private void stop_auto_landing (){
if(flightController != null){
getAircraftInstance().getFlightController().setVirtualStickModeEnabled(false, new CommonCallbacks.CompletionCallback() {
@Override
public void onResult(DJIError djiError) {
if (djiError != null) {
Toast.makeText(MainActivity.this,"err->"+djiError.toString(),Toast.LENGTH_SHORT).show();
}
}
});
}
Toast.makeText(MainActivity.this,"复飞停止",Toast.LENGTH_SHORT).show();
// 虚拟摇杆停止
if(sendVirtualStickDataTimer != null){
sendVirtualStickDataTimer.cancel();
sendVirtualStickDataTimer = null;
sendVirtualStickDataTask = null;
}
}
```

BIN
宣讲会演讲稿.docx Normal file

Binary file not shown.

View File

@ -2,12 +2,20 @@
## 若联科技简介 ## 若联科技简介
若联科技创立于2015年总部位于中国杭州滨江海创基地由海归博士团队创立而成。
在物联网和人工智能浪潮中,若联科技研发无人机飞控和集群无人机操作系统,为无人机表演、工业高空检测、科研教学提供无人机产品和系统解决方案。
[^1]在物联网和人工智能浪潮中
[^1]:yewuya
*无人机
除了商业版产品我们通过发布个人版产品开源自身领先技术建设全球开发者社区优选技术IP和行业应用促进技术与市场高效对接实现开放创新 。 除了商业版产品我们通过发布个人版产品开源自身领先技术建设全球开发者社区优选技术IP和行业应用促进技术与市场高效对接实现开放创新 。
[^2]在物联网和人工
[^2]: yewuy11a
若联科技同时还取得了以下成就: 若联科技同时还取得了以下成就:
•浙江省5G产业联盟成员单位 •浙江省5G产业联盟成员单位

View File

@ -0,0 +1,8 @@
# 峰飞航空猎头沟通结果
* 公司接受了德国投资一亿美元(未公开)
* 公司和军方存在合作(未公开)
* 周末不加班,平时任务重的话会加班,有调休
* 薪资15K 90%的可能性拿到
* 飞控算法工程师岗位直接发offer ,可选签三方(猎头说签三方比较麻烦)

70
自我介绍.md Normal file
View File

@ -0,0 +1,70 @@
# 自我介绍
* 飞控算法工作内容
与硬件、软件、结构等同事共同确定飞行器的主要参数,包括重量、动力、续航、功能,从而确定飞行器类型、确定各执行器和传感器的性能指标。
与嵌入式工程师沟通系统架构,确定程序中算法任务的执行频率、各个传感器调用方法、存储方法。
如果团队人多,根据人数拆解算法工作,比如几个人做组合导航,几个人做控制,组合导航里姿态和位置拆不拆开,高度分不分离出来。
如果只有一个人先测传感器数据最主要的是惯导看输出值有无问题如果有飞行器直接上机在真实的振动环境下看是否需要加低通滤波等处理还包括气压计、超声波、毫米波、摄像头、GPS这些传感器也都需要测试。
写标定算法,标定加速度计、陀螺仪、磁力计(如有)。
写状态显示算法如有LED时什么颜色代表什么状态。
确定数据融合方案,现在主流的都是卡尔曼滤波,然后开始设计算法,在飞控板上调试,看姿态、位置、高度、速度等状态量估计值是否合理。
写控制算法最简单常用的就是PID在简单的环境下试飞、调参。
增加复杂环境下的逻辑处理,比如使用超声波测高时,飞行器飞过楼梯怎么处理,如果是倾转旋翼,倾转过程如何控制等。
FDI算法设计用于隔离异常比如GPS丢星。
如有任务设备,简单调试,比如控制相机曝光,操作执行机构。
功能开发,比如航线规划后飞自动任务,避障,跟踪,定点环绕,固定区域巡逻等。
跟踪大量试飞测试,确保稳定性。
面试官好我叫吴金辉中国计量大学现代科技学院的计算机专业的学生在校期间在学好专业课的同时在大一大二参加了两年中国国际飞行器设计挑战赛CADC大一主要是跟着学长学习大二的时候我作为组长带领同学和学弟们参加比赛。两年的参赛经验让我学到了很多东西也让我对无人机这方面产生了浓厚的兴趣。我参加的项目是垂直起降载运大致规则是设计一个不超过两个电机的飞行器但不能使用直升机需要飞行器做到在起降区中装载货物按照一定的轨迹飞行之后将货物投放到一个0.4M直径的圆筒中,由于起降区面积比较小飞行器只能垂直起降。这就导致只能设计一些非传统的机型,在此期间也接触并制作很多种无人机,尾坐式垂直起降,倾转旋翼无人机,变距四轴,最后根据机型的测试结果的综合考虑,选用了变距四轴无人机作为最终的方案。最终也取得了不错的成绩,拿到了两个国家一等奖,团队总成绩排名第二的好成绩。两年的参赛经验让我学到了很多东西,也让我对无人机这方面产生了浓厚的兴趣。由于大一大二的时候能力有限,参加比赛的时候更多的是对现有飞控的参数的调整和一些自定义的配置,修改一下混控器这些简单的操作。我在大三的时候主动去了解了一些无人机飞控开发的内容,同时也去了一家无人机公司实习。实习的公司是杭州若联科技,公司的主要业务是无人机集群灯光秀和工业无人机。我在实习期间也参与了一些项目,在实习期间参与了一些项目也学到了许多东西。通过这些项目的实战,让我对无人机系统有着更深入的了解。也积累了更多的经验。
请问为什么pid不需要建模呢是因为参数最后依据实际情况来整定吗可是开源飞控几乎都不需要调参不管搭配很么鸡架什么电机什么桨都能飞得不错难道pid的参数与这些都无关吗那与什么有关系呢
PID控制是只需要目标设定和反馈值就可以反馈值可以用状态估计算法得到有了这两个pid就控制误差趋于零即可。开源飞控几乎不需要调参是因为鲁棒性相对好些机架或者电机之类的影响不会使性能差距很大但是如果变化很大的话还是能感觉出来参数不合适的所以一组参数就可以获得良好性能。所以本身pid控制器就不是基于模型调出来的当你飞行器变化一些参数影响没有那么大。