【PX4 飞控剖析】06 树莓派加载安装ROS,Mavros以及PX4固件

  • 标题 : PX4二次开发教程:
  • 起源: 根据阿木实验室讲解课程整理的学习笔记,推荐大家学习无人机的去学习这个课程,俗话说的好:问渠那得清如许,唯有源头活水来 -
    在这里插入图片描述
  • PX4智能无人机开发课程:https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=39
  • 在这里插入图片描述

1.树莓派.刷镜像

  • 1.1.用Win32DiskImager刷入ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi的镜像。

Ubuntu mate是测试过最好的。
在这里插入图片描述

1.2.开机配置

语言:英语
注意:设置用户名和密码的时候,设置为开机自启动,以后通电就进入桌面了。不然要是将树莓派安装到设备上,到时候用起来不方便。
wifi要是找不到,将现有的wifi配置删除,重启即可

2.树莓派.远程连接

2.2.1.远程桌面

sudo apt-get install xrdp
win8打开远程桌面连接。
输入你树莓派或者linux系统的用户名密码。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

来自 http://blog.csdn.net/summerdj/article/details/51433546

2.2.安装putty

1、安装ssh服务

sudo apt-get install openssh-server

2、启动、停止、重启ssh服务

/etc/init.d/ssh start #开始服务
/etc/init.d/ssh stop #停止服务
/etc/init.d/ssh restart #重启服务
在这里插入图片描述

来自 https://www.cnblogs.com/sovagxa/p/7527496.html

3启动putty

输入树莓派的ip(可在远程桌面通过ifconfig或者路由器查看)
在这里插入图片描述

输入账号密码登陆。
4.putt自启动
编辑启动文件

sudo nano /etc/rc.local

添加

sudo /etc/init.d/ssh start 

在这里插入图片描述

Ctrl+x保存 退出

3.树莓派.安装ros和mavros

由于树莓派的源国内支持的参差不齐,不建议换源,起码阿里巴巴的源不行。
在这里插入图片描述

接下来的操作和pc的一致

3.3.1.系统更新

sudo apt update 
sudo apt full-upgrade 

在这里插入图片描述
在这里插入图片描述

3.2.安装ros

根据官网的步骤安装

1.添加源

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

在这里插入图片描述

2.验证密钥

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

在这里插入图片描述

3.更新软件包

sudo apt-get update

4.安装ros(因为树莓派性能较弱,所以安装ros-kinetic-ros-base)

sudo apt-get install ros-kinetic-ros-base

在这里插入图片描述

5.初始化 rosdep

sudo rosdep init
rosdep update

在这里插入图片描述

6.环境设置

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
source /opt/ros/kinetic/setup.bash

7.安装依赖包

sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

8.验证安装结果

roscore

安装完毕
具体安装过程详见官网:http://wiki.ros.org/kinetic/Installation/Ubuntu

9.mavros安装
源码安装有点问题,估计是系统编译环境不全,直接apt安装
sudo apt-get install ros-kinetic-mavros ros-kinetic-mavros-extras
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
sudo chmod +x install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh

来自 https://github.com/mavlink/mavros/blob/master/mavros/README.md#installation

4.树莓派.与飞控运行

4.4.1.配置串口(pin脚的串口比较麻烦,默认给了蓝牙了)在这里插入图片描述

进入树莓派串口配置:

sudo raspi-config

在这里插入图片描述

选择接口配置
在这里插入图片描述

配置串口
在这里插入图片描述

关闭shell
在这里插入图片描述

打开串口
在这里插入图片描述

结束后重启
其次,编辑文档 /boot/config.txt,命令如下:

 sudo nano /boot/config.txt

在文档的末尾,添加语句:

dtoverlay=pi3-miniuart-bt  

接着,我们编辑文档 /boot/cmdline.txt,命令如下:

sudo nano /boot/cmdline.txt

将文档内容用以下内容完全替换(具体操作时是删除原文档中多余的语句):

dwc_otg.lpm_enable=0  console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4  elevator=deadline fsck.repair=yes   rootwait  

添加用户组:

sudo gpasswd --add user_name dialout

(否则没有使用串口的权限)

sudo gpasswd --add  pi dialout
 
sudo apt-get update
sudo apt-get upgrade
sudo reboot

完成以上步骤后,我们现在可以通过"ttyAMA0"与外部设备进行连接了。

来自 http://blog.csdn.net/berryfish/article/details/60147631

4.2.编辑启动文件

 sudo nano /opt/ros/kinetic/share/mavros/launch/px4.launch

