XTDrone-多无人机精准降落-配置教程

1 编译AprilTag_ROS

 AprilTag是一个视觉基准系统,可用于机器人,增强现实和相机校准等。 根据AprilTag可以可靠地计算标签相对于相机的3D位置,方向和ID号。这里我们使用AprilTag的ROS库来实现位姿估计与ID号计算。
编译命令如下:
sudo apt install ros-noetic-apriltag  # 根据自己的ROS版本来修改
cp -r ~/XTDrone/sensing/object_detection_and_tracking/apriltag/apriltag_ros/ ~/catkin_ws/src/
cd ~/catkin_ws/
catkin build apriltag_ros #或catkin_make
 编译成功后的结果:会看到apriltag_ros包编译成功。

XTDrone团队已经做好了三个AprilTag并排的模型(如何制作见这里),在~/XTDrone/sitl_config/models/apriltag0-2,下面我们将让三个无人机分别降落到对应ID的AprilTag上。

 2 配置PX4

在之前的任务中,我们没有让PX4 SITL发布过TF,一切坐标系转换都是依靠订阅话题+手工代码转换,由于在精准降落问题中,涉及到地图坐标系(map)、无人机坐标系(base_link)、相机坐标系(camera_link)和AprilTag坐标系(tag)四类坐标系,因此手工代码转换比较繁琐,因此我们借助ROS的TF工具来帮助我们进行转换。由于MAVROS默认不发布TF,且默认定义的坐标系不带namespace,也就是iris_0还是iris_1的机体坐标系都叫base_link,因此我们需要进行修改。
sudo cp ~/XTDrone/sitl_config/launch/px4/*  /opt/ros/noetic/share/mavros/launch/

3 修改EKF2设置

由于需要机体在Gazebo的地图坐标系下的位姿,因此定位需要使用Gazebo真值,此外使用Gazebo真值定位的精度也更高,便于事先精准降落。注意事先要修改EKF2设置,改为视觉定位模式。
所需修改部分的内容如下:
	# GPS used#param set EKF2_AID_MASK 1# Vision used and GPS deniedparam set EKF2_AID_MASK 24# Barometer used for hight measurement#param set EKF2_HGT_MODE 0# Barometer denied and vision used for hight measurementparam set EKF2_HGT_MODE 3

4 启动仿真

4.1 启动三个带有下视相机的iris和带有AprilTag的无人车的仿真文件

roslaunch px4 outdoor2_precision_landing.launch 
 启动后会发现有报错:

或者如下的报错内容:
... logging to /home/ray/.ros/log/632bf21c-2b0a-11ef-ba9c-37ab60347b3f/roslaunch-ray-pc-391024.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.RLException: Invalid <param> tag: Cannot load command parameter [robot_description]: no such command [['/opt/ros/noetic/share/xacro/xacro.py', '/home/ray/catkin_ws/src/catvehicle/urdf/catvehicle1-3.xacro', 'roboname:=ugv_0']].Param xml is <param name="robot_description" command="$(find xacro)/xacro.py '$(find catvehicle)/urdf/catvehicle1-3.xacro' roboname:='ugv_0'"/>
The traceback for the exception was written to the log file
错因分析:问题主要出在xacro命令的路径和参数配置上,官方提供的<param>标签使用的是旧的命令格式,因此运行时会报错。
解决方法:去掉launch文件中<param>标签中xacro.py.py
修改后的outdoor2_precision_landing.launch文件(该文件的目录:
/home/你的主机名/PX4_Firmware/launch)

修改后的完整代码:(可复制粘贴替换)
<launch><!-- MAVROS posix SITL environment launch script --><!-- launches Gazebo environment and 2x: MAVROS, PX4 SITL, and spawns vehicle --><!-- vehicle model and world --><arg name="est" default="ekf2"/><arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/outdoor2.world"/><!-- gazebo configs --><arg name="gui" default="true"/><arg name="debug" default="false"/><arg name="verbose" default="false"/><arg name="paused" default="false"/><!-- Gazebo sim --><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="gui" value="$(arg gui)"/><arg name="world_name" value="$(arg world)"/><arg name="debug" value="$(arg debug)"/><arg name="verbose" value="$(arg verbose)"/><arg name="paused" value="$(arg paused)"/></include><arg name="obstaclestopper" default="false"/><group ns="ugv_0"><param name="robot_description"command="$(find xacro)/xacro '$(find catvehicle)/urdf/catvehicle1-3.xacro' roboname:='ugv_0'" /><include file="$(find catvehicle)/launch/catvehicle.launch"><arg name="robot_name" value="ugv_0"/><arg name="init_pose" value="-x 0 -y 0 -z 0 -R 0 -P 0 -Y 0"/><arg name="config_file" value="catvehicle_control.yaml"/><arg name="obstaclestopper" value="$(arg obstaclestopper)"/></include><!-- Uncomment this to get immediate motion from the car<node name="openLoopCircle" pkg="safeopenloopcircle" type="safeopenloopcircle_node"/>--></group><!-- iris_0 --><group ns="iris_0"><!-- MAVROS and vehicle configs --><arg name="ID" value="0"/><arg name="ID_in_group" value="0"/><arg name="fcu_url" default="udp://:24540@localhost:34580"/><!-- PX4 SITL and vehicle spawn --><include file="$(find px4)/launch/single_vehicle_spawn_xtd.launch"><arg name="x" value="-3"/><arg name="y" value="0"/><arg name="z" value="0"/><arg name="R" value="0"/><arg name="P" value="0"/><arg name="Y" value="0"/><arg name="vehicle" value="iris"/><arg name="sdf" value="iris_downward_camera"/><arg name="mavlink_udp_port" value="18570"/><arg name="mavlink_tcp_port" value="4560"/><arg name="ID" value="$(arg ID)"/><arg name="ID_in_group" value="$(arg ID_in_group)"/></include><!-- MAVROS --><include file="$(find mavros)/launch/px4.launch"><arg name="fcu_url" value="$(arg fcu_url)"/><arg name="gcs_url" value=""/><arg name="tgt_system" value="$(eval 1 + arg('ID'))"/><arg name="tgt_component" value="1"/><arg name="config_yaml" value="$(find mavros)/launch/px4_config_iris_0.yaml"/></include></group><!-- iris_1 --><group ns="iris_1"><!-- MAVROS and vehicle configs --><arg name="ID" value="1"/><arg name="ID_in_group" value="1"/><arg name="fcu_url" default="udp://:24541@localhost:34581"/><!-- PX4 SITL and vehicle spawn --><include file="$(find px4)/launch/single_vehicle_spawn_xtd.launch"><arg name="x" value="-4.5"/><arg name="y" value="0"/><arg name="z" value="0"/><arg name="R" value="0"/><arg name="P" value="0"/><arg name="Y" value="0"/><arg name="vehicle" value="iris"/><arg name="sdf" value="iris_downward_camera"/><arg name="mavlink_udp_port" value="18571"/><arg name="mavlink_tcp_port" value="4561"/><arg name="ID" value="$(arg ID)"/><arg name="ID_in_group" value="$(arg ID_in_group)"/></include><!-- MAVROS --><include file="$(find mavros)/launch/px4.launch"><arg name="fcu_url" value="$(arg fcu_url)"/><arg name="gcs_url" value=""/><arg name="tgt_system" value="$(eval 1 + arg('ID'))"/><arg name="tgt_component" value="1"/><arg name="config_yaml" value="$(find mavros)/launch/px4_config_iris_1.yaml"/></include></group><!-- iris_2 --><group ns="iris_2"><!-- MAVROS and vehicle configs --><arg name="ID" value="2"/><arg name="ID_in_group" value="2"/><arg name="fcu_url" default="udp://:24542@localhost:34582"/><!-- PX4 SITL and vehicle spawn --><include file="$(find px4)/launch/single_vehicle_spawn_xtd.launch"><arg name="x" value="-6"/><arg name="y" value="0"/><arg name="z" value="0"/><arg name="R" value="0"/><arg name="P" value="0"/><arg name="Y" value="0"/><arg name="vehicle" value="iris"/><arg name="sdf" value="iris_downward_camera"/><arg name="mavlink_udp_port" value="18572"/><arg name="mavlink_tcp_port" value="4562"/><arg name="ID" value="$(arg ID)"/><arg name="ID_in_group" value="$(arg ID_in_group)"/></include><!-- MAVROS --><include file="$(find mavros)/launch/px4.launch"><arg name="fcu_url" value="$(arg fcu_url)"/><arg name="gcs_url" value=""/><arg name="tgt_system" value="$(eval 1 + arg('ID'))"/><arg name="tgt_component" value="1"/><arg name="config_yaml" value="$(find mavros)/launch/px4_config_iris_2.yaml"/></include></group><!-- <node pkg="tf" type="static_transform_publisher" name="0_base_link_to_base_link_frd"args="0 0 -0.05 3.1415927 0 0 /base_link_0 /base_link_frd_0 100" /><node pkg="tf" type="static_transform_publisher" name="1_base_link_to_base_link_frd"args="0 0 -0.05 3.1415927 0 0 /base_link_1 /base_link_frd_1 100" /><node pkg="tf" type="static_transform_publisher" name="2_base_link_to_base_link_frd"args="0 0 -0.05 3.1415927 0 0 /base_link_2 /base_link_frd_2 100" /> --></launch>
 若修改后还报错,输入如下命令检查是否安装xacro
which xacro
 若已安装,则会有类似的输出

 若没有,则输入如下命令安装xacro
sudo apt-get install ros-noetic-xacro
修改完成后再次启动仿真环境
roslaunch px4 outdoor2_precision_landing.launch 
 启动后的画面

正常启动后会发现不断报错,这是因为mavros的base_link_frd坐标系找不到base_link,因为我们给base_link加了namespace,不过这个错误不影响使用,不用理会
[ERROR] [1617509823.832162747, 3.666000000]: ODOM: Ex: Could not find a connection between 'iris_0/base_link' and 'base_link_frd' because they are not part of the same tree.Tf has two or more unconnected trees.

4.2 启动多机通信

4.2.1 修改multi_vehicle_communication.sh文件

注意事先修改好multi_vehicle_communication.sh,由于启动了3架iris无人机和1辆rover汽车,所以需要对multi_vehicle_communication.sh文件进行如下修改并保存。

4.2.2  输入如下命令启动多机通信

cd ~/XTDrone/communication
bash multi_vehicle_communication.sh
通信启动成功后会有如下提示:

 4.3 启动获取位资脚本

cd ~/XTDrone/sensing/pose_ground_truth/
python3 get_local_pose.py iris 3

4.4 启动键盘控制

cd ~/XTDrone/control/keyboard
python3 multirotor_keyboard_control.py iris 3 vel

4.5 而后启动apriltag_ros

roslaunch apriltag_ros xtdrone_detection.launch

4.6 用rviz进行可视化

cd ~/XTDrone/sensing/object_detection_and_tracking/apriltag/apriltag_ros/config
rviz -d rviz.rviz

4.7 控制三架无人机到无人车的上方

观察rviz,会发现三个tag和一个tag bundle的坐标系在闪烁,这是因为这四个坐标系由三架飞机的apriltag_ros同时估计,因此只要有一架飞机能看到tag,就能估计其位姿。注意到图像中有飞机的影子,这个影子可能会干扰识别的效果,一个简单的方法是把gazebo中的灯光进行调整,不调整一般也能实现精准降落。

 

4.8  关闭键盘控制,启动多机精准降落脚本

4.8.1 在启动multi_precision_landing.sh脚本之前,先对原脚本进行修改,用python3来启动

 4.8.2 启动多机精准降落脚本

cd ~/XTDrone/control/
bash multi_precision_landing.sh 
 降落效果展示:

 

说明:本次配置使用的是ubuntu20.04

参考: 多无人机精准降落 · 语雀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【windows|008】DNS服务详解

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 ​ &#x1f3c5;阿里云ACE认证高级工程师 ​ &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社…

家用洗地机哪个品牌好用?四款性价比高的洗地机推荐

还在为下班赶回家打扫卫生而烦恼&#xff1f;曾经的我也是这样&#xff0c;日复一日手动清洁&#xff0c;疲惫不堪。直到有一天&#xff0c;我决定相信现代科技&#xff0c;深入研究了市面上的各种洗地机评测&#xff0c;从此踏入了智能清洁家电的新世界。洗地机作为现代家居的…

Google Earth Engine(GEE)——checkbox的使用

结果 函数: ui.Checkbox(label, value, onChange, disabled, style) A checkbox with a label. Arguments: label (String, optional): The checkboxs label. Defaults to an empty string. value (Boolean, optional): Whether the checkbox is checked. A nu

CinemachineFreelook相机鬼畜抖动的解决方法

又是培训机构的出品。。。。。。 2020.3.27 发现跟随时抖动的原因了&#xff0c;其实应该按照传统相机的跟随逻辑放在late update里执行&#xff0c;但是由于开发cinemachine的开发组很坑地把cinemachine freelook里的三个轨道Damping值默认给了3&#xff0c;于是相机会以每0.7…

Aquila-Med LLM:开创性的全流程开源医疗语言模型

​论文链接&#xff1a;https://arxiv.org/pdf/2406.12182 开源链接&#xff1a;https://huggingface.co/BAAI/AquilaMed-RL http://open.flopsera.com/flopsera-open/details/AquilaMed_SFT http://open.flopsera.com/flopsera-open/details/AquilaMed_DPO 近年来&#xf…

Java比较运算符

关系运算符和比较运算符适用于条件判断类型。 相当于布尔值&#xff0c;只有True和False两个 符号 说明ab,判断a的值是否等于b的值&#xff0c;条件成立为true,不成立为false ! a!b,判断a和b的值是否不相等&#xff0c;条件成立为true,不成立为false > …

MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法

目录 一、漏洞简介 漏洞原理 影响版本 二、漏洞复现 三、复现过程 1、扫描局域网内的C段主机&#xff08;主机发现&#xff09; 扫描结果&#xff1a; 2.使用MSF的永恒之蓝漏洞模块 3.对主机进行扫描&#xff0c;查看其是否有永恒之蓝漏洞 4.准备攻击 四、漏洞利用 …

C#健康体检信息管理系统成品源码,医院体检中心管理系统

健康体检信息管理系统覆盖体检中心的所有业务&#xff0c;完成从预约、登记、收费、检查、检验、出报告、分析、报表等所有工作&#xff0c;规范了体检流程&#xff0c;提高了工作效率。 体检系统开发环境&#xff1a; 技术架构&#xff1a;C/S架构 开发语言&#xff1a;C# …

k8s volcano + deepspeed多机训练 + RDMA ROCE+ 用户权限安全方案【建议收藏】

前提&#xff1a;nvidia、cuda、nvidia-fabricmanager等相关的组件已经在宿主机正确安装&#xff0c;如果没有安装可以参考我之前发的文章GPU A800 A100系列NVIDIA环境和PyTorch2.0基础环境配置【建议收藏】_a800多卡运行环境配置-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞8…

leetcode 动态规划(基础版)三角形最小路径和

题目&#xff1a; 题解&#xff1a; 一种可行的方案是从下到上&#xff0c;避免了从上到下的下标特判。走到每一个位置的最小值等于该位置的上两个位置中的最小值加上该位置的值。 int minimumTotal(vector<vector<int>>& triangle) {int dp[205][205]{0};f…

Desoutter智能拧紧中枢Connect过压维修

马头智能拧紧中枢过压维修是马头拧紧设备维护中的重要环节。当出现马头拧紧设备中枢过压现象时&#xff0c;会导致设备性能下降&#xff0c;甚至损坏设备&#xff0c;因此及时对过压中枢进行维修是保障设备正常运转的关键。 Desoutter电动螺丝刀控制器过压的原因可能有很多&am…

Vue60-TodoList案例-全局事件总线

一、全局事件总线的适用场景 虽然全局事件总线使用于任意组件之间的通信&#xff0c;但是没有必要处处用它。 数据在哪里&#xff0c;操作数据的方法就在哪里&#xff01; 二、TodoList案例-全局事件总线 适用于全局总线的场景&#xff1a;Item和App&#xff08;爷孙关系&…

FFmpeg+javacpp+javacv使用

FFmpegjavacppjavacv使用 Bytedeco官网案例1、导入opencv、ffmpeg依赖包2、FFmpeg 数据结构2.1 AVFormatContext 格式化I/O上下文2.1.1 metadata2.1.2 Duration、start、bitrate等其他信息2.1.3 dump信息 Bytedeco GitHub&#xff1a;javacpp Bytedeco官网案例 FFmpeg – [示例…

Qt Object:智能即时聊天室项目

目录 1.项目介绍 2.设计思路 3.Pro文件配置 4.项目演示 5.项目开源 项目介绍 智能即时聊天室系统&#xff08;AIChatProject&#xff09;是一个高效、灵活的即时通讯解决方案。它融合了百度的开源大型语言模型——文心一言&#xff0c;通过API接口实现深度集成。系统专为聊天和…

Ubuntu使用 NVIDIA GPU 和 CUDA 设置 LLM 的训练、微调和推理

0.引言 近年来&#xff0c;人工智能领域取得了令人瞩目的进步&#xff0c;其核心是图形处理单元&#xff08;GPU&#xff09;和并行计算平台的强大组合。 大模型如 GPT、BER能够理解和生成具有前所未有的流畅性和连贯性的类人文本。然而&#xff0c;训练这些模型需要大量的数据…

【SAP ME 42】关于SAP ME自定义开发中NWDS中配置JDK

1、NWDS启动配置JDK -vm C:/Java/jdk1.8.0_361/bin 2、开发组件配置JDK

基于Python+Flask+MySQL+HTML的B站数据可视化分析系统

FlaskMySQLVue 基于PythonFlaskMySQLHTML的B站数据可视化分析系统 项目采用前后端分离技术&#xff0c;项目包含完整的前端HTML&#xff0c;以及Flask构成完整的前后端分离系统 爬虫文件基于selenium&#xff0c;需要配合登录账号 简介 主页 登录页面&#xff0c;用户打开浏…

YIA主题侧边栏如何添加3D旋转标签云?

WordPress站点侧边栏默认的标签云排版很一般&#xff0c;而3D旋转标签云就比较酷炫了。下面boke112百科就以YIA主题为例&#xff0c;跟大家说一说如何将默认的标签云修改成3D旋转标签云&#xff0c;具体步骤如下&#xff1a; 1、点此下载3d标签云文件&#xff08;密码&#xf…

氢氧化铝佐剂,完美替代进口品牌明矾佐剂

氢氧化铝佐剂 氢氧化铝佐剂是使用历史最为悠久的疫苗佐剂&#xff0c;已有近百年历史&#xff0c;广泛用于各种人用疫苗和兽用疫苗。氢氧化铝佐剂能够极大地促进体液免疫&#xff08;抗体&#xff09;反应和TH2类细胞免疫反应。 用途 1、免疫各种实验动物制备多克隆或单克隆抗…

数据挖掘与分析——特征选择

数据读取 wine葡萄酒数据集是来自UCI的公开数据集&#xff0c;也scikit-learn库自带的数据集&#xff0c;它是对意大利同一地区种植的葡萄酒进行化学分析的结果&#xff0c;这些葡萄酒来自三个不同的品种。该分析确定了三种葡萄酒中每种葡萄酒中含有的13种成分的数量。 每行代…