diff --git a/Linux(Ubuntu个人常用软件安装).md b/Linux(Ubuntu个人常用软件安装).md new file mode 100644 index 0000000..66499a2 --- /dev/null +++ b/Linux(Ubuntu个人常用软件安装).md @@ -0,0 +1,94 @@ +# Linux(Ubuntu个人常用软件安装) + +#### 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 +``` + +输入数字选择版本 \ No newline at end of file diff --git a/conda 切换虚拟环境.md b/conda 切换虚拟环境.md new file mode 100644 index 0000000..2c875bb --- /dev/null +++ b/conda 切换虚拟环境.md @@ -0,0 +1,7 @@ +# conda 切换虚拟环境 + +```shell +conda env list //显示所有环境 +conda activate my_test //切换到my_test环境 +``` + diff --git a/git 常用指令.md b/git 常用指令.md index b927ea5..38c0945 100644 --- a/git 常用指令.md +++ b/git 常用指令.md @@ -10,6 +10,7 @@ git commit -am “” //添加所有修改文件的commit git push origin master //上传代码到服务器 git remote rm origin //删除所有远程服务器 git remote add origin url //添加新的远程服务器 +git submodule update --init --recursive //更新下载全部子模组 ``` #### 生成密钥 diff --git a/phenix mini 移植px4 1.12的无人车代码.md b/phenix mini 移植px4 1.12的无人车代码.md new file mode 100644 index 0000000..5bc4f5c --- /dev/null +++ b/phenix mini 移植px4 1.12的无人车代码.md @@ -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文件夹下的mixer,output_limit ,pwm,src/modules文件夹下的px4iofirmware,rover_pos_control,这些代码都和无人车的控制相关,可能还有部分未列出的,由于1.7.3和1.12的版本时间间隔过长等原因,导致这两个版本的代码风格和软件架构发生了挺多变化,很多东西不是一脉相承的,增加了移植的难度,而且由于不清楚究竟是哪部分原因导致的1.7.3版本无人车模式没有PWM输出,所以可能需要把无人车相关的全部代码都移植到phenix mini中去,或者选择找到PWM没有输出的原因,修复这个BUG,这两者所消耗的时间并不清楚,可能找出bug比移植更加耗费时间。 \ No newline at end of file diff --git a/px4飞控常见报错及解决办法.md b/px4飞控常见报错及解决办法.md new file mode 100644 index 0000000..4afb13c --- /dev/null +++ b/px4飞控常见报错及解决办法.md @@ -0,0 +1,7 @@ +# px4飞控常见报错及解决办法 + + + +* # Power redundancy not met: 0 instead of 1 + +setting COM_POWER_COUNT to 0 \ No newline at end of file diff --git a/ubuntu 下vnc的使用.md b/ubuntu 下vnc的使用.md new file mode 100644 index 0000000..f8c1d00 --- /dev/null +++ b/ubuntu 下vnc的使用.md @@ -0,0 +1,32 @@ +# ubuntu 下vnc的使用 + +vnc安装 + +vnc更换桌面 + +vnc启动 + +```shell +vncserver -geometry 1920x1080 +``` + +vnc连接 + +* Mac + +启动screensharing,输入IP和端口号输入密码 + +* Windows + +启动mobaxterm 找到vnc 输入IP和端口号输入密码 + +* Ubuntu + +安装vnc viewer + +* + +* + + + diff --git a/ubuntu 安装gitlab.md b/ubuntu 安装gitlab.md deleted file mode 100644 index 56290a7..0000000 --- a/ubuntu 安装gitlab.md +++ /dev/null @@ -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 -``` - diff --git a/ubuntu 笔记本合盖不休眠.md b/ubuntu 笔记本合盖不休眠.md deleted file mode 100644 index e56f9b5..0000000 --- a/ubuntu 笔记本合盖不休眠.md +++ /dev/null @@ -1,23 +0,0 @@ -# ubuntu 笔记本合盖不休眠 - -``` -sudo vim /etc/systemd/logind.conf - -``` - -其中的 - -#HandleLidSwitch=suspend - -改成 - -HandleLidSwitch=ignore - -之后重启服务或者执行reboot - -``` -service systemd-logind restart -``` - - - diff --git a/ubuntu安装edge.md b/ubuntu安装edge.md deleted file mode 100644 index 66d85ec..0000000 --- a/ubuntu安装edge.md +++ /dev/null @@ -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 -``` - diff --git a/~$宣讲会演讲稿.docx b/~$宣讲会演讲稿.docx new file mode 100644 index 0000000..5d4505c Binary files /dev/null and b/~$宣讲会演讲稿.docx differ diff --git a/买衣服尺码.md b/买衣服尺码.md new file mode 100644 index 0000000..149423b --- /dev/null +++ b/买衣服尺码.md @@ -0,0 +1,32 @@ +# 买衣服尺码 + +胸围 + +肩宽 + +臀围 + +| 名称 | 尺寸(厘米) | +| ---------------- | :----------: | +| 肩宽 | 48 | +| 胸围 | 90 | +| 臂围 | 28 | +| 臀围 | 97 | +| 衬衫袖长 | 57 | +| 短袖袖长 | | +| 七分袖袖长 | | +| 长袖袖长 | | +| 夹克短袖长袖衣长 | | +| 西装正装衣长 | | +| 中长款外套衣长 | | +| 长款外套衣长 | 100 | +| 高腰腰围 | | +| 中腰腰围 | 80 | +| 低腰腰围 | | +| 大腿围 | 49 | +| 小腿围 | 33 | +| 脚围 | | +| 九分裤裤长 | | +| 长裤裤长 | 86 | +| | | +| | | \ No newline at end of file diff --git a/切换cmake和gcc版本.md b/切换cmake和gcc版本.md index 39fed06..b5c7c4d 100644 --- a/切换cmake和gcc版本.md +++ b/切换cmake和gcc版本.md @@ -1,6 +1,6 @@ # 切换cmake和gcc版本 -### 切换cmake版本 +#### 切换cmake版本 ```shell sudo gedit ~/.bashrc @@ -15,7 +15,7 @@ export PATH=$CMAKE_HOME:$PATH CMAKE_HOME后面的路径为下载解压后的cmake的bin路径 -### 切换GCC版本 +#### 切换GCC版本 安装其他版本的gcc,其中7为版本号 diff --git a/大疆自主降落.md b/大疆自主降落.md new file mode 100644 index 0000000..59837c4 --- /dev/null +++ b/大疆自主降落.md @@ -0,0 +1,15 @@ +# 大疆自主降落 + +### 之前进展 + +* Aruco 已经可以正常检测目标,根据粗略测试结果误差在5cm左右 +* 视频流解码已完成 + +### 未来计划 + +* 预计本周末可以进行真机测试 +* 根据测试结果进行改进,优化延迟和检测精度 +* 目前目标检测都是在A4纸大小的面积上进行,后续可以定制一块符合停机坪大小的降落板,更大的降落板会提高目标检测的准确性和可检测的最大距离 + + + diff --git a/大疆自主降落无人机会议纪要.md b/大疆自主降落无人机会议纪要.md new file mode 100644 index 0000000..3990330 --- /dev/null +++ b/大疆自主降落无人机会议纪要.md @@ -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; + } + } +``` + + + diff --git a/宣讲会演讲稿.docx b/宣讲会演讲稿.docx new file mode 100644 index 0000000..d1389a4 Binary files /dev/null and b/宣讲会演讲稿.docx differ diff --git a/宣讲会演讲稿.md b/宣讲会演讲稿.md index 5c7bbf8..80dabdd 100644 --- a/宣讲会演讲稿.md +++ b/宣讲会演讲稿.md @@ -2,12 +2,20 @@ ## 若联科技简介 - 若联科技创立于2015年,总部位于中国杭州滨江海创基地,由海归博士团队创立而成。 -​ 在物联网和人工智能浪潮中,若联科技研发无人机飞控和集群无人机操作系统,为无人机表演、工业高空检测、科研教学提供无人机产品和系统解决方案。 + +​ [^1]在物联网和人工智能浪潮中 + +[^1]:yewuya + +*无人机 ​ 除了商业版产品,我们通过发布个人版产品开源自身领先技术,建设全球开发者社区,优选技术IP和行业应用,促进技术与市场高效对接,实现开放创新 。 +​ [^2]在物联网和人工 + +[^2]: yewuy11a + 若联科技同时还取得了以下成就: •浙江省5G产业联盟成员单位 diff --git a/峰飞航空猎头沟通结果.md b/峰飞航空猎头沟通结果.md new file mode 100644 index 0000000..4129a7b --- /dev/null +++ b/峰飞航空猎头沟通结果.md @@ -0,0 +1,8 @@ +# 峰飞航空猎头沟通结果 + +* 公司接受了德国投资一亿美元(未公开) +* 公司和军方存在合作(未公开) +* 周末不加班,平时任务重的话会加班,有调休 +* 薪资15K 90%的可能性拿到 +* 飞控算法工程师岗位,直接发offer ,可选签三方(猎头说签三方比较麻烦) + diff --git a/自我介绍.md b/自我介绍.md new file mode 100644 index 0000000..067dd4f --- /dev/null +++ b/自我介绍.md @@ -0,0 +1,70 @@ +# 自我介绍 + +* 飞控算法工作内容 + +与硬件、软件、结构等同事共同确定飞行器的主要参数,包括重量、动力、续航、功能,从而确定飞行器类型、确定各执行器和传感器的性能指标。 + +与嵌入式工程师沟通系统架构,确定程序中算法任务的执行频率、各个传感器调用方法、存储方法。 + +如果团队人多,根据人数拆解算法工作,比如几个人做组合导航,几个人做控制,组合导航里姿态和位置拆不拆开,高度分不分离出来。 + +如果只有一个人,先测传感器数据,最主要的是惯导,看输出值有无问题,如果有飞行器,直接上机,在真实的振动环境下看是否需要加低通滤波等处理,还包括气压计、超声波、毫米波、摄像头、GPS这些传感器也都需要测试。 + +写标定算法,标定加速度计、陀螺仪、磁力计(如有)。 + +写状态显示算法,如有LED时,什么颜色代表什么状态。 + +确定数据融合方案,现在主流的都是卡尔曼滤波,然后开始设计算法,在飞控板上调试,看姿态、位置、高度、速度等状态量估计值是否合理。 + +写控制算法,最简单常用的就是PID,在简单的环境下试飞、调参。 + +增加复杂环境下的逻辑处理,比如使用超声波测高时,飞行器飞过楼梯怎么处理,如果是倾转旋翼,倾转过程如何控制等。 + +FDI算法设计,用于隔离异常,比如GPS丢星。 + +如有任务设备,简单调试,比如控制相机曝光,操作执行机构。 + +功能开发,比如航线规划后飞自动任务,避障,跟踪,定点环绕,固定区域巡逻等。 + +跟踪大量试飞测试,确保稳定性。 + + + + + +​ 面试官好,我叫吴金辉,中国计量大学现代科技学院的计算机专业的学生,在校期间在学好专业课的同时在大一大二参加了两年中国国际飞行器设计挑战赛(CADC),大一主要是跟着学长学习,大二的时候我作为组长带领同学和学弟们参加比赛。两年的参赛经验让我学到了很多东西,也让我对无人机这方面产生了浓厚的兴趣。我参加的项目是垂直起降载运,大致规则是,设计一个不超过两个电机的飞行器,但不能使用直升机,需要飞行器做到在起降区中装载货物按照一定的轨迹飞行之后,将货物投放到一个0.4M直径的圆筒中,由于起降区面积比较小飞行器只能垂直起降。这就导致只能设计一些非传统的机型,在此期间也接触并制作很多种无人机,尾坐式垂直起降,倾转旋翼无人机,变距四轴,最后根据机型的测试结果的综合考虑,选用了变距四轴无人机作为最终的方案。最终也取得了不错的成绩,拿到了两个国家一等奖,团队总成绩排名第二的好成绩。两年的参赛经验让我学到了很多东西,也让我对无人机这方面产生了浓厚的兴趣。由于大一大二的时候能力有限,参加比赛的时候更多的是对现有飞控的参数的调整和一些自定义的配置,修改一下混控器这些简单的操作。我在大三的时候主动去了解了一些无人机飞控开发的内容,同时也去了一家无人机公司实习。实习的公司是杭州若联科技,公司的主要业务是无人机集群灯光秀和工业无人机。我在实习期间也参与了一些项目,在实习期间参与了一些项目也学到了许多东西。通过这些项目的实战,让我对无人机系统有着更深入的了解。也积累了更多的经验。 + + + + + +请问为什么pid不需要建模呢?是因为参数最后依据实际情况来整定吗?可是开源飞控几乎都不需要调参,不管搭配很么鸡架什么电机什么桨,都能飞得不错,难道pid的参数与这些都无关吗?那与什么有关系呢? + +PID控制是只需要目标设定和反馈值就可以,反馈值可以用状态估计算法得到,有了这两个,pid就控制误差趋于零即可。开源飞控几乎不需要调参是因为,鲁棒性相对好些,机架或者电机之类的影响不会使性能差距很大(但是如果变化很大的话还是能感觉出来参数不合适的),所以一组参数就可以获得良好性能。所以,本身pid控制器就不是基于模型调出来的,当你飞行器变化一些参数,影响没有那么大。 + + + + + + + + + + + + + + + + + + + + + + + + + + +