• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
经典 树莓派和t265无人机搭建

ROS综合应用(一)树莓派外部控制 Pixhawk(一站到底)

https://blog.csdn.net/weixin_41869763/article/details/104258058

ubuntu20.04配置marvos+px4+XTDrone

https://blog.csdn.net/weixin_42301220/article/details/117845212

 

 官网

https://docs.px4.io/main/en/companion_computer/pixhawk_companion.html

 

 https://docs.px4.io/v1.12/zh/flight_modes/offboard.html

 

 

技术分享 | P450-详解室内外指点飞行来啦

 

https://zhuanlan.zhihu.com/p/364475780

通过MAVROS连接机载电脑(NANO/TX2/NX)与Pixhawk

https://zhuanlan.zhihu.com/p/364390798

 

一、系统环境

软硬件名称 版本 备注
树莓派 Raspberry Pi 3B 无
树莓派操作系统 Ubuntu 16.04 MATE 无
树莓派和笔记本 ROS (Melodic) 和 MAVROS Moledic 似乎只支持Ubuntu18.04 及以上
树莓派和笔记本 python 要默认为 python2 不然安装 ROS 会有问题
飞控 Pixhawk 2.4.8 无
飞控固件版本 PX4 v1.8.2 (stable) 要自己编译下载(不要怕,此文一一道来)
笔记本操作系统 Ubuntu 18.04 编译固件,相传 Windows编译源码很慢
笔记本关键软件 QGroundControl v3.5.6 用于设置飞控 TELEM波特率
笔记本关键软件 putty 用于远程登录树莓派
其他硬件 USB转TTL 和无人机TELEM 2 通信时需要
假设你已经完成以上软硬件安装,注意QGC 使用的最新PX4 固件为 v1.10.1 ,找不到下面的 SYS_COMPANION 参数,不知为何,就是不行,程序卡在自己编写的第一个 while() 循环里。至于如何下载自己想要的版本,下次专门说.

 

测试环境

电脑

联想笔记本ubuntu20

jetson nx ubuntu18

飞控

飞控 Pixhawk 2.4.8

飞控固件版本 未知

其他硬件 USB转TTL 和无人机TELEM 2 通信时需要

硬件链接

使用USB转TTL 连接树莓派 与Pixhawk 的TELEM 2 端口 ,TELEM 2 输入电压为5V, USB转TTL使用5V的。

飞控板 TELEM2 字是正的,那么从左到右六个接口分别为:

5V TX RX 无用 无用 GND

 

 

 

  最好用胶枪缝一下,不然线容易开

1线(这个线头插进去有点紧并不是完全适配的)

带锁扣GH1.25转杜邦2.54mm端子线转接线2P3P4P5P6P飞控无人机线束

 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.45292e8diJM0gM&id=673456981205&_u=n1qf7bf531a8
 

 

2 线2 插头刚刚好,但是没有转杜邦线的

V3数传连接线 电流计线 apm PIX飞控电源模块线6p对6p硅胶 xh1.25

 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.45292e8diJM0gM&id=547108606536&_u=n1qf7bf564a6

 

 

2 USB-ttl 
 

软件链接


Ubuntu20.04 noetic
Ubuntu18.04 melodic
Ubuntu16.04 kinetic
Ubuntu14.04 indigo

1、树莓派设置(完全可以先用笔记本测试)


在树莓派上,需要新增一个 ROS 程序包,然后这个包里添加自己读取的程序。

安装MAVROS,此处使用二进制安装(比官网推荐的源安装方便很多)
sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras ros-noetic-control-toolbox
安装地理数据集
sudo /opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh

 

 

 

 

 

 

 

最后一步请耐心等待,我大概等待了20分钟左右。

 

 

创建程序包

创建 /catkin_ws/src
cd /catkin_ws
编译
catkin_make
创建工程
cd ~/catkin_ws/src
catkin_create_pkg offb geometry_msgs mavros roscpp
#程序包名称 pi_offboard_px4,依赖的包 geometry_msgs, mavros 和 roscpp

  

 

 添加 .cpp 文件及必要修改

  

cd offb/src
sudo gedit offb_node.cpp

  

 

 添加以下来自 PX4官方教程的MAVROS控制例程:

 

    // 飞行模式
    // GUIDED_NOGPS AVOID_ADSB THROW BRAKE POSHOLD AUTOTUNE FLIP 
    // SPORT DRIFT OF_LOITER LAND POSITION CIRCLE RTL LOITER GUIDED AUTO ALT_HOLD ACRO STABILIZE

 

