当前位置: 首页 > news >正文

杭州工业设计公司排名前十强六六seo基础运营第三讲

杭州工业设计公司排名前十强,六六seo基础运营第三讲,音乐网站开发的目的,wordpress优惠码插件很多时候在主线程中运行的程序需要一个while true#xff0c;但是这样会导致程序整体上非常庞大#xff0c;引入多线程来减少主线程的内容#xff0c;同时也能顺利的实现功能#xff0c;还有一个问题在于多线程还可以一定程度上减少全局变量#xff08;但是也是需要反复运…很多时候在主线程中运行的程序需要一个while true但是这样会导致程序整体上非常庞大引入多线程来减少主线程的内容同时也能顺利的实现功能还有一个问题在于多线程还可以一定程度上减少全局变量但是也是需要反复运行反复获得return没有全局变量用着舒服 多线程编程的作用就是上面所描述的哪些那么如何编写一个可控的msg呢 Emergency_brake_threading threading.Thread(targetemergency_brake_decision) 其中emergency_brake_decision为 def emergency_brake_decision1():while not rospy.is_shutdown():print(1)一个线程不是说反复会执行自己的函数而是执行本函数。如果当前函数是一个循环那就是会一个执行循环中的内容的所以说不要想当然就认为线程就是一个无限执行一个函数而是单独在启动线程后可以同时执行启动的线程的函数其运行情况由其本身决定 完整来说 import threading import timedef thread_prc1(a):print(a)def thread_prc2(b,a):print(b) a0 b1while a100:a1b2Threading_prc1 threading.Thread(targetthread_prc1,args(a,))Threading_prc2 threading.Thread(targetthread_prc2,args(b,a))#启动Threading_prc1.start()Threading_prc2.start()#等待结束Threading_prc1.join()Threading_prc2.join()线程默认是一直执行的直到线程函数结束或者线程被显式地停止或中断。Threading_prc1线程会执行 thread_prc1函数并将a作为参数传递给函数。这是一个最简单的线程。循环可以写在线程里面也可以在外面如果希望它是反复执行的话。 然后就是如果线程有返回值的问题了线程有返回值其实就是说明线程已经执行完一次了如果不希望他影响主频率那么它的执行速度必须也是很快的。而且循环要写在外面 import threading import time b1class MyThread(threading.Thread):def __init__(self, target, args()):super().__init__(targettarget, argsargs)self.result Nonedef run(self):self.result self._target(*self._args)def thread_prc1(a):k 1k1print(a)return kdef thread_prc2():global bprint(b)def main():global ba0while a100:a1b2Threading_prc1 MyThread(targetthread_prc1,args(a,))Threading_prc2 threading.Thread(targetthread_prc2)#启动Threading_prc1.start()Threading_prc2.start()#等待结束Threading_prc1.join()##每次结束后都有返回值result Threading_prc1.resultprint(k,result)print(b,b)Threading_prc2.join()if __name__ __main__:main()注意threading.Thread是没有办法拿到返回值的所以其实还是需要全局变量虽然可以用自己定义的MyThread拿到返回值不过基本也不这么干。 最最后是一个用时间变化的线程去改变车辆速度在这里插入代码片 ### !/usr/bin/python3 # -*- coding: utf-8 -*-##减速测试 base_wirecontrol import time import matplotlib.pyplot as pltimport can import cantools import rospy import time import std_msgs.msg from car_interfaces.msg import CarOriInterface,PathSpeedCtrlInterface import os import signal import json import threadingbrake_flag False Brake False Brake_end Falseflag_steer 0 q_num 0 quit_mod False is_exit False start_flag False target_vel 0#17 #车辆速度设置 target_steer_vel 50 # 车辆方向盘转角速度 num 0 bus_vel 0 veh_cte 0vel_plan 0flag_end 0 #终点停车只执行一次flag_spd_start 1#状态转换 flag_spd_start_brake 1#状态转换y 0import os import sys # 获取当前脚本文件的所在目录 script_directory os.path.dirname(os.path.abspath(__file__)) # 图片文件相对于脚本文件的路径 image_relative_path lib # 构建图片文件的完整路径 icon_path os.path.join(script_directory, image_relative_path) # absolute_path os.path.abspath(icon_path)# print(absolute_path) sys.path.append(icon_path) from base_function import * class MyThread(threading.Thread):def __init__(self, target, args()):super().__init__(targettarget, argsargs)self.result Nonedef run(self):self.result self._target(*self._args)def signal_handler(signal, frame):global is_exitis_exit Truemessages_1 [ # 发送给整车VCU的报文类型{message_id: 0x0C01D0A5, # 车辆方向盘转向信息报文message_name: steering_control,signals: {target_steering_angle: 0, # 车辆方向盘角度两字节表示target_steering_mod: 5, # 车辆转向控制模式4 bit表示置1为转角控制模式若手动后则置5后再置1DCU_valid: 1, # VCU状态1为正常0为不正常1 bit表示steering_control_valid: 1, # 车辆转角状态1为正常0不正常1 bit表示target_steering_torque: 0, # 转向叠加扭矩信号目前可以先取128中间值一字节表示target_steering_velocity: target_steer_vel, # 方向盘目标角速度5-54对应50 ~ 540°/s分辨率为10一字节表示steering_msg_life: 0, # 该消息发送的生命周期}},{message_id: 0x0C02D0A5, # 车辆qudong信息报文message_name: drive_control,signals: {target_velocity: target_vel,target_acceleration: 0,target_direction: 1,fault_code: 0,drive_msg_life: 0,}},{message_id: 0x0C03D0A5, # 车辆zhidong# 信息报文message_name: barke_control,signals: {target_deceleration: 0,XBR2_EBI_Mode: 0,XBR2_Priority: 0,XBR2_Ctrl_Mode: 0,XBR2_message_counter: 0,XBR2_checksum: 0,}},{message_id: 0x0C04D0A5, # 车辆整车速度信息报文message_name: body_control,signals: {mode_disp: 0,body_state: 1,turning_lighting_control: 0,high_low_beam_control: 2,hazard_lights_control: 0,backup_light_control: 0,width_lamp_control: 0,wiper_wash_switch : 0,front_door_control: 0,middle_door_control: 0,horn_control : 0,}},{message_id: 0x0C08D0A5, # 车辆整车速度信息报文message_name: parking_control,signals: {longterm_park_req: 0,temp_park_req: 0,park_control_mode: 0,park_work_mode: 0,park_air_pressure: 0,temp_park_pressure: 0,park_msg_checksum: 10,}}, ]def msg_send_to_vcu(messages_1,dbc,bus):#置发送了messageglobal countglobal brake_flagglobal bus_vel# 以下向车辆VCU发送了方向盘转角规划信息global flag_steerglobal Brakeglobal q_numglobal quit_modglobal steer_modglobal count1msg_send dbc.get_message_by_name(messages_1[0][message_name])messages_ list(msg_send.encode(messages_1[0][signals]))messages_send can.Message(arbitration_idmsg_send.frame_id, datamessages_, is_extended_idTrue)msg_send11 dbc.get_message_by_name(messages_1[1][message_name])messages_11 list(msg_send11.encode(messages_1[1][signals]))messages_send11 can.Message(arbitration_idmsg_send11.frame_id, datamessages_11, is_extended_idTrue)msg_send33 dbc.get_message_by_name(messages_1[2][message_name])messages_33 list(msg_send33.encode(messages_1[2][signals]))messages_send33 can.Message(arbitration_idmsg_send33.frame_id, datamessages_33, is_extended_idTrue)msg_send44 dbc.get_message_by_name(messages_1[3][message_name])messages_44 list(msg_send44.encode(messages_1[3][signals]))messages_send44 can.Message(arbitration_idmsg_send44.frame_id, datamessages_44, is_extended_idTrue)msg_send88 dbc.get_message_by_name(messages_1[4][message_name])messages_88 list(msg_send88.encode(messages_1[4][signals]))messages_send88 can.Message(arbitration_idmsg_send88.frame_id, datamessages_88, is_extended_idTrue)bus.send(messages_send)bus.send(messages_send11)bus.send(messages_send33)bus.send(messages_send44)bus.send(messages_send88)def msg_recv_from_vcu(dbc,bus): # 从整车VCU中得到车辆目前实际相关信息并放入到信息meg_car_ori中global bus_velglobal steer_modglobal quit_modglobal messages_1global countglobal count1global brake_flagglobal q_numglobal target_velglobal vel_planmessages_recv bus.recv()drive_life messages_1[1][signals][drive_msg_life]drive_life 1if drive_life 255:drive_life - 256messages_1[1][signals][drive_msg_life] drive_lifepark_life messages_1[4][signals][park_msg_checksum]park_life 1if park_life 255:park_life - 256messages_1[4][signals][park_msg_checksum] park_lifeif start_flag:messages_1[3][signals][mode_disp] 1else:messages_1[3][signals][mode_disp] 0messages_1[1][signals][target_velocity] 0if messages_1[0][signals][target_steering_mod] 5:messages_1[1][signals][target_velocity] 0q_num 1if q_num 20:messages_1[0][signals][target_steering_mod] 1# print(messages_1[0][signals][target_steering_mod],k*12)#当前速度if messages_recv.arbitration_id 0x0C06A5D0:decoded_messages dbc.decode_message(messages_recv.arbitration_id, messages_recv.data)bus_vel decoded_messages[act_vehicle_velocity] def can_stop_thread(dbc, bus):global messages_2messages_2 [ # 发送给整车VCU的报文类型{message_id: 0x0C01D0A5, # 车辆方向盘转向信息报文message_name: steering_control,signals: {target_steering_angle: 0, # 车辆方向盘角度两字节表示target_steering_mod: 5, # 车辆转向控制模式4 bit表示置1为转角控制模式若手动后则置5后再置1DCU_valid: 1, # VCU状态1为正常0为不正常1 bit表示steering_control_valid: 1, # 车辆转角状态1为正常0不正常1 bit表示target_steering_torque: 0, # 转向叠加扭矩信号目前可以先取128中间值一字节表示target_steering_velocity: 300, # 方向盘目标角速度5-54对应50 ~ 540°/s分辨率为10一字节表示steering_msg_life: 0, # 该消息发送的生命周期}},{message_id: 0x0C02D0A5, # 车辆qudong信息报文message_name: drive_control,signals: {target_velocity: 0,target_acceleration: 0,target_direction: 1,fault_code: 0,drive_msg_life: 0,}},{message_id: 0x0C03D0A5, # 车辆zhidong# 信息报文message_name: barke_control,signals: {target_deceleration: 0,XBR2_EBI_Mode: 0,XBR2_Priority: 0,XBR2_Ctrl_Mode: 0,XBR2_message_counter: 0,XBR2_checksum: 0,}},{message_id: 0x0C04D0A5, # 车辆整车速度信息报文message_name: body_control,signals: {mode_disp: 0,body_state: 1,turning_lighting_control: 0,high_low_beam_control: 0,hazard_lights_control: 0,backup_light_control: 0,width_lamp_control: 0,wiper_wash_switch : 0,front_door_control: 0,middle_door_control: 0,horn_control : 0,}},{message_id: 0x0C08D0A5, # 车辆整车速度信息报文message_name: parking_control,signals: {longterm_park_req: 0,temp_park_req: 0,park_control_mode: 0,park_work_mode: 0,park_air_pressure: 0,temp_park_pressure: 0,park_msg_checksum: 10,}},]msg_send_to_vcu(messages_2, dbc, bus)bus.shutdown()print(\nall threads were ended by Ctrl-C)def speed_change_brake(interval,total_time):global y #速度start_time time.time()time_list []y_list []k 0# 循环计算并记录时间和 y 的值while True:# 计算经过的时间elapsed_time time.time() - start_time# 检查是否超过总运行时间如果超过则跳出循环if elapsed_time total_time: ##5s加速到10y 10t elapsed_time # 时间变量y_list.append(y)time_list.append(t)# print(elapsed_time)elif y -0.1:if k0:k 1start_time_ time.time()time_ time.time() - start_time_# 计算 y 的值t time_ # 时间变量if y 0:y 0else:y -1 * t 10if y 0:y0# print(time_)# 记录时间和 y 的值time_list.append(t)y_list.append(y)if y 0 and time_ 15:breakprGreen(time_)result y_list# 等待一段时间控制循环速率time.sleep(interval)prRed(y)return resultdef prRed(skk): print(\033[91m {}\033[00m.format(skk))def prGreen(skk): print(\033[92m {}\033[00m.format(skk))def prYellow(skk): print(\033[93m {}\033[00m.format(skk))def prBlue(skk): print(\033[94m {}\033[00m.format(skk)) def prPurple(skk): print(\033[95m {}\033[00m.format(skk)) def prCyan(skk): print(\033[96m {}\033[00m.format(skk))def prOrange(skk): print(\033[33m {}\033[00m.format(skk))def prPink(skk): print(\033[95m {}\033[00m.format(skk))def main():global is_exitglobal yflag_wire 0signal.signal(signal.SIGINT, signal_handler)script_directory os.path.dirname(os.path.abspath(__file__))relative_path ../config/car_vcu2.dbcgps_dbc_file os.path.join(script_directory, relative_path)dbc cantools.db.load_file(gps_dbc_file)bus can.interface.Bus(channelcan0, bustypesocketcan)rospy.init_node(pub_vcu1, anonymousFalse)print(success)interval 0.001 # 时间间隔单位为秒total_time 5 # 总运行时间单位为秒Speed_value_threading MyThread(targetspeed_change_brake, args(interval, total_time)) Speed_value_threading.start()Speed_value_threading.join()result Speed_value_threading.result# time.sleep(0.01)x_values list(range(len(result))) plt.scatter(x_values, result)plt.xlabel(Time)plt.ylabel(y)plt.title(speed 曲线)plt.show()while not is_exit :if flag_wire 0 : # 0-wirecontrol发布 1-不发布messages_1[1][signals][target_velocity] ymsg_recv_from_vcu(dbc, bus)msg_send_to_vcu(messages_1, dbc, bus)time.sleep(0.01)Can_shutdown_threading threading.Thread(targetcan_stop_thread,args())Can_shutdown_threading.start()Can_shutdown_threading.join()if __name__ __main__:main()到目前为止现在是对线程的写法和运行机理理解最深的时候。
http://www.zqtcl.cn/news/336034/

