usvcontrol/USVAirsim/main.py

152 lines
5.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PythonClient/car/hello_car.py
import math
import threading
import airsim
import time
from udpCommunication import Udp
class Main:
def __init__(self):
self.udp = Udp()
# 连接到Airsim仿真器
self.client = airsim.CarClient()
self.client.confirmConnection() # 每1秒检查一次连接状态并在控制台中报告以便用户可以查看连接的进度实际操作只显示一次奇怪
# Connected!
# Client Ver:1 (Min Req: 1), Server Ver:1 (Min Req: 1)
self.client.enableApiControl(True) # 默认是false有的车辆不允许用API控制所以用isApiControlEnabled可以查看是否可以用API控制
# 仿真器左上角会显示ControlMode: API
def run(self):
print(self.udp.command)
states = self.client.getCarState()
car_state = states.__dict__['kinematics_estimated'].__dict__
yaw = car_state['orientation'].__dict__['z_val']
if yaw< 0:
yaw += 2
yaw *= math.pi
states = [car_state['position'].__dict__['x_val'], car_state['position'].__dict__['y_val'],
car_state['position'].__dict__['z_val'],
car_state['orientation'].__dict__['x_val'], car_state['orientation'].__dict__['y_val'],
yaw,
car_state['linear_velocity'].__dict__['x_val'], car_state['linear_velocity'].__dict__['y_val'],
car_state['linear_velocity'].__dict__['z_val'], car_state['angular_velocity'].__dict__['x_val'],
car_state['angular_velocity'].__dict__['y_val'], car_state['angular_velocity'].__dict__['z_val'],
car_state['linear_acceleration'].__dict__['x_val'],
car_state['linear_acceleration'].__dict__['y_val'],
car_state['linear_acceleration'].__dict__['z_val']]
self.udp.states = states
car_controls = airsim.CarControls() # 获得车辆控制数据
car_controls.is_manual_gear = False
car_controls.steering = self.udp.command[0] / 1000
if self.udp.command[1] < 0:
car_controls.is_manual_gear = True
car_controls.manual_gear = -1
car_controls.throttle = self.udp.command[1] / 1000
self.client.setCarControls(car_controls)
Udp.send(self.udp)
timer_10 = threading.Timer(0.01, self.run)
timer_10.start()
def control(self):
while True:
Udp.receive(self.udp)
if __name__ == "__main__":
main = Main()
main.run()
main.control()
# 将车辆初始化处理,后续如果需要重新控制则需要再次调用`enableApiControl`或`armDisarm
# client.reset()
# client.enableApiControl(False) # 取消仿真器API控制
'''
# get state of the car
car_state = client.getCarState() # 获取车辆状态坐标统一是NED坐标使用国际单位。
# <CarState> { 'gear': 0,
# 'handbrake': False,
# 'kinematics_estimated': <KinematicsState> { 'angular_acceleration': <Vector3r> { 'x_val': 0.0,
# 'y_val': 0.0,
# 'z_val': 0.0},
# 'angular_velocity': <Vector3r> { 'x_val': 0.0,
# 'y_val': 0.0,
# 'z_val': 0.0},
# 'linear_acceleration': <Vector3r> { 'x_val': 0.0,
# 'y_val': 0.0,
# 'z_val': 0.0},
# 'linear_velocity': <Vector3r> { 'x_val': 0.0,
# 'y_val': 0.0,
# 'z_val': -0.0},
# 'orientation': <Quaternionr> { 'w_val': 1.0,
# 'x_val': 3.1523319194093347e-05,
# 'y_val': 0.0,
# 'z_val': 0.0},
# 'position': <Vector3r> { 'x_val': 0.0,
# 'y_val': -2.2888182229507947e-06,
# 'z_val': 0.23400458693504333}},
# 'maxrpm': 7500.0,
# 'rpm': 0.0,
# 'speed': 0.0,
# 'timestamp': 1597385459957857300}
print("Speed %d, Gear %d" % (car_state.speed, car_state.gear))'''
'''controls = airsim.CarControls() # 获得车辆控制数据
# <CarControls> { 'brake': 0,
# 'gear_immediate': True,
# 'handbrake': False,
# 'is_manual_gear': False,
# 'manual_gear': 0,
# 'steering': 0,
# 'throttle': 0}
'''
''' # 前进配置car_controls之后使用setCarControls设置状态
# 这允许您设置油门(throttle),转向(steering),手制动(handbrake)和自动或手动档位(auto or manual gear)
car_controls.throttle = 0.5
car_controls.steering = 0
client.setCarControls(car_controls)
print("Go Forward")
time.sleep(3) # let car drive a bit
# 前进+右转
car_controls.throttle = 0.5
car_controls.steering = 1
client.setCarControls(car_controls)
print("Go Forward, steer right")
time.sleep(3) # let car drive a bit
# 倒车,记得要复原
car_controls.throttle = -0.5
car_controls.is_manual_gear = True
car_controls.manual_gear = -1
car_controls.steering = 0
client.setCarControls(car_controls)
print("Go reverse, steer right")
time.sleep(3) # let car drive a bit
car_controls.is_manual_gear = False # change back gear to auto
car_controls.manual_gear = 0
# 急刹
car_controls.brake = 1
client.setCarControls(car_controls)
print("Apply brakes")
time.sleep(3) # let car drive a bit
car_controls.brake = 0 # remove brake
# 将车辆初始化处理,后续如果需要重新控制则需要再次调用`enableApiControl`或`armDisarm`.'''