/**
 * @file offb_node.cpp
 * @brief Offboard control example node, written with MAVROS version 0.19.x, PX4 Pro Flight
 * Stack and tested in Gazebo SITL
 */

#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/State.h>

mavros_msgs::State current_state;
void state_cb(const mavros_msgs::State::ConstPtr& msg){
    current_state = *msg;
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "offb_node");
    ros::NodeHandle nh;

    ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State>
            ("mavros/state", 10, state_cb);
    ros::Publisher local_pos_pub = nh.advertise<geometry_msgs::PoseStamped>
            ("mavros/setpoint_position/local", 10);
    ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>
            ("mavros/cmd/arming");
    ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode>
            ("mavros/set_mode");

    //the setpoint publishing rate MUST be faster than 2Hz
    ros::Rate rate(20.0);

    // wait for FCU connection
    while(ros::ok() && !current_state.connected){
        ros::spinOnce();
        rate.sleep();
    }

    geometry_msgs::PoseStamped pose;
    pose.pose.position.x = 0;
    pose.pose.position.y = 0;
    pose.pose.position.z = 2;

    //send a few setpoints before starting
    for(int i = 100; ros::ok() && i > 0; --i){
        local_pos_pub.publish(pose);
        ros::spinOnce();
        rate.sleep();
    }
    
    // 飞行模式
    // GUIDED_NOGPS AVOID_ADSB THROW BRAKE POSHOLD AUTOTUNE FLIP 
    // SPORT DRIFT OF_LOITER LAND POSITION CIRCLE RTL LOITER GUIDED AUTO ALT_HOLD ACRO STABILIZE
    mavros_msgs::SetMode offb_set_mode;
    offb_set_mode.request.custom_mode = "GUIDED";//

    mavros_msgs::CommandBool arm_cmd;
    arm_cmd.request.value = true;

    ros::Time last_request = ros::Time::now();

    while(ros::ok()){
        if( current_state.mode != "GUIDED" &&
            (ros::Time::now() - last_request > ros::Duration(5.0))){
            if( set_mode_client.call(offb_set_mode) &&
                offb_set_mode.response.mode_sent){
                ROS_INFO("GUIDED enabled");
            }
            last_request = ros::Time::now();
        } else {
            if( !current_state.armed &&
                (ros::Time::now() - last_request > ros::Duration(5.0))){
                if( arming_client.call(arm_cmd) &&
                    arm_cmd.response.success){
                    ROS_INFO("Vehicle armed");
                }
                last_request = ros::Time::now();
            }
        }

        local_pos_pub.publish(pose);

        ros::spinOnce();
        rate.sleep();
    }

    return 0;
}

  

注:如果手写以上内容,很可能出错,编译产生Invocking "make -j4 -l4" failed,请根据错误多次排查。

接下来修改 CMakeLists.txt 以便编译。

 

 取消注释/修改文本,得到如下两句:

add_executable(offb src/offb_node.cpp)
target_link_libraries(offb
	${catkin_LIBRARIES}
)

  完整的CMakeLists.txt

cmake_minimum_required(VERSION 3.0.2)
project(offb)


find_package(catkin REQUIRED COMPONENTS
  geometry_msgs
  mavros
  roscpp
)


catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES offb
#  CATKIN_DEPENDS geometry_msgs mavros roscpp
#  DEPENDS system_lib
)


include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

add_executable(offb src/offb_node.cpp)
target_link_libraries(offb
	${catkin_LIBRARIES}
)

  完整的package.xml

<?xml version="1.0"?>
<package format="2">
  <name>offb</name>
  <version>0.0.0</version>
  <description>The offb package</description>

  <maintainer email="dongdong@todo.todo">dongdong</maintainer>

  <license>TODO</license>


  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>geometry_msgs</build_depend>
  <build_depend>mavros</build_depend>
  <build_depend>roscpp</build_depend>
  <build_export_depend>geometry_msgs</build_export_depend>
  <build_export_depend>mavros</build_export_depend>
  <build_export_depend>roscpp</build_export_depend>
  <exec_depend>geometry_msgs</exec_depend>
  <exec_depend>mavros</exec_depend>
  <exec_depend>roscpp</exec_depend>


  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <!-- Other tools can request additional information be placed here -->

  </export>
</package>

  编译

catkin_make

  

 

 

catkin_make 				#编译
catkin_make install
source devel/setup.bash     #配置catkin 工作空间

  

 

 

 

测试

这个过程需要树莓派打开几个终端,可以多登录几个 putty 实现。

