ROS2飞控自研:编写Gazebo电机控制插件
- 自定义sdf读取信息
- 订阅Topic
- 解除gazebo电机100 rad/s转速限制
- 仿真
ROS2飞控自研:编写Gazebo电机控制插件
在当前主流飞控adrupilot和pixhawk框架统治行业的同时,强化学习为无人机提供了一种更加直接的面向特殊任务的飞行控制方法。相比起无人机的工程应用,更加丰富的无人机控制问题的出现激发了大量的研究需求。而强化学习无疑是解决复杂飞行任务的有力工具。从一个有研究需求的学生的角度出发,这里将给大家介绍一下如果自给自足的构建一个属于自己的无人机强化学习开发环境,后续将公开代码。
@小鱼 鱼哥说的很有道理了
@rzf 这种复杂环境的无人机实时局部规划是一种比较有挑战性的问题,浙大做了很棒的工作如果,进一步地提升了算法性能,降低延迟。但对于地面车辆来说,这个算法的优势(低延迟三维局部轨迹规划)变成了二维的,相比现在比较广泛研究的轮式机器人的主流实时路径规划,本身的优势也不大了。
但前面只是针对这个问题,你的想法我其实非常赞同,无人机系统本身有着比轮式机器人更高的控制需求,就需要尽可能地压榨感知和规划的性能以此减轻控制层的压力,利用UAV的感知规划方面的工作进一步提升轮式机器人本身是非常有希望的。
PX4_SITL_WORLD=自定义的world文件路径 make px4_sitl_rtps gazebo
BodyRate模式,即姿态角速度控制适用于FPV高动态的飞行任务(DJI的FPV摇杆的控制原理就是BodyRate)。
在新的PX4固件版本中,PX4支持利用BodyRate实现Offboard Control帮助大家进行研究,但默认情况下运行PX4_ROS_COM运行Agent(micrortps_agent -t UDP
)并无法得到可以实现BodyRate控制通讯的Topic: fmu/vehicle_attitude_setpoint/in,这就需要我们手动添加新的topic实现与PX4系统的通讯。
具体步骤:
- msg: vehicle_attitude_setpoint
receive: true
其他可选的msg可以在路径:PX4-Autopilot/msg/中查看。
3. 重新编译PX4工作空间make px4_sitl_rtps gazebo
(在这个过程中会自动启动桥接Client)
4. 修改Agent的yaml文件,自动生成Topic发布与订阅代码: 在PX4_ROS_COM的文件路径下(path_to_colcon_ws/src/px4_ros_com/templates/urtps_bridge_topics.yaml)下配置Agent的yaml文件,增加BodyRate控制,在yaml文件的最后一行增加如下内容:
- msg: VehicleAttitudeSetpoint
receive: true
注意,这里对应的msg名称与Client所用的大小写略有不同,可见:px4_msgs
5. 最重要的步骤来了,用PX4_ROS_COM自带的脚本构建新的工作空间:
$ cd ~/px4_ros_com_ros2/src/px4_ros_com/scripts
$ source build_ros2_workspace.bash
另外,scripts文件夹中包含了多种的工具,如果需要构建ROS环境即选用source build_ros1_workspace.bash
6. 重新运行PX4_Gazebo
# ctrl+shift+t 打开新的终端
cd PX4路径
make px4_sitl_rtps gazebo
# ctrl+shift+t 打开新的终端
source ~/px4_ros_com_ros2/install/setup.bash
micrortps_agent -t UDP
可以看到结果如下:
--- MicroRTPS Agent ---
[ micrortps_agent ] Starting link...
[ micrortps_agent ] UDP transport: ip address: 127.0.0.1; recv port: 2020; send port: 2019
[ micrortps_transport ] UDP transport: Trying to connect...
[ micrortps_transport ] UDP transport: Connected to server!
--- Subscribers ---
- DebugArray subscriber started
- DebugKeyValue subscriber started
- DebugValue subscriber started
- DebugVect subscriber started
- OffboardControlMode subscriber started
- OpticalFlow subscriber started
- PositionSetpoint subscriber started
- PositionSetpointTriplet subscriber started
- TelemetryStatus subscriber started
- Timesync subscriber started
- VehicleCommand subscriber started
- VehicleLocalPositionSetpoint subscriber started
- VehicleTrajectoryWaypoint subscriber started
- OnboardComputerStatus subscriber started
- TrajectoryBezier subscriber started
- VehicleTrajectoryBezier subscriber started
- VehicleAttitudeSetpoint subscriber started
- TrajectorySetpoint subscriber started
- VehicleMocapOdometry subscriber started
- VehicleVisualOdometry subscriber started
-----------------------
---- Publishers ----
- Timesync publishers started
- TrajectoryWaypoint publisher started
- VehicleControlMode publisher started
- VehicleOdometry publisher started
- VehicleStatus publisher started
- CollisionConstraints publisher started
- TimesyncStatus publisher started
- SensorCombined publisher started
- VehicleTrajectoryWaypointDesired publisher started
-----------------------
至此VehicleAttitudeSetpoint subscriber 启动成功,测试一下:
ros2 topic list
新的topic已经出现:/fmu/vehicle_attitude_setpoint/in,至此已经成功构建ROS2与PX4的BodyRate模式的控制接口,vehicle_attitude_setpoint.msg具体见msg,控制方法见offboard模式的官方介绍
如何入门无人机系统研究(1):PX4-Gazebo-ROS2基本框架介绍
如何入门无人机系统研究(2):PX4 SITL simulation基本框架介绍
相信很多对无人机相关方向感兴趣或将要从事相关研究的朋友们在真正DIY一个自己的无人机之前,需要对其进行初步的仿真。PX4-Gazebo-ROS2是一个自由度比较高的框架,可以帮助大家实现无人机飞控的二次开发和仿真。
目前,采用ROS1的无人机控制的相关文档与应用在github以及国内社区中有很多的资料,但针对ROS2的中文文档较少,且新版的PX4固件已经全面支持了ROS2的通讯。这里主要为了方便大家使用ROS2进行无人机相关的研究和实验,我结合自己的使用经验编写了这部分的介绍,删繁就简,从自主飞行无人机研究者的角度直接介绍曾经也困扰过自己的核心问题。通过应用方法介绍来帮助大家动手实践将是本文的关键,具体调试中遇到的问题将在后续提出解决方案。
该框架的基本组成部分PX4,Gazebo与ROS2网上不乏相关的资料,遇到的问题除了可以直接在文末提问,还可以查阅PX4关于相关主题的文档PX4-SITL以及PX4-Offboard control。对于大多数朋友来说,上手应用前需要得到解答的核心问题是:PX4-Gazebo-ROS2是如何交互的?如何对PX4进行二次开发?以及如何针对不同的实验需求开发对应的外部无人机控制节点(off-board control)?下面将从这三个核心问题展开本话题的主要内容。相信在掌握这部分的知识后大家对无人机仿真会拥有更加深刻的认识。
A. PX4-Gazebo-ROS2交互方式
PX4考虑了高级控制功能所需的数据交互,通过client将PX4系统中的数据接口暴露出来供大家收集无人机状态信息以及进行外部控制(off-board control)。从官方的图中可以看到,client包含在PX4的系统内,在完成后续的环境配置流程后PX4 SITL时(make px4_sitl_rtps gazebo
)会自动启动client,之后打开一个新的命令行窗口,一行简单的代码就可以部署自己的agent:micrortps_agent -t UDP
。命令行显示如下即agent部署成功。
--- MicroRTPS Agent ---
[ micrortps_agent ] Starting link...
[ micrortps_agent ] UDP transport: ip address: 127.0.0.1; recv port: 2020; send port: 2019
[ micrortps_transport ] UDP transport: Trying to connect...
[ micrortps_transport ] UDP transport: Connected to server!
--- Subscribers ---
- DebugArray subscriber started
- DebugKeyValue subscriber started
- DebugValue subscriber started
- DebugVect subscriber started
- OffboardControlMode subscriber started
- OpticalFlow subscriber started
- PositionSetpoint subscriber started
- PositionSetpointTriplet subscriber started
- TelemetryStatus subscriber started
- Timesync subscriber started
- VehicleCommand subscriber started
- VehicleLocalPositionSetpoint subscriber started
- VehicleTrajectoryWaypoint subscriber started
- OnboardComputerStatus subscriber started
- TrajectoryBezier subscriber started
- VehicleTrajectoryBezier subscriber started
- TrajectorySetpoint subscriber started
- VehicleMocapOdometry subscriber started
- VehicleVisualOdometry subscriber started
-----------------------
---- Publishers ----
- Timesync publishers started
- TrajectoryWaypoint publisher started
- VehicleControlMode publisher started
- VehicleOdometry publisher started
- VehicleStatus publisher started
- CollisionConstraints publisher started
- TimesyncStatus publisher started
- SensorCombined publisher started
- VehicleTrajectoryWaypointDesired publisher started
-----------------------
完成agent启动后,打开一个新的命令行窗口,查看Topic(ros2 topic list -t
)就可以发现下图中的所有内容。
/clock
/fmu/collision_constraints/out
/fmu/debug_array/in
/fmu/debug_key_value/in
/fmu/debug_value/in
/fmu/debug_vect/in
/fmu/offboard_control_mode/in
/fmu/onboard_computer_status/in
/fmu/optical_flow/in
/fmu/position_setpoint/in
/fmu/position_setpoint_triplet/in
/fmu/sensor_combined/out
/fmu/telemetry_status/in
/fmu/timesync/in
/fmu/timesync/out
/fmu/trajectory_bezier/in
/fmu/trajectory_setpoint/in
/fmu/trajectory_waypoint/out
/fmu/vehicle_command/in
/fmu/vehicle_control_mode/out
/fmu/vehicle_local_position_setpoint/in
/fmu/vehicle_mocap_odometry/in
/fmu/vehicle_odometry/out
/fmu/vehicle_status/out
/fmu/vehicle_trajectory_bezier/in
/fmu/vehicle_trajectory_waypoint/in
/fmu/vehicle_trajectory_waypoint_desired/out
/fmu/vehicle_visual_odometry/in
/parameter_events
/performance_metrics
/rosout
/timesync_status
其中topic名称中的in/out,代表了PX4系统是订阅该topic还是发布该topic(/in: 用户publish, PX4 subscribe; /out: PX4 publish, 用户subscribe)。一目了然。此时,对于需要进行无人机相关研究的同学已经完事具备只欠东风了,关于如何借东风(创建ROS2节点订阅与发布topic),鱼哥的课程给出了详细的讲解,欢迎大家查阅鱼香ROS系列课程与社区ROS2板块。
而大家最为关心的问题就变成了如何利用这些Topic开展相关的研究和实验工作。
2. PX4飞控二次开发流程
核心问题:如何解除危险姿态约束?
3. off-board control 案例