无人机定点飞行-介绍

基础知识必备

我们先了解ROS的机制,发布者(pub) ──发消息──▶ 话题 /yolo_msg ──收消息──▶ 订阅者(sub),还需要清楚目录的结构

catkin_ws/
└── src/
└── drone_planner/ # 任意命名
├── package.xml
├── CMakeLists.txt
├── msg/
│ └── drone_planner_msg.msg # 自定义消息定义 (需要自己来写)
└── src/
├── pub_msg.cpp # 发布者
└── sub_msg.cpp # 订阅者(新增)

注意roscore,才能启动rosrun,但是roslaunch 本身包含了roscore了,所以这里不需要再roscore了

清楚这个就好办了,那么我们先写一个发布者,如下操作:

发布话题

第一步:先写个程序,新建src下,命名为pub_msg.cpp,把下面程序复制过来。

#include <ros/ros.h>

#include <drone_planner/drone_msg.h>

int main(int argc, char **argv)

{

//ROS节点初始化,节点名pub_cmd_vel

ros::init(argc,argv,"drone_pub");

//创建节点句柄,管理ROS API资源、调用

ros::NodeHandle n;

//创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长10

ros::Publisher drone = n.advertise<drone_planner::drone_msg>("/drone_pub",10);

//设置循环频率,不断publish

ros::Rate loop_rate(10);

while (ros::ok())

{

//初始化geometry_msgs::Twist类型消息

drone_planner::drone_msg abc;

abc.name = "name";

abc.x = 2;

abc.y = 3;

//发布消息

drone.publish(abc);

//ROS_INFO("Publish turtle velocity command%.2f m/s, %.2f rad/s", vel_msg.linear.x, vel_msg.angular.z);

//按照循环频率延时

loop_rate.sleep();

}

return 0;

}

**第二步:**在drone_planner文件夹下有个msg文件夹,创建一个名字叫drone_msg.msg文件(这里任意命名),在这个msg文件中复制如下内容

这是自定义消息的定义文件,每行定义一个字段

string name # 字符串类型的名字

int32 x # 整数 x 坐标

int32 y # 整数 y 坐标

第三步:去找drone_planner文件夹下的Cmake.list这个文件进行修改

为什么这个文件也要进行修改呢?

答:普通包只用 ROS 自带的消息(如 std_msgs),但你的包里有自己的 drone_msg.msg。编译时要先把这个 .msg 变成 C++ 头文件 ,这个步骤必须手动写进 CMakeLists,否则程序里 #include <drone_planner/drone_msg.h> 会找不到文件。

操作:181行,处enter,腾出空间,复制下面这个

复制代码
add_executable(可执行名 src/源文件名.cpp)
target_link_libraries(可执行名 ${catkin_LIBRARIES})

可执行名换做,CPP的文件名字

以及在75行处回车添加下面内容,添加的是msg的

add_message_files(

FILES

drone_msg.msg

)

generate_messages(

DEPENDENCIES

std_msgs

)

第四步:跟我这个图片一致就行

结果来啦,终端进入catkin_ws下,catkin_make下,先是编译,因为自己定义的消息类型需要source devel/setup.bash下,接着开启新终端

如图片

另一个终端

再开一个终端,看下我们发布的话题有哪些

终端

这时候显示了,我们成功发布话题了。

定点飞行程序

定点飞行的核心程序如下:

最终效果如下:飞到指定的点

以上不懂可私信我,培训相应无人机仿真视频

相关推荐
一隅论数智4 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
默_笙4 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
XiHongShi20164 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
qq_426003964 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技4 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
爱吃苹果的日记本4 天前
离散数学第六课
学习·离散数学
伞伞悦读4 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python