1开启ros

 

在一个终端中运行 roscore ,启动 ROS。

 

roscore

 2开启通信节点

用途:接受本机ros节点接受程序指令,转换成飞控协议数据,串口转发给飞控。

 

首先给与串口权限,允许串口USB启用。

https://www.cnblogs.com/gooutlook/p/16494885.html

临时给与一次

sudo chmod 777 /dev/ttyUSB0

 

永久性 dongdong 当前用户名根据电脑修改 相当于把川口所在的dialout组加入到管理员dongdong的用户下

sudo usermod -aG dialout dongdong

  

 然后在另一个终端中运行

ls /dev/tty*        # 下面两句只运行一句即可(根据有 ttyUSB0 还是 ttyACM0)
roslaunch mavros px4.launch fcu_url:=/dev/ttyUSB0:57600  #有ttyUSB0
roslaunch mavros px4.launch fcu_url:=/dev/ttyACM0:57600  #有ttyACM0

 

 

 

  

 

报错 原因(不是编译报错)

1 找不到offboard模式,看来我这个固件版本没有这个模式。 

2 我尝试切换到guidece和guideceNogps模式也会有别的报错,是遥控器没开的原因。

指示灯是黄色(遥控器没开)

 

 

 guideceNogps模式  遥控器打开,灯变蓝色了,正常的截图

 

 

 

 

 

 

 

 3 程序控制节点

用途:使用自定义的程序给ros话题发布控制命令,然后控制飞机。

再在另一个终端运行 程序控制节点

source devel/setup.bash
rosrun offb offb

 判断是否进入指定模式,进入的话解锁飞机,进入解锁模式的旋转

 

 可以看到飞机电机转动解锁。

 

 

 

更改GUIDED模式,重新编译测试

 

 

 

 

 

 

此时还可以再另一个终端运

rostopic list
rostopic echo /mavros/altitude

  

查看当地海拔高度。当然,如果在 offboard_pi_node.cpp 里添加这些话题,也直接能够读取处理打印。

 

运行效果如下图

在这里插入图片描述

软件1

ubuntu mate 18.04官网下载,烧录及安装 SSH VNC ROS MAVROS librealsense realsense-ros vision_to_mavros(我自己亲自弄的)

https://blog.csdn.net/sinat_16643223/article/details/108032651?spm=1001.2014.3001.5502

软件2

基于单目视觉的四旋翼定点降落——如何通过mavros控制pixhawk(二)(这个我觉得讲得很详细)(2021.3.1现在回看发现也是对PX4官方手册里mavros-offboard代码的讲解)

https://blog.csdn.net/sinat_16643223/article/details/107589052?spm=1001.2014.3001.5502

软件3

MAVROS功能包的offboard模式控制例子

https://blog.csdn.net/weixin_44917390/article/details/106339339?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-106339339-blog-107589052.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-106339339-blog-107589052.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=1

主要过程:

要先解锁无人机,在切换无人机到offboard模式。 我们每隔五秒去检查一下与飞控的连接等是否一切正常。 在同一个循环中,我们按照指定的频率持续发送期望点信息给飞控。

 

 

软件4

offboard代码超详细注释

https://blog.csdn.net/zouxu634866/article/details/104095648?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-104095648-blog-106339339.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-104095648-blog-106339339.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=1

 

硬件1

图文并茂详细教程之--用pixhawk飞控组装一台F450四轴无人机(上)

https://blog.csdn.net/sinat_16643223/article/details/106981400

 

图文并茂详细教程之——用pixhawk飞控组装一台S500四轴无人机(上)图文并茂详细教程之——用pixhawk飞控组装一台S500四轴无人机(中)图文并茂详细教程之——用pixhawk飞控组装一台S500四轴无人机(下)

 

 

硬件2

快速搭建一个APMT265树莓派无人机

https://blog.csdn.net/sinat_16643223/article/details/108354556?spm=1001.2014.3001.5502

 

 

https://blog.csdn.net/weixin_41869763/article/details/104258058

 

 

 

启动命令(我在B站上专门录了视频  APM T265 树莓派,SSH启动树莓派三个节点视频演示,实现T265的位置信息传给APM_哔哩哔哩_bilibili)

 

树莓派数据线(也是USB转TTL线,插在Pixhawk的telem2口,苍穹四轴有卖,下面这两根线是接在一起的,是一根线)

淘宝网 - 淘!我喜欢

sudo usermod -aG dialout dongdong
posted on 2022-07-20 00:27  MKT-porter  阅读(2182)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3