无人机定点飞行-介绍

基础知识必备

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

如图片

另一个终端

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

终端

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

定点飞行程序

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

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

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

相关推荐
张张123y5 小时前
后端第一课:输入 URL 后发生了什么?我用手写 Socket 把全链路跑通了
python·websocket·ai·socket·url·后端开发
白帽攻防录7 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
十年Java程序媛7 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
全栈弄潮儿7 小时前
Python实战第7期:字典与集合
后端·python·编程语言
和侧7 小时前
离子注入后为什么必须配套退火工艺?
笔记·学习
2603_965148117 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
凛铄linshuo8 小时前
自动化测试:pytest第一个实例学习
学习·pytest
xixiaoyunya8 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
把我格子衫拿来8 小时前
Dice 很高就够了吗?分割评价中的 IoU、表面距离与 HD95
python·图像分割·模型评估·医学影像·dice
学逆向的8 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全