在这里插入图片描述

将默认的端口改为

ttyAMA0:57600
 default="/dev/ttyAMA0:57600" />

在这里插入图片描述

4.3.按照之前仿真的说明,生成ros的节点,配置好相关信息。启动也

是一样的
参考创建workspace

4.4.文件传输

使用FIleZilla软件进行传输,比较方便,sftp://ip即可
在这里插入图片描述

4.5.编译

在这里插入图片描述

source devel/setup.bash

在这里插入图片描述

4.6.启动验证

roslaunch mavros px4.launch

这个是有串口配置问题,默认串口被蓝牙用了(按照1进行修改)
这个是正常的:
在这里插入图片描述

另一个窗口

cd amov_ros/
source devel/setup.bash
rosrun demo demo_node

在这里插入图片描述

地面站上飞行模式已经变为offbord模式
在这里插入图片描述

具体ros和飞控的代码,google上面有很多,有控制姿态的,有控制位置的。参考这个:
https://404warehouse.net/2015/12/20/autopilot-offboard-control-using-mavros-package-on-ros/

  • 1
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的C++程序,它使用mavros库向PX4飞控发布指令,让四旋翼无人机悬停: ```c++ #include <ros/ros.h> #include <mavros_msgs/CommandBool.h> #include <mavros_msgs/CommandTOL.h> #include <mavros_msgs/OverrideRCIn.h> int main(int argc, char **argv) { // 初始化ROS节点 ros::init(argc, argv, "hover"); ros::NodeHandle nh; // 发布mavros命令 ros::Publisher rc_pub = nh.advertise<mavros_msgs::OverrideRCIn>("/mavros/rc/override", 10); ros::Publisher arming_pub = nh.advertise<mavros_msgs::CommandBool>("/mavros/cmd/arming", 10); ros::Publisher set_mode_pub = nh.advertise<mavros_msgs::SetMode>("/mavros/set_mode", 10); // 等待连接到飞控 while(ros::ok() && !ros::service::exists("/mavros/set_mode", true)) { ROS_INFO("Waiting for service /mavros/set_mode to become available"); ros::Duration(1).sleep(); } // 解锁飞控 mavros_msgs::CommandBool arming_cmd; arming_cmd.request.value = true; if(!arming_pub.call(arming_cmd) || !arming_cmd.response.success) { ROS_ERROR("Failed to arm the vehicle"); return -1; } // 将飞控模式设置为悬停模式 mavros_msgs::SetMode set_mode_cmd; set_mode_cmd.request.custom_mode = "ALT_HOLD"; if(!set_mode_pub.call(set_mode_cmd) || !set_mode_cmd.response.success) { ROS_ERROR("Failed to set the vehicle mode to ALT_HOLD"); return -1; } // 发布悬停指令 mavros_msgs::OverrideRCIn rc_cmd; rc_cmd.channels[0] = 1500; // 油门通道,1500表示无动作 rc_cmd.channels[1] = 1500; // 副翼通道,1500表示无动作 rc_cmd.channels[2] = 1500; // 方向舵通道,1500表示无动作 rc_cmd.channels[3] = 1500; // 升降舵通道,1500表示无动作 rc_cmd.channels[4] = 1500; // 油门自动控制通道,1500表示关闭自动控制 rc_cmd.channels[5] = 1500; // 油门自动控制通道,1500表示关闭自动控制 rc_cmd.channels[6] = 1500; // 油门自动控制通道,1500表示关闭自动控制 rc_cmd.channels[7] = 1500; // 油门自动控制通道,1500表示关闭自动控制 rc_pub.publish(rc_cmd); // 等待5秒钟 ros::Duration(5).sleep(); // 关闭无人机 arming_cmd.request.value = false; if(!arming_pub.call(arming_cmd) || !arming_cmd.response.success) { ROS_ERROR("Failed to disarm the vehicle"); return -1; } return 0; } ``` 这个程序首先通过mavros库初始化ROS节点,并创建了三个发布器,用于发布解锁飞控、设置飞控模式和控制指令。接下来,程序进入一个while循环,等待连接到飞控。一旦连接成功,程序发送解锁指令并等待响应。如果解锁成功,则将飞控模式设置为悬停模式,并等待响应。最后,程序使用mavros库的OverrideRCIn消息类型发布了一个悬停的控制指令。这个指令将无人机的所有通道都设定为1500,表示无动作。程序等待5秒钟后,发送一个解锁指令将无人机关闭。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值