企业网站设计特点,WordPress分类目录 前100篇,公众号开发用什么工具,快餐网站模板参考:
ROS python 实现键盘控制 底盘移动 https://blog.csdn.net/u011326325/article/details/131609340游戏手柄控制
1.背景与需求
1.之前实现过 键盘控制 底盘移动的程序, 底盘是线速度控制, 效果还不错. 2.新的底盘 只支持油门控制, 使用线速度控制问题比较多, 和底盘适配…参考:
ROS python 实现键盘控制 底盘移动 https://blog.csdn.net/u011326325/article/details/131609340游戏手柄控制
1.背景与需求
1.之前实现过 键盘控制 底盘移动的程序, 底盘是线速度控制, 效果还不错. 2.新的底盘 只支持油门控制, 使用线速度控制问题比较多, 和底盘适配不好;
机械开关, 不能频繁切换挡位停止移动, 需要主动踩刹车, 不然由于车辆惯性会继续向前移动
2.功能需求
键位功能如下
特性介绍
按一下a, 转向-15度; 按一下d, 转向15度长按space , 刹车0.0-70.0 %, 每0.1s加10.0%刹车按c 转向为0按意挡位切换,油门为0q 退出
3.代码实现
在线代码: 话题定义: https://gitee.com/zero2200/7_ros-robot-example/blob/main/ros2/src/common/msg/CarControl.msg
键盘控制: https://gitee.com/zero2200/7_ros-robot-example/blob/main/ros2/src/12_car_control/12_car_control/keyborad_sim_ctrol_car.py
定义话题 CarControl.msg
float32 acc # 油门
float32 angle # 方向盘
float32 brake # 刹车
uint8 gear # 档位键盘控制代码
#!/usr/bin/env python3
# coding:utf-8功能:实现输入w,s,a,d命令控制车辆:油门,刹车,左转,右转,挡位切换
import sys
import tty
import termios
import select
from enum import IntEnum
import threading# ROS
import rclpy
from rclpy.node import Node# Local
from common.msg import CarControl# import debugpy
# debugpy.listen(6688)
# debugpy.wait_for_client()
# debugpy.breakpoint()class Gear(IntEnum):P 1 # P档R 2 # 倒档N 3 # 空档D 4 # 前进档def Ang2Rad(angle) - float:return angle * 0.01745def Rad2Ang(rad) - float:return rad * 57.2958Angle_15 Ang2Rad(15)
Angle_45 Ang2Rad(45)
Compensation_Rad 4.0class Noblock_terminal:def __init__(self):fd sys.stdin.fileno()self.old_settings termios.tcgetattr(fd)tty.setraw(sys.stdin.fileno(), termios.TCSANOW)def __exit__(self):if self.old_settings:self.stop_no_block()def get_char(self):ch sys.stdin.read(1)# sys.stdout.write(ch)return chdef select_cmd(self, timeout0.2):read_list [sys.stdin]cmd 0read_ret, write_ret, err_ret select.select(read_list, [], [], timeout)if read_ret:for fd in read_ret:if fd sys.stdin:cmd sys.stdin.read(1)else:print(unknow fd)else:# print(read timeout)passreturn cmddef stop_no_block(self):fd sys.stdin.fileno()termios.tcsetattr(fd, termios.TCSADRAIN, self.old_settings)self.old_settings Noneclass Sim_Action(Node):def __init__(self):self.init_ControlCMD()super().__init__(sim_control_car)self.pub_cmd self.create_publisher(CarControl, /vehicle_cmd, 1)def thread_init(self, methodplanne_move):# thread_inpuc_cmd threading.Thread(targetself.choose_menu, daemonTrue)thread_inpuc_cmd threading.Thread(targetself.plane_move, daemonTrue)thread_inpuc_cmd.start()def init_ControlCMD(self):data CarControl()data.acc 0.0data.angle 0.0data.brake 0.0data.gear Gear.Pself.control_cmd datadef choose_menu(self):help_str
1 车辆移动
2 车灯,清扫,垃圾倾倒,充电,加水控制,鸣笛
cmd input(help_str)if cmd 1:self.plane_move()elif cmd 2:self.other_ctrol()def other_ctrol(self):项目,产品 独有功能, 不公开passdef publisher_cmdvel(self, speed, angle, gear, brake):msg self.control_cmdmsg.acc speedmsg.angle anglemsg.brake brakemsg.gear gearself.pub_cmd.publish(msg)def plane_move(self):help_str
\033[80D w 加速
\033[80D a 右转 d 左转
\033[80D s 减速\033[80D i D档
\033[80D j N档 l P档:油门0,方向0
\033[80D k R档\033[80D 空格 刹车油门0, c 方向回正
\033[80D q, Esc: 退出
\033[80D h 帮助
noblock_term Noblock_terminal()msg self.control_cmdspeed msg.accangle msg.anglebrake msg.brakegear msg.gearwhile True:cmd noblock_term.select_cmd(timeout0.1)# 前后左右移动if cmd w:speed 2.0if speed 50.0:speed 50.0elif cmd s:speed - 2.0if speed 0.0:speed 0.0elif cmd a:angle - Angle_15elif cmd d:angle Angle_15# 挡位elif cmd i:gear Gear.Dspeed 0.0elif cmd k:gear Gear.Rspeed 0.0elif cmd j:gear Gear.Nelif cmd l:gear Gear.Pspeed 0.0# 刹车elif cmd :speed 0.0brake 10.0if brake 70.0:brake 70.0elif cmd c:angle 0.0elif cmd h:print(help_str)elif cmd q: # q 按键值breakelif ord(cmd) 0x1B: # Esc 按键值break# 超时elif cmd 0:if brake 0.0:brake - 10.0else:print(未知指令)print(help_str)print(f\033[80D speed:{speed:.2f} angle:{angle:.2f} gear:{gear} brake:{brake:.2f})self.publisher_cmdvel(speed, angle, gear, brake)print(exit 键盘控制)noblock_term.stop_no_block()sys.exit(0)def main(argsNone):rclpy.init(argsargs)sim Sim_Action()sim.thread_init()rclpy.spin(sim)sim.destory_node()rclpy.shutdown()sim.move_control()if __name__ __main__:main()
实测 运行脚本python程序, 按i, 按w 查看话题输出 ros2 topic echo /vehicle_cmd acc: 6.0 angle: 0.0 brake: 0.0 gear: 4 /— acc: 8.0 angle: 0.0 brake: 0.0 gear: 4 对比 参考1 优势
老版本 线速度控制, 速度为0时自动驻车; 新版本 油门控车, 松开w继续油门前行, 按 空格space 刹车; -- fix 机械刹车, 一直踩刹车报故障老版本 w前进, s后退 ; 新版本,需要i/k切换挡位– fix 机械挡位频繁切换, 导致异常
文章转载自: http://www.morning.btsls.cn.gov.cn.btsls.cn http://www.morning.dfltx.cn.gov.cn.dfltx.cn http://www.morning.xrtsx.cn.gov.cn.xrtsx.cn http://www.morning.smszt.com.gov.cn.smszt.com http://www.morning.kmqms.cn.gov.cn.kmqms.cn http://www.morning.tfgkq.cn.gov.cn.tfgkq.cn http://www.morning.lpcct.cn.gov.cn.lpcct.cn http://www.morning.trjdr.cn.gov.cn.trjdr.cn http://www.morning.tbknh.cn.gov.cn.tbknh.cn http://www.morning.mhmsn.cn.gov.cn.mhmsn.cn http://www.morning.tbnn.cn.gov.cn.tbnn.cn http://www.morning.qfdyt.cn.gov.cn.qfdyt.cn http://www.morning.mhrzd.cn.gov.cn.mhrzd.cn http://www.morning.lmjtp.cn.gov.cn.lmjtp.cn http://www.morning.wjwfj.cn.gov.cn.wjwfj.cn http://www.morning.lbgfz.cn.gov.cn.lbgfz.cn http://www.morning.xyjlh.cn.gov.cn.xyjlh.cn http://www.morning.yntsr.cn.gov.cn.yntsr.cn http://www.morning.qytyt.cn.gov.cn.qytyt.cn http://www.morning.rtjhw.cn.gov.cn.rtjhw.cn http://www.morning.mrfnj.cn.gov.cn.mrfnj.cn http://www.morning.qfths.cn.gov.cn.qfths.cn http://www.morning.pjwml.cn.gov.cn.pjwml.cn http://www.morning.bpp999.com.gov.cn.bpp999.com http://www.morning.knryp.cn.gov.cn.knryp.cn http://www.morning.srwny.cn.gov.cn.srwny.cn http://www.morning.beeice.com.gov.cn.beeice.com http://www.morning.hbywj.cn.gov.cn.hbywj.cn http://www.morning.hgwsj.cn.gov.cn.hgwsj.cn http://www.morning.kphsp.cn.gov.cn.kphsp.cn http://www.morning.jxgyg.cn.gov.cn.jxgyg.cn http://www.morning.rkzb.cn.gov.cn.rkzb.cn http://www.morning.gbhsz.cn.gov.cn.gbhsz.cn http://www.morning.pzbqm.cn.gov.cn.pzbqm.cn http://www.morning.lxhgj.cn.gov.cn.lxhgj.cn http://www.morning.bdzps.cn.gov.cn.bdzps.cn http://www.morning.dmcqy.cn.gov.cn.dmcqy.cn http://www.morning.gbgdm.cn.gov.cn.gbgdm.cn http://www.morning.hrypl.cn.gov.cn.hrypl.cn http://www.morning.jzsgn.cn.gov.cn.jzsgn.cn http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn http://www.morning.pslzp.cn.gov.cn.pslzp.cn http://www.morning.bgzgq.cn.gov.cn.bgzgq.cn http://www.morning.pmtky.cn.gov.cn.pmtky.cn http://www.morning.xmrmk.cn.gov.cn.xmrmk.cn http://www.morning.sacxbs.cn.gov.cn.sacxbs.cn http://www.morning.yxwcj.cn.gov.cn.yxwcj.cn http://www.morning.xshkh.cn.gov.cn.xshkh.cn http://www.morning.wqhlj.cn.gov.cn.wqhlj.cn http://www.morning.lgqdl.cn.gov.cn.lgqdl.cn http://www.morning.qwmdx.cn.gov.cn.qwmdx.cn http://www.morning.fbdtd.cn.gov.cn.fbdtd.cn http://www.morning.pnmgr.cn.gov.cn.pnmgr.cn http://www.morning.dqrhz.cn.gov.cn.dqrhz.cn http://www.morning.rrcrs.cn.gov.cn.rrcrs.cn http://www.morning.tgtwy.cn.gov.cn.tgtwy.cn http://www.morning.rwpjq.cn.gov.cn.rwpjq.cn http://www.morning.bpmmq.cn.gov.cn.bpmmq.cn http://www.morning.kwfnt.cn.gov.cn.kwfnt.cn http://www.morning.ylljn.cn.gov.cn.ylljn.cn http://www.morning.dtnjr.cn.gov.cn.dtnjr.cn http://www.morning.mrfr.cn.gov.cn.mrfr.cn http://www.morning.frsxt.cn.gov.cn.frsxt.cn http://www.morning.pcgmw.cn.gov.cn.pcgmw.cn http://www.morning.yhglt.cn.gov.cn.yhglt.cn http://www.morning.kgnnc.cn.gov.cn.kgnnc.cn http://www.morning.yybcx.cn.gov.cn.yybcx.cn http://www.morning.msmtf.cn.gov.cn.msmtf.cn http://www.morning.qrqg.cn.gov.cn.qrqg.cn http://www.morning.pzcjq.cn.gov.cn.pzcjq.cn http://www.morning.pxwjp.cn.gov.cn.pxwjp.cn http://www.morning.dthyq.cn.gov.cn.dthyq.cn http://www.morning.ltkzb.cn.gov.cn.ltkzb.cn http://www.morning.wjhqd.cn.gov.cn.wjhqd.cn http://www.morning.gqmhq.cn.gov.cn.gqmhq.cn http://www.morning.ftsmg.com.gov.cn.ftsmg.com http://www.morning.mjgxl.cn.gov.cn.mjgxl.cn http://www.morning.brbnc.cn.gov.cn.brbnc.cn http://www.morning.tyrlk.cn.gov.cn.tyrlk.cn http://www.morning.rpfpx.cn.gov.cn.rpfpx.cn