带你玩转PX4无人机仿真(3) —— 运行官方案例(RC版)

这篇具有很好参考价值的文章主要介绍了带你玩转PX4无人机仿真(3) —— 运行官方案例(RC版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言: 本次教程是官方提供的 MAVROS Offboard (板外) 控制示例,但加上了外部遥控器(RC)控制(如果想要在真机上实现,还要修改代码)

注:搭建仿真环境可以看下面教程 👇

(最新)ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍及环境建议

(最新)ubuntu搭建PX4无人机仿真环境(2) —— MAVROS安装

(最新)ubuntu搭建PX4无人机仿真环境(3) —— ubuntu安装QGC地面站

(最新)ubuntu搭建PX4无人机仿真环境(4) —— 仿真环境搭建

ubuntu安装ROS melodic(最新、超详细图文教程)

前期回顾

带你玩转PX4无人机仿真(1) —— 运行官方案例(C++)

带你玩转PX4无人机仿真(2) —— 定点飞行

一. 设置遥控器

带你玩转PX4无人机仿真(3) —— 运行官方案例(RC版),无人机,ubuntu,github,c++,人工智能,物联网,自动驾驶
(富斯i6s 航模遥控器)

仿真电脑和遥控器通过Micro USB数据线 (也就是老版安卓手机的充电线) 连接
带你玩转PX4无人机仿真(3) —— 运行官方案例(RC版),无人机,ubuntu,github,c++,人工智能,物联网,自动驾驶
(仿真电脑与遥控器连接图)

当在仿真时,打开QGC,在设置中可以看到多了一个 游戏手柄 的界面,如下图所示
带你玩转PX4无人机仿真(3) —— 运行官方案例(RC版),无人机,ubuntu,github,c++,人工智能,物联网,自动驾驶
点击按钮分配并拨动遥控器上的拨杆,就可以看到所对应的通道,然后为拨杆配置功能。(我的配置如下,仅供参考)
带你玩转PX4无人机仿真(3) —— 运行官方案例(RC版),无人机,ubuntu,github,c++,人工智能,物联网,自动驾驶

二. 仿真代码

我们继续使用 带你玩转PX4无人机仿真(1) 中的功能包,在 off_node 功能包下的 src 目录下新建一个 offb_node_rc.cpp 文件

cd ~/catkin_ws/src/off_node/src/
touch offb_node_rc.cpp   // 创建文件
gedit offb_node_rc.cpp   // 打开文件

打开文件,将代码粘贴上去

#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/State.h>
#define GREEN "\033[0;1;32m"

using namespace std;

mavros_msgs::State current_state;
void state_cb(const mavros_msgs::State::ConstPtr& msg){
    current_state = *msg;
    ROS_INFO("current mode: %s",current_state.mode.c_str());
    ROS_INFO("system_status: %d",current_state.system_status);
}

geometry_msgs::PoseStamped aim_pos;
geometry_msgs::PoseStamped curr_pos;
void arrive_pos(const geometry_msgs::PoseStamped::ConstPtr& msg){
    curr_pos = *msg;
    cout <<GREEN <<"distance: "<<fabs((*msg).pose.position.z - aim_pos.pose.position.z) <<endl;  // 打印与目标点的差距
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "off_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");

    ros::Subscriber local_pos_sub = nh.subscribe<geometry_msgs::PoseStamped>
            ("mavros/local_position/pose",10,arrive_pos);

    //the setpoint publishing rate MUST be faster than 2Hz
    ros::Rate rate(10.0);  // 10Hz 100ms

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

    ROS_INFO("vehicle connected!");

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

    //send a few setpoints before starting
    for(int i = 100; ros::ok() && i > 0; --i){
        local_pos_pub.publish(aim_pos);
        ros::spinOnce();
        rate.sleep();
    }

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

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

    int count = 0;  // 计时

    while(ros::ok()){
        if( current_state.mode == "OFFBOARD"){
            if( !current_state.armed){
                if( arming_client.call(arm_cmd) &&arm_cmd.response.success){
                    ROS_INFO("Vehicle armed");
                }
            }
        }
        if(current_state.mode == "OFFBOARD" && fabs(curr_pos.pose.position.z - aim_pos.pose.position.z) <= 0.3){
            count++;
            cout <<GREEN << "count: "<< count<< endl;
            if(count > 150) // 15s
            {
                mavros_msgs::SetMode land_set_mode;
                land_set_mode.request.custom_mode = "AUTO.LAND";  // 发送降落命令
                if(set_mode_client.call(land_set_mode) && land_set_mode.response.mode_sent){
                    ROS_INFO("land enabled");
                }
                //任务结束,关闭该节点
                ros::shutdown();
            }  
        }
        if(current_state.mode != "OFFBOARD"){
            ROS_INFO("switch to Offboard");
        }

        local_pos_pub.publish(aim_pos);

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

    return 0;
}

将下面内容添加到 off_node 功能包下的 CMakeLists.txt 文件里

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

三. 编译运行

运行下面命令,编译代码

cd ~/catkin_ws
catkin_make # 使用catkin build话,则为 catkin build

创建一个启动脚本 offb_rc.sh

#!/bin/bash
source ~/.bashrc
gnome-terminal --window -e 'bash -c "roscore; exec bash"' \
--tab -e 'bash -c "sleep 5; roslaunch px4 mavros_posix_sitl.launch; exec bash"' \
--tab -e 'bash -c "sleep 10; rosrun off_node offb_node_rc; exec bash"' \

运行

chmod +x offb_rc.sh   
./offb_rc.sh

运行效果如下:👇

PX4无人机仿真——官方案例 (RC版)

参考

MAVROS Offboard 控制示例 (C++) | PX4 自动驾驶用户指南

Prometheus仿真入门 — 仿真中的遥控器使用说明

如有其他问题,或者发现文章有错误,请在评论区留言
Keep learning!文章来源地址https://www.toymoban.com/news/detail-826075.html

到了这里,关于带你玩转PX4无人机仿真(3) —— 运行官方案例(RC版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【PX4仿真】使用PX4+Gazebo+MAVROS+ROS进行无人机仿真中提高IMU消息频率的方法

    在无人机仿真中,IMU(惯性测量单元)消息频率对于路径规划和感知的仿真至关重要。然而,在使用PX4+Gazebo+MAVROS+ROS进行仿真时,可能会遇到频率受限的情况。本文将介绍如何提高IMU消息频率。 通过以下命令可以查看到IMU消息的发布频率 通常情况下固定在50Hz。 然而,通过

    2024年04月14日
    浏览(78)
  • ROS-基于PX4的无人机SLAM建图(Cartographer)仿真

    ROS-基于PX4的无人机SLAM建图(Cartographer)仿真

    首先在电脑上安装好Ubuntu系统和ROS系统,我安装的是Ubuntu18.04和ROS Melodic,不同的Ubuntu版本对应不同的ROS版本 ROS发布日期 ROS版本 停止支持日期 对应Ubuntu版本 2018年5月23日 ROS Melodic Morenia 2023年5月 Ubuntu 18.04 2016年5月23日 ROS Kinetic Kame 2021年4月 Ubuntu 16.04 (Xenial) Ubuntu 15.10 (Wily) 201

    2024年02月15日
    浏览(33)
  • (最新)ubuntu搭建PX4无人机仿真环境(2) —— MAVROS安装

    (最新)ubuntu搭建PX4无人机仿真环境(2) —— MAVROS安装

    MAVROS是一个ROS(Robot Operating System)软件包 , 有了它就可以让ROS与飞控通信。这次安装是以ubuntu 18.04 (ROS Melodic)为例,也适用于其他版本 。安装之前确保 ROS 安装成功,没安装的可以看我仿真系列教程。 (注:安装方式有二进制安装和源码安装两种方式,源码安装需要从Git

    2024年02月09日
    浏览(48)
  • (最新)ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍及环境建议

    搭建PX4仿真环境一个有挑战性的过程,如果没有一个有经验的人来带的话会走很多弯路。我在搭建PX4仿真环境的时候,不知道Linux、ROS、git,语言也只会一个C语言,没有任何无人机基础,纯小白一个,靠着自学与网上的各种教程,花了一两个月才搭好基本的仿真环境框架。我

    2024年02月08日
    浏览(39)
  • px4+gazebo无人机仿真,定点起飞,y=x²轨迹飞行

    px4+gazebo无人机仿真,定点起飞,y=x²轨迹飞行

    目录 一、创建工作空间 1.创建工作空间 catkin_ws 2.编译工作空间 catkin_make 二、offboard位置控制定点起飞 1.准备工作 2.启动 三、offboard位置控制y=x²轨迹飞行 参考ROS学习--第3篇:ROS基础---创建工作空间 打开终端,创建src文件夹: 进入src文件夹: 初始化文件夹: 进入catkin_ws文件

    2024年02月05日
    浏览(41)
  • PX4+gazebo仿真中给无人机添加相机,以及改变相机的位姿

    PX4+gazebo仿真中给无人机添加相机,以及改变相机的位姿

    找到你的需要运行的lauch文件,例如mavros_posix_sitl.lauch,编辑(最好先备份一份)。  修改sdf部分(也就是添加一个传感器给无人机),传感器模块路径,选择一个相机(本文选择的是iris_depth_camera):  根据选择的相机修改launch文件,如下: 保存后运行roslauch  mavros_posix_sitl.la

    2024年04月11日
    浏览(39)
  • ubuntu搭建PX4无人机仿真环境(3) —— ubuntu安装QGC地面站

    ubuntu搭建PX4无人机仿真环境(3) —— ubuntu安装QGC地面站

    前言 QGC ( QGroundControl) 是一个开源地面站,基于QT开发的,有跨平台的功能。这次安装是基于Ubuntu 18.04,QGC v4.2.6 但也适用于其他ubuntu发行版,QGC 版本也可以自行选择,如果发现不行可以降版本。 搭建仿真环境系列教程 👇 ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍 ubuntu搭

    2024年02月16日
    浏览(11)
  • (最新)ubuntu搭建PX4无人机仿真环境(3) —— ubuntu安装QGC地面站

    (最新)ubuntu搭建PX4无人机仿真环境(3) —— ubuntu安装QGC地面站

    前言 QGC ( QGroundControl) 是一个开源地面站,基于QT开发的,有跨平台的功能。这次安装是基于Ubuntu 18.04,QGC v4.2.6 但也适用于其他ubuntu发行版,QGC 版本也可以自行选择,如果发现不行可以降版本。 搭建仿真环境系列教程 👇 ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍 ubuntu搭

    2024年02月09日
    浏览(12)
  • Ubuntu18.04搭配无人机仿真环境(ROS,PX4,gazebo,Mavros,QGC安装教程)

    Ubuntu18.04搭配无人机仿真环境(ROS,PX4,gazebo,Mavros,QGC安装教程)

    我个人使用了代理环境进行下载。Linux没有代理的可以使用国内源。 清华大学源 sudo sh -c ‘. /etc/lsb-release echo “deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main” /etc/apt/sources.list.d/ros-latest.list’ 中科大源 sudo sh -c ‘. /etc/lsb-release echo “deb http://mirrors.ustc.edu.cn/ros/ubu

    2024年02月13日
    浏览(115)
  • PX4无人机调参

    PX4无人机调参

    PX4 1.13.2 日志分析软件:flight review https://logs.px4.io/ 产生震动的原因: 1,桨叶损坏、动平衡差 2,电机桨座不垂直,电机动平衡差 3,机架刚性不足 4,部件松动 降低震动的方法: 软件滤波:调低通滤波或者陷波滤波器参数 硬件减震:调减震球的软度或者加配重 调参时可以用

    2024年02月15日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包