forked from chiyu1468/AirTrapMine
mavlink to gazebo devtest 02
This commit is contained in:
@@ -94,23 +94,23 @@ class MAVLinkWorker(QThread):
|
|||||||
|
|
||||||
def arm(self, namespace, arm):
|
def arm(self, namespace, arm):
|
||||||
sysid = int(namespace[-1])
|
sysid = int(namespace[-1])
|
||||||
self.connection.mav.command_long_send(
|
|
||||||
sysid,
|
|
||||||
1, # Component ID
|
|
||||||
mavutil.mavlink.MAV_CMD_COMPONENT_ARM_DISARM,
|
|
||||||
0, # Confirmation
|
|
||||||
1 if arm else 0,
|
|
||||||
0, 0, 0, 0, 0, 0
|
|
||||||
)
|
|
||||||
# self.connection.mav.command_long_send(
|
# self.connection.mav.command_long_send(
|
||||||
# sysid,
|
# sysid,
|
||||||
# 1, # Component ID
|
# 1, # Component ID
|
||||||
# mavutil.mavlink.MAV_CMD_SET_MESSAGE_INTERVAL,
|
# mavutil.mavlink.MAV_CMD_COMPONENT_ARM_DISARM,
|
||||||
# 0,
|
# 0, # Confirmation
|
||||||
# 33,
|
# 1 if arm else 0,
|
||||||
# -1,
|
# 0, 0, 0, 0, 0, 0
|
||||||
# 0, 0, 0, 0, 0
|
|
||||||
# )
|
# )
|
||||||
|
self.connection.mav.command_long_send(
|
||||||
|
sysid,
|
||||||
|
1, # Component ID
|
||||||
|
mavutil.mavlink.MAV_CMD_SET_MESSAGE_INTERVAL,
|
||||||
|
0,
|
||||||
|
33,
|
||||||
|
1000000,
|
||||||
|
0, 0, 0, 0, 0
|
||||||
|
)
|
||||||
|
|
||||||
def takeoff(self, namespace, altitude):
|
def takeoff(self, namespace, altitude):
|
||||||
sysid = int(namespace[-1])
|
sysid = int(namespace[-1])
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ setup(
|
|||||||
entry_points={
|
entry_points={
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
'showmavsimple = unitdev02.test01:mavlink_analyzer_simple',
|
'showmavsimple = unitdev02.test01:mavlink_analyzer_simple',
|
||||||
'fdm_switch_one = unitdev02.test01:fdm_swicth_example_one',
|
'fdm_switch_one = unitdev02.test01:fdm_switch_example_one',
|
||||||
|
'fdm_switch_two = unitdev02.test01:fdm_switch_example_two',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ import time
|
|||||||
import socket
|
import socket
|
||||||
import struct
|
import struct
|
||||||
|
|
||||||
|
# used at fdm_switch_example_two
|
||||||
|
import threading
|
||||||
|
import queue
|
||||||
|
|
||||||
def mavlink_analyzer_simple(count = 500):
|
def mavlink_analyzer_simple(count = 500):
|
||||||
# rclpy.init()
|
# rclpy.init()
|
||||||
# node = rclpy.create_node('mavlink_analyzer_simple')
|
# node = rclpy.create_node('mavlink_analyzer_simple')
|
||||||
@@ -32,6 +36,7 @@ def mavlink_analyzer_simple(count = 500):
|
|||||||
|
|
||||||
if msg.get_type() == 'SERVO_OUTPUT_RAW':
|
if msg.get_type() == 'SERVO_OUTPUT_RAW':
|
||||||
print(msg)
|
print(msg)
|
||||||
|
pass
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print('No message yet, 1 second for data to fill')
|
print('No message yet, 1 second for data to fill')
|
||||||
@@ -113,34 +118,73 @@ def fdm_switch_example_two():
|
|||||||
'''
|
'''
|
||||||
這個範例在 SITL 與 Gazebo 之間 做一個簡單的UDP轉發器
|
這個範例在 SITL 與 Gazebo 之間 做一個簡單的UDP轉發器
|
||||||
有轉換數據格式
|
有轉換數據格式
|
||||||
|
|
||||||
|
time_usec
|
||||||
|
servo1_raw
|
||||||
|
servo16_raw
|
||||||
'''
|
'''
|
||||||
# read info from SITL via MAVLink
|
# read info from SITL via MAVLink
|
||||||
connection_string="udp:127.0.0.1:14550"
|
connection_string="udp:127.0.0.1:14550" # uart mavlink # MATLAB
|
||||||
connection = mavutil.mavlink_connection(connection_string)
|
connection = mavutil.mavlink_connection(connection_string)
|
||||||
|
|
||||||
# set a target link pass JSON to Gazebo, as a client
|
# set a target link pass JSON to Gazebo, as a client
|
||||||
sock_g2s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
sock_g2s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
server_address = ('127.0.0.1', 19002)
|
server_address = ('127.0.0.1', 19002)
|
||||||
|
|
||||||
|
data_queue = queue.Queue()
|
||||||
|
servo_out = [0] * 16
|
||||||
|
data_queue.put(servo_out)
|
||||||
|
|
||||||
|
def send_data_from_queue(sock, server_address, q, frame_rate_fdm=10, frame_count_fdm=1):
|
||||||
|
interval = 1.0 / frame_rate_fdm
|
||||||
|
while True:
|
||||||
|
start_time = time.time()
|
||||||
|
try:
|
||||||
|
data = q.get(timeout=0.1)
|
||||||
|
if data is None:
|
||||||
|
break
|
||||||
|
last_data = data
|
||||||
|
except queue.Empty:
|
||||||
|
data = last_data
|
||||||
|
data = struct.pack('HHI16H', 0x481a, frame_rate_fdm, frame_count_fdm, *servo_out)
|
||||||
|
sock.sendto(data, server_address)
|
||||||
|
frame_count_fdm += 1
|
||||||
|
fdm_parser_example(data) # debug
|
||||||
|
|
||||||
|
elapsed_time = time.time() - start_time
|
||||||
|
sleep_time = interval - elapsed_time
|
||||||
|
if sleep_time > 0:
|
||||||
|
sleep(sleep_time)
|
||||||
|
|
||||||
|
Running = True
|
||||||
|
thread = threading.Thread(target=send_data_from_queue, args=(sock_g2s, server_address, data_queue))
|
||||||
|
thread.start()
|
||||||
|
|
||||||
|
while Running:
|
||||||
|
msgb1 = None
|
||||||
|
msg = connection.recv_msg()
|
||||||
|
while msg :
|
||||||
|
if msg.get_type() == 'SERVO_OUTPUT_RAW':
|
||||||
|
msgb1 = msg
|
||||||
|
# break # 這裡不需要break,因為我要最後一個 servo_output_raw 的值
|
||||||
|
msg = connection.recv_msg()
|
||||||
|
|
||||||
|
if msgb1:
|
||||||
|
for i in range(16):
|
||||||
|
servo_out[i] = getattr(msgb1, f'servo{i+1}_raw')
|
||||||
|
data_queue.put(servo_out)
|
||||||
|
msgb1 = None
|
||||||
|
# Running = False # debug
|
||||||
|
else:
|
||||||
|
# print('No message yet, 10 ms for data to fill')
|
||||||
|
sleep(0.01)
|
||||||
|
|
||||||
|
# Example of putting data into the queue
|
||||||
|
# data_queue.put(data)
|
||||||
|
# To stop the thread, you can put None into the queue
|
||||||
|
# data_queue.put(None)
|
||||||
|
|
||||||
|
|
||||||
print('Start')
|
print('Start')
|
||||||
mavlink_analyzer_simple()
|
# fdm_switch_example_two()
|
||||||
|
# fdm_parser_example()
|
||||||
# connection_string="udp:127.0.0.1:14550"
|
|
||||||
# connection = mavutil.mavlink_connection(connection_string)
|
|
||||||
|
|
||||||
# connection.mav.command_long_send(
|
|
||||||
# 1,
|
|
||||||
# 1,
|
|
||||||
# mavutil.mavlink.MAV_CMD_SET_MESSAGE_INTERVAL,
|
|
||||||
# 0, 33, 1000000, 0, 0, 0, 0, 0
|
|
||||||
# )
|
|
||||||
|
|
||||||
# connection.mav.command_long_send(
|
|
||||||
# 1,
|
|
||||||
# 1, # Component ID
|
|
||||||
# mavutil.mavlink.MAV_CMD_COMPONENT_ARM_DISARM,
|
|
||||||
# 0, # Confirmation
|
|
||||||
# 1, # 0: disarm, 1: arm
|
|
||||||
# 0, 0, 0, 0, 0, 0
|
|
||||||
# )
|
|
||||||
Reference in New Issue
Block a user