相关文章:

  • 制作企业网站与app有什么不同化工企业网站建设
  • 东莞企业推广网站专门做黄漫的网站
  • 温州网站关键词排名优化win10 电脑做网站服务器
  • 网站设计规划信息技术教案营销模式和营销策略
  • 太仓住房城乡建设网站微信怎么注册
  • 德骏网站建设重庆企业网站如何推广
  • 路由器做内部网站服务器石家庄新闻综合频道在线直播回放
  • 怎么给网站备案亚马逊网站建设与维护方法分析
  • 金华网站建设团队产品网络推广方案范文
  • 拼多多刷单网站开发虚拟机可以做两个网站
  • wordpress安装路径和站点地址的设置信通网站开发中心
  • 柳州公司网站建设网站服务商
  • 智能建站实验报告成功营销网站
  • 基于jsp的网站开发开题报告青海公路工程建设市场信用信息服务网站
  • 做网站页面的软件wordpress如何开启page页面评论
  • 做网站最简单的长春财经学院
  • 导购网站 icp备案要求网站设置ico
  • ftp做网站营销策划方案步骤
  • 网站建设若干意见wordpress查看数据库密码
  • 什么网站可以做宣传西安网站建设聚星互联
  • 产品展示网站源码2015年做哪些网站致富
  • 潍坊网站制作推广怎样做彩票网站
  • 做视频网站被判刑自己怎么做企业网站建设
  • 安庆网站建设兼职哪个公司的卡网络最好
  • tp框架做响应式网站青岛网站建设首选
  • 外国自适应企业网站做网站模板用什么框架
  • win7做网站服务器隐私浏览器
  • 优秀的设计网站广州排名推广
  • 做电商设计有什么好的网站推荐软件产品开发流程图
  • 建设网站请示宣传企业网站建设的