当前位置: 首页 > news >正文

第一次通过通讯节点连接实现无人机仿真模拟(ROS1 + C++ + PX4)

通过与chatGPT之间的交互,让其辅助我进行代码编写

+-------------------+
| C++ 控制节点 |
| (自主起飞/降落) |
+---------+---------+
|
ROS Topic
|
+------v------+
| MAVROS |
+------ +-----+
|
MAVLink
|
+------v------+
| PX4 |
| 飞控 SITL |
+------+------+
|
仿真物理接口
|
+------v------+
| Gazebo |
| 无人机模型 |
+-------------+

任务顺序:

  • PX4 仿真启动
  • Gazebo 中生成无人机
  • ROS 与 PX4 通信
  • 查看无人机状态
  • C++ 发布控制指令
  • 自动解锁
  • 自动起飞
  • 定点悬停
  • 自动降落

一、环境配置

使用vmware虚拟机进行操作,系统为ubuntu20.04版本,确保 VMware 能顺利运行 PX4 + Gazebo + ROS,检查 MAVROS 通信是否稳定,创建新的工作空间来存放新的包

二、ROS与MAVROS通信

(1)启动PX4 SITL

cd ~/PX4-Autopilot
make px4_sitl gazebo

(2) 启动MAVROS

source /opt/ros/noetic/setup.bash

roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"

正常情况下你会看到:

类似:

FCU: connected

这表示:

ROS 已经成功接管 PX4

rostopic echo /mavros/state

如果成功,你会看到类似:

connected: True armed: False guided: True mode: "AUTO.LOITER"

三、编写节点通信代码

cd ~/catkin_ws/src

catkin_create_pkg offboard_pkg roscpp std_msgs geometry_msgs mavros_msgs

打开vscode,在offboard_pkg包下的src文件夹创建offboard_node.cpp

#include <ros/ros.h> #include <geometry_msgs/PoseStamped.h> #include <mavros_msgs/State.h> #include <mavros_msgs/CommandBool.h> #include <mavros_msgs/SetMode.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, "offboard_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::Rate rate(20.0); 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; for(int i = 100; ros::ok() && i > 0; --i) { local_pos_pub.publish(pose); ros::spinOnce(); rate.sleep(); } mavros_msgs::SetMode offb_set_mode; offb_set_mode.request.custom_mode = "OFFBOARD"; mavros_msgs::CommandBool arm_cmd; arm_cmd.request.value = true; ros::Time last_request = ros::Time::now(); while(ros::ok()) { if(current_state.mode != "OFFBOARD" && (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("OFFBOARD 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; }

顺便修改Cmakelist.txt文件

add_executable(offboard_node src/offboard_node.cpp)

target_link_libraries(offboard_node
${catkin_LIBRARIES}
)

ctrl+s保存,catkin_make进行编译

四、运行

cd ~/PX4-Autopilot
make px4_sitl gazebo

roslaunch mavros px4.launch \
fcu_url:="udp://:14540@127.0.0.1:14557"

source ~/catkin_ws/devel/setup.bash

rosrun offboard_pkg offboard_node

你会看到:

OFFBOARD enabled Vehicle armed

然后:

无人机自动起飞到2米

个人学习总结,内容含AI生成,仅供参考

http://www.zskr.cn/news/1356317.html

相关文章:

  • python运行提速方案全解
  • 观察使用Taotoken聚合调用在不同时段模型响应的延迟表现
  • 面向银发消费品的客服系统如何做方言适配?从普通话到各地方言的语音识别方案
  • 如何打造移动工作站:3步实现操作系统随身携带
  • 深度解析ANTs图像配准架构设计:医学影像标准化核心技术实现
  • 基于Go+Wails的智能网络资源嗅探与下载工具:实现全平台自动化资源捕获
  • 如何用Akagi麻将AI助手提升你的麻将水平:从新手到高手的完整指南
  • 3个理由让你爱上VR-Reversal:在普通电脑上自由探索VR世界
  • IDM永久激活指南:免费解锁下载神器,告别30天试用限制
  • 2026年企业账号矩阵第一步:适配性诊断+资源盘点
  • 终极解决方案:Uncle小说阅读器如何通过智能解析引擎重塑数字阅读体验
  • 静华轩隔音窗:静安美匠心出品,全国静音实力派 - 维小达科技
  • 2026年成都本地中央空调安装,哪家性价比高值得一探究竟!
  • Apache Camel实战指南:从企业集成到微服务架构的完美演进
  • Claude API文档编写必须绕开的5个合规雷区:GDPR、HIPAA与LLM输出责任归属深度解析
  • VideoFusion:一站式视频处理神器,让复杂变简单的完整指南
  • 大学生如何学习AI智能体?从零基础到OPC一人公司
  • 2026年洛阳汽车脚垫店铺推荐:5家正规门店深度测评,首选鑫奥龙工厂店 - 速递信息
  • 基于 Excel 展示 MLP 神经网络的计算过程
  • 长春钢结构厂家实测评测:从材质到售后的全维度对比 - 奔跑123
  • ComfyUI-FramePackWrapper:8GB显存也能生成高清视频的终极指南
  • 小微商户如何科学进货?销量预测方法与库存积压问题系统解析
  • PyTorch 动态量化(Dynamic Quantization)
  • 架构设计方法(5)属性驱动架构设计ADD方法
  • 2026年上海优创智家推荐,专业公司推荐榜TOP1 - 速递信息
  • 三分钟掌握Translumo:Windows平台终极实时屏幕翻译指南
  • 网络资源下载神器:res-downloader全方位使用指南
  • 5步快速上手Ryujinx:免费在电脑畅玩Switch游戏的终极指南
  • 对话中断率超38%?紧急预警:当前92%的AI客服Agent正因缺乏实时情绪感知层而持续流失高价值客户
  • 为什么你的WHERE条件总被Claude重写?解析其基于统计直方图的谓词推导算法(含PostgreSQL/MySQL双平台验证数据)