mavros使用经验记录二

项目是一个无人机视觉追踪功能,无人机上的协从计算机通过串口连接到飞控的tel2,接收mavlink消息流,协计算机将此mavlink流进行udp转发到地面站,同时协计算机实时的进行图像处理,将追踪的结果也通过mavlink包发送到飞控中。这样的设计可以很好的同地面站协同。

下面是我的mavros启动文件:

<launch>
	<!-- vim: set ft=xml noet : -->
	<!-- example launch script for ArduPilotMega based FCU's -->

	<arg name="fcu_url" default="/dev/ttyUSB0:921600" />
        <arg name="gcs_url" default="udp://:14556@192.168.2.3:14550" />
	<arg name="tgt_system" default="1" />
	<arg name="tgt_component" default="1" />
	<arg name="log_output" default="screen" />

	<include file="$(find mavros)/launch/node.launch">
		<arg name="pluginlists_yaml" value="$(find mavros)/launch/apm_pluginlists.yaml" />
		<arg name="config_yaml" value="$(find mavros)/launch/apm_config.yaml" />

		<arg name="fcu_url" value="$(arg fcu_url)" />
		<arg name="gcs_url" value="$(arg gcs_url)" />
		<arg name="tgt_system" value="$(arg tgt_system)" />
		<arg name="tgt_component" value="$(arg tgt_component)" />
		<arg name="log_output" value="$(arg log_output)" />
	</include>
</launch>

我的地面站电脑的ip是192.168.2.3,upd端口14550

启动后地面站就可以通过udp的方式顺利连接上了。

### 配置和运行 ROS 2 PX4 MAVROS Gazebo 无人机仿真 #### 安装依赖项 为了确保所有组件能够正常工作,建议按照官方文档安装必要的依赖包。对于 Ubuntu 系统而言,可以通过以下命令来更新软件源并安装所需工具链: ```bash sudo apt update && sudo apt install git wget qtcreator clang-format python3-pip -y pip3 install --user pyulog pymavlink dronecan empy toml geographiclib pandas jinja2 numpy ``` #### 获取 PX4 和 MAVROS 源码 下载最新的 PX4 自动驾驶仪固件以及 MAVROS 软件包到本地计算机中。 ```bash cd ~/ git clone https://github.com/PX4/PX4-Autopilot.git -b v1.12.0 cd ~/PX4-Autopilot DONT_RUN=1 make px4_sitl_default gazebo ``` MAVROS 的获取方式取决于所使用ROS 版本,在此假设为 ROS Foxy: ```bash source /opt/ros/foxy/setup.bash mkdir -p ~/ros2_ws/src cd ~/ros2_ws/src vcs import <(wget -qO- https://raw.githubusercontent.com/mavlink/mavros/master/mavros.yaml) cd .. colcon build --symlink-install source install/local_setup.bash ``` #### 启动 SITL (Software In The Loop) 模拟器 启动包含 MAVROS 插件在内的 Gazebo 场景文件,并加载默认的 iris 型号四旋翼机架结构模型。 ```bash export ROS_DOMAIN_ID=30 ign gazebo -r ~/PX4-Autopilot/Tools/simulation/gazebo-classic/models/empty_world/empty.world sleep 5s pxh> commander takeoff ``` 此时应当可以在终端窗口观察到来自于 MAVLink 协议的数据流输出信息[^1]。 #### 编写简单的 Python 控制脚本 编写一段用于发送指令给 MAVROS 设备节点的小型应用程序实例,以便测试基本功能是否正常运作。 ```python import rclpy from geometry_msgs.msg import PoseStamped, TwistStamped from mavros_msgs.srv import CommandBool, SetMode def main(args=None): rclpy.init() node = rclpy.create_node('simple_offboard') arm_client = node.create_client(CommandBool, '/mavros/cmd/arming') set_mode_client = node.create_client(SetMode, '/mavros/set_mode') while not arm_client.wait_for_service(timeout_sec=1.0): pass request = CommandBool.Request(value=True) future = arm_client.call_async(request) rclpy.spin_until_future_complete(node, future) mode_request = SetMode.Request(base_mode=0, custom_mode="OFFBOARD") future = set_mode_client.call_async(mode_request) rclpy.spin_until_future_complete(node, future) if __name__ == '__main__': main() ``` 上述代码片段展示了如何通过调用服务接口向飞行控制器请求切换至离板模式(Offboard Mode),从而接管姿态控制权柄;同时发出武装电机信号使螺旋桨开始旋转准备升空动作[^2]。 #### 故障排除技巧 如果遇到无法成功解锁或起飞的情况,则需重点检查以下几个方面: - 确认已正确设置了环境变量 `ROS_DOMAIN_ID` ,防止多台设备间发生冲突; - 使用 `rostopic list` 或者 `ros2 topic list` 查看当前活跃话题列表,验证各模块之间的连接状况良好无误; - 利用 `mavros_commander.py` 工具辅助诊断潜在问题所在位置,例如查看日志记录、重置参数设定等操作; - 尝试重启整个系统或者单独的服务进程,有时候可以有效解决问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值