跳转至

无人机实验

1211 个字 48 行代码 预计阅读时间 5 分钟

基础信息

时间: 分组: 实验内容: 实验要求:4000字以上报告 tips:每组一位助教,珍惜助教hhh

硬件平台

硬件搭建

qgroundcontrol

Download and Install | QGC Guide (master)

树莓派安装

树莓派发烫

解决方法:因为实验室没有多余的风扇套装了,所以在淘宝购买了两个树莓派风扇。

动捕测试

软件搭建

网络遇到问题

在开始组装时候,遇到了校网连接问题,无法下载软件。

基本 linux

换源 ros,pip -> fishros

wget http://fishros.com/install -O fishros && . fishros
sudo apt-get update
sudo apt-get upgrade

terminator

sudo apt-get install terminator

ssh

sudo apt install net-tools
ifconfig
sudo apt-get install openssh-server
ssh user@remote
ssh -X ldz@192.168.0.1  # 带图形化界面
ssh -p 1234 ldz@192.168.0.1 # 指定端口
vim /etc/ssh/sshd_config
  • 33 : PermitRootLogin without-password(第 33 行) 改为 PermitRootLogin yes 并去掉前面的注释符号(#)
  • 57 :#PasswordAuthentication yes( 57 ) 的注释去掉,如果是 no 就改为 yes
  • 保存
service ssh restart

验证安装

service ssh status

开机自启动

update-rc.d ssh enable

配置免密登陆

ssh-keygen -t rsa
然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下)

执行结束以后会在/home/当前用户 目录下生成一个 .ssh 文件夹 , 其中包含私钥文件 id_rsa 和公钥文件 id_rsa.pub

ssh-copy-id 会将公钥写到远程主机的 ~/.ssh/authorized_key 文件中

ssh-copy-id name@ip

注意,windows cmd 中不能直接执行 ssh-copy-id 命令,可以使用 git bash 或者其他 linux 终端工具

当出现

Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'HAHA@127.0.0.1'" and check to make sure that only the key(s) you wanted were added.

说明配置成功!

vscode

fishros 下载比较方便

wget http://fishros.com/install -O fishros && . fishros

ros

fishros 下载比较方便

wget http://fishros.com/install -O fishros && . fishros

20.04 noetic

htop | 系统状态监测与进程管理

sudo apt-get install htop

nomachine

查看芯片架构

uname -m

在官网上下载对应的版本 NoMachine - NoMachine for Arm

sudo dpkg -i nomachine_7.6.2_4_armhf.deb

PlotJuggler

简介

PlotJuggler,一个基于 Qt 的应用程序,允许用户加载、搜索和打印数据。许多 ROS 用户会为此使用 MATLAB rqt_plot,但是当要分析的数据相当大时,使用这些解决方案可能会不尽人意。

PlotJuggler rqtplot rqtbag 更好的替代品,它提供了更友好的用户界面。

  • Multiplot( 多曲线 ):将多条曲线添加到绘图中。在行、列、选项卡和 / 或单独的窗口中排列绘图。
  • Zoom( 缩放 ):轻松缩放绘图。可以锁定所有绘图的 X 轴。
  • Save/Load layouts( 保存 / 加载布局 ):组织布局后,可以将其保存到文件中以供以后重用。
  • Complete Undo/Redo( 完全撤消 / 重做 )CTRL-Z 按您的预期操作。
  • DataLoad plugins( 数据加载插件 ):轻松加载 CSV rosbags
  • DataStreaming plugins( 数据流插件 ):订阅一个或多个 ros 主题并实时绘制它们的数据。
  • RosPublisher plugin(RosPublisher 插件 ):使用交互式跟踪器重新发布原始 ROS 消息。

sudo apt-get install ros-noetic-plotjuggler
roscore
rosrun plotjuggler plotjuggler  

可以看到如下界面

教程 | PlotJuggler 绘图工具的安装使用 -CSDN 博客

vrpn

Pixhawk+PX4+VRPN +NOKOV 无人机飞控平台动捕数据传输 _vrpn 服务器 -CSDN 博客

cd ~/catkin_ws/src
git clone https://github.com/clearpathrobotics/vrpn_client_ros.git

sudo apt-get install ros-noetic-vrpn

cd ~/catkin_ws

catkin_make

查看电脑 ip 地址

启动
roslaunch vrpn_client_ros sample.launch server:=192.168.43.195:3883
查看
rostopic echo /vrpn_client_node/<刚体名称>

mavros

sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras ros-noetic-control-toolbox

cd /opt/ros/noetic/lib/mavros
sudo ./install_geographiclib_datasets.sh
sudo chmod 777 /dev/ttyACM0
cd real_ws
sudo cp src/mavros_launch_files/px4_pluginlists.yaml /opt/ros/noetic/share/mavros/launch
sudo cp src/mavros_launch_files/px4.launch /opt/ros/noetic/share/mavros/launch

启动 mavros,检查是否正常通信:

roslaunch mavros px4.launch

另一个终端

rostopic hz /mavros/imu/data

应该能得到如图所⽰的 50hz imu 数据

数学建模

仿真

代码实现

要编写的控制器部分代码位于real_ws/src/px4ctrl/src/linear_control.cpp

其中computeDesiredCollectiveThrustSignal函数⽤来根据加速度计算油门百分⽐,在实际过程中通过在线估计参数,这部分不需要同学们实现,只需要给定加速度即可。

另外需要计算的是⽆⼈机的姿态u.q。 程序提供了debug的接⼝,通过rostopic向外发送,可通过run.sh中最后一行注释记录rosbag,通过plotjuggler进行后续分析(详⻅ros仿真中的说明)

参数⽂件位于real_ws/src/px4ctrl/config/ctrl_param_fpv.yaml,可调节增益参数。

attention

  1. 注意实验安全!!!
  2. 四元数、旋转矩阵、欧拉⻆之间的转换
  3. 世界系、机体系的坐标变换
  4. 建议在实物控制器测试前确保其它模块功能正常

调试

移动飞机,查看获得的位姿是否连续光滑

检查动捕球、动捕相机、刚体识别是否都正常

注意小组间区分

启动

已经将所有要启动的程序写在⼀个脚本run.sh中,只需要⼀键即可启动,但需要先检查各个 ros 节点的 topic 是否正确:

⾸先根据在动捕中创建的刚体名称,修改src/ekf_pose/launch/PX4_vicon.launch中接收的位姿 topic

改节点利⽤ EKF 扩展卡尔曼滤波,对 imu 和动捕的数据进⾏融合估计,我们以此结果作为⽆⼈机的里程计信息给到控制器。

随后修改 run.sh 中启动 vrpn ip 为动捕主机的 ip

编译
catkin_make
source devel/setup.bash
./run.sh

可通过 rqt_graph 来检查各模块间的通讯是否正常。

调试方法

  • rosbag,记录里程计数据
    rosbag record /sim/odom
    
  • plotjuggler 数据分析软件

facontidavide/PlotJuggler

结果