使用键盘发布手柄控制信息
最近在看CMU的ShuoYang开源的自己写的MIT cheetah3的控制代码,在经过了漫长的docker环境安装后,发现因为自己没有xbox手柄,因此无法直接控制gazebo中的机器狗,因此准备使用键盘来模拟手柄发布信息。
大家对机器狗感兴趣的也可以去运行一下跑一跑看一看,因为使用docker部署环境,所以可以省掉复杂的环境配置过程(只是对网络要求可能有点高)。这里也给出大佬的知乎文章,其实是github的简中版。
知乎:https://zhuanlan.zhihu.com/p/504495840?utm_source=wechat_session&utm_medium=social&utm_oi=28147256918016&s_r=0
gihub:https://github.com/ShuoYangRobotics/A1-QP-MPC-Controller
接下来就介绍一下我如何使用键盘映射到手柄的信息。
问题解决思路
通过查看源码得知,控制gazebo中的机器狗是通过订阅一个/joy
的主题发布的sensor_msgs/Joy
信息来进行的,因此就想到能不能直接获取键盘的按键信息然后映射到手柄上对应的键位,最后将其打包成sensor_msgs/Joy
的样式再通过将信息发布至/joy
topic解决这个问题。
解决方法
一番搜索后找到了stanfordroboticsclub所写的一个键盘控制器,同样实现的是使用键盘发布手柄信息。这个脚本基于pygame来捕获键盘按键信息,然后使用一个简单的迭代来计算模拟摇杆键程信息。然后我就在这个脚本的基础上进行了一定的修改,将获得的按键信息打包成sensor_msgs/Joy
的信息,然后使用rospy将消息发布到/joy
。
至于想要发布什么样的信息可以自己进行设定,因为通过查看sensor_msgs/Joy
发现其结构除了头部信息以外只是两个数组:float64 axes[]
和int32 buttons[]
。至于里面的信息顺序该如何存储,并没有规定,因此完全可以自己定义数据的顺序。
要注意的是上面所介绍的脚本所写的控制器是基于PS4手柄的,可以从它的命名看出,分别使用了x、square、circle、triangle四个标志表示四个按钮,对应了xbox中的A、X、B、Y。
这里给出大体的打包成Joy
信息的流程,不在给出整个实现代码。
rospy.init_node("joy_node")
pub = rospy.Publisher("/joy",Joy,queue_size=1)
...
while True:out_msg = Joy()msg = {"ly": 0,"lx": 0,"rx": 0,"ry": 0,"L2": 0,"R2": 0,"R1": 0,"L1": 0,"dpady": 0,"dpadx": 0,"x": 0,"square": 0,"circle": 0,"triangle": 0,"message_rate": MESSAGE_RATE,}out_msg.axes = [msg["lx"],msg["ly"],msg["rx"],msg["L2"],msg["R2"],msg["ry"],msg["dpadx"],msg["dpady"]]out_msg.buttons = [msg["x"],msg["circle"],msg["square"],msg["triangle"],msg["L1"],msg["R1"],0,0,0,0,0]...out_msg.header.stamp = rospy.Time.now()pub.publish(out_msg)
使用
roscore
python keyboard_joystick.py
使用上述脚本时记得退出conda环境,在自己的环境中安装pygame
可能存在的问题
- 如果感觉发送频率不匹配,记得将里面的print()函数注释掉,避免不必要的运行开支。如果注释掉还是感觉卡,就降低一下每秒发送信息的频率,可以通过调整脚本中的
MESSAGE_RATE
实现。 - 如果发现时间戳信息均为0,试一试把所有的ros相关的东西全部关闭,然后重启roscore再启动脚本试一下。
参考资料:
https://github.com/stanfordroboticsclub/PupperKeyboardController
https://zhuanlan.zhihu.com/p/504495840?utm_source=wechat_session&utm_medium=social&utm_oi=28147256918016&s_r=0
https://github.com/ShuoYangRobotics/A1-QP-MPC-Controller
http://wiki.ros.org/joy
使用键盘发布手柄控制信息相关推荐
- ubuntu 将手柄控制信息发布到ros上
参考自linux安装xbox无线手柄,ROS配置和使用Xbox One无线手柄 里面有一串ubuntu使用手柄的操作,这里因为我只需要ros部分所以单独记录一部分出来 1.安装joy sudo apt ...
- 键盘录入学生信息,保存到集合中
键盘录入学生信息,保存到集合中. 循环录入的方式,1:表示继续录入,0:表示结束录入. 定义学生类,属性为姓名,年龄,使用学生对象保存录入数据. 使用数组(数组扩容),保存学生对象,录入结束后,遍历数 ...
- php内核介绍及扩展开发指南,4.5. 发布扩展信息
发布扩展信息 扩展可以发布 phpinfo() 或反射API要求的信息.我们一起来看一下. 本章不会太长,因为真的很简单. MINFO( ) 挂钩 如果声明了,一切都在声明的 MINFO() 挂钩中进 ...
- 计算机复试比重低的学校,又有985院校发布调剂信息,这个34所降低复试比重!...
原标题:又有985院校发布调剂信息,这个34所降低复试比重! 01 985院校调剂 01.清华大学 昨天,清华大学发布一则调剂信息:临床医学交叉人才培养项目接受调剂. 接收调剂专业如下: 据其官网介绍 ...
- java从键盘上录入信息
JAVA从键盘上录入信息 import java.util.Scanner; /*** 从键盘录入信息* 导入Scanner 导包*/public class Test01 {public stati ...
- 百度HR发布招聘信息要求“热爱小米文化”?百度回应:冒充的
一直以来,很多人都有一个疑问,招聘平台上HR们发布招聘信息时会互相参考吗?毕竟那些任职条件和要求,描述的都差不多. 日前,有网友发现,一个自称为百度HR的账号在某招聘平台发布招聘需求时,疑似复制了小米 ...
- 译:在ROS上发布Odometry信息
在ROS上发布Odometry信息 描述: 这一教程提供了一个为Navigation Stack发布Odometry消息的例子,不仅包含了如何发布nav_msgs/Odometry消息,还包括一个&q ...
- Flask项目实战——10—(前台板块页面搭建、文本编辑页面搭建、发布帖子信息前验证权限、帖子模型搭建、发布帖子功能、帖子信息渲染到前后台页面)
1.前台板块页面搭建 视图文件查询数据传输到前台界面:前台蓝图文件:apps/front/views.py 注意数据的收集方法和数据传输的类型. # -*- encoding: utf-8 -*- & ...
- 国外可以免费发布供求信息的网站(转)
1.Algomtl http://www.algomtl.com/algopages.html 语种:英文 2.allactiontrade http://www.allactiontrade.com ...
最新文章
- Linux Centos7安装chrome浏览器
- uWSGI+Nginx安装、配置
- anaconda下tensorflow安装遇到的问题记录及解决办法
- 通过Spring Data Neo4J操作您的图形数据库
- 2021上半年短视频及电商生态研究报告
- R 学习笔记《五》 R语言初学者指南--第二章总结
- jmeter-json提取器提取数据
- CSDN企业账户用户手册操作文档
- 红外遥控器解码串口输出模块结合51单片机+oled屏幕实现遥控器红外解锁( STC89C52RC)
- 知识分享 | 什么是CAN线波特率
- Feign报错java.lang.NoSuchFieldError: MULTIPART_RELATED
- 阿里云访问控制——OSS——STS
- 俄勒冈州立大学研发脱口秀机器人,全美巡演数十场获好评
- (重点)微服务核心研究之--编排
- sql中的判空操作keng
- 中国量子计算机的运算速度是,中国量子计算机问世,运算速度碾压顶级超算,美国:时代变了...
- 用Python制作动态二维码,一行代码就做到了
- android图片定位软件免费下载,地图定位大师 经纬度
- 黑马入门教程笔记01-OC
- SARscape报错Overlap size too small 解决方案