|
发表于 2024-4-25 12:15:50
1521 浏览 6 回复
ros2启动固定翼
请问哪位大佬能用ros2的话题让固定翼起飞吗 类似于官方给的四旋翼的offboard模式 应该发布什么话题 怎么给命令呢
尘埃1未定已获得悬赏 4 阿木币最佳答案
你可以通过设置飞行模式为AUTO.TAKEOFF并发布到/mavros/cmd/takeoff话题,同时指定起飞高度和位置。对于进一步的飞行控制,可以使用/mavros/setpoint_velocity/cmd_vel话题来调整速度和方向。 ...
|
扫一扫浏览分享
|
|
|
|
|
|
|
楼主|
发表于 2024-4-25 19:09:10
|
|
|
|
|
|
|
你可以通过设置飞行模式为AUTO.TAKEOFF并发布到/mavros/cmd/takeoff话题,同时指定起飞高度和位置。对于进一步的飞行控制,可以使用/mavros/setpoint_velocity/cmd_vel话题来调整速度和方向。 |
|
|
|
|
|
|
|
举个例(假设使用的是ROS2和PX4)
- import rclpy
- from rclpy.node import Node
- from mavros_msgs.srv import SetMode
- from mavros_msgs.msg import CommandBool, State
- class FixedWingController(Node):
- def __init__(self):
- super().__init__('fixed_wing_controller')
- self.set_mode_client = self.create_client(SetMode, '/mavros/set_mode')
- while not self.set_mode_client.wait_for_service(timeout_sec=1.0):
- self.get_logger().info('service not available, waiting again...')
- self.state_subscriber = self.create_subscription(State, '/mavros/state', self.state_callback, 10)
- def set_auto_takeoff(self):
- req = SetMode.Request()
- req.custom_mode = 'AUTO.TAKEOFF'
- self.set_mode_client.call_async(req)
- def state_callback(self, msg):
- self.get_logger().info(f"Current State: {msg.mode}")
- # 初始化ROS 2节点
- rclpy.init(args=None)
- node = FixedWingController()
- node.set_auto_takeoff()
- rclpy.spin(node)
- node.destroy_node()
- rclpy.shutdown()
复制代码 |
|
|
|
|
|
|
|
楼主|
发表于 2024-4-26 17:48:15
很感谢您的回复,但是在ros2中的话题和它是不一样的 ,没有直接就takeoff就能起飞的代码操作
,比如我试了发布vehiclecommand的指令让他起飞 还是无济于事,您确定ros2也能这么简单吗 |
|
|
|
|
|
|
|
用VehicleCommand消息来控制,参考下面这个示例看看呢 |
|
|
|
|
|
|
|
- from px4_msgs.msg import VehicleCommand
- import rclpy
- from rclpy.node import Node
- class UAVCommander(Node):
- def __init__(self):
- super().__init__('uav_commander')
- self.publisher_ = self.create_publisher(VehicleCommand, '/fmu/vehicle_command/out', 10)
- takeoff_command = VehicleCommand()
- takeoff_command.command = VehicleCommand.VEHICLE_CMD_NAV_TAKEOFF
- # 设置其他必要参数
- self.publisher_.publish(takeoff_command)
- def main(args=None):
- rclpy.init(args=args)
- uav_commander = UAVCommander()
- rclpy.spin(uav_commander)
- uav_commander.destroy_node()
- rclpy.shutdown()
- if __name__ == '__main__':
- main()
复制代码 |
|
|
|
|
|
|
|