无人机定点飞行-介绍

基础知识必备

我们先了解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下,接着开启新终端

如图片

另一个终端

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

终端

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

定点飞行程序

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

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

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

相关推荐
浔溺1 小时前
al+大数据每日学习笔记33
大数据·笔记·学习
stillstream_ink1 小时前
OpenCart UI 自动化测试实战:POM 四层架构 + 失败自动截图 + 飞书通知
python·测试
databook1 小时前
Beta 分布:如何用“成功”和“失败”来预测下次尝试
python·数据挖掘·数据分析
西西弗Sisyphus1 小时前
Qt 分类导航区的实现
开发语言·qt
zhanghaha13141 小时前
Python进阶教程:27_subprocess 模块 零基础超详细教程
开发语言·python
兄弟加油,别颓废了。1 小时前
bugku题目
开发语言·前端·python
新网企兴1 小时前
2026西安GEO推广选哪家?新网企兴帮您精准获客
人工智能·python
zh_xuan1 小时前
c++ string_view
开发语言·c++
阿里嘎多学长1 小时前
2026-09-05 GitHub 热点项目精选
开发语言·程序员·github·代码托管