基于ROS通过外设控制仿真机械臂运动

ROS手柄控制机械臂:从鼠标模拟到运动控制逻辑解析
本文介绍了如何使用ROS和鼠标模拟手柄控制机械臂的运动。首先,通过安装和配置`ros-noetic-joystick-drivers`来检测和测试外设。接着,详细阐述了控制逻辑,包括启动joy_node节点,创建订阅者和发布者来处理数据,并将鼠标数据转换为适合机械臂的关节状态消息。最后,通过moveit_setup_assistant配置机械臂功能包,并进行了实际操作演示,实现了鼠标控制机械臂的运动。

前言

最近要实现手柄控制机械臂的运动,苦于经费不足,手柄目前还用不上,不得已采用鼠标代替,不过原理是一样的,其实笔者早些时间学过一点ROS,不过已经忘的差不多了,趁此机会好好恶补一下,学习资料参考《ROS机器人开发实践》

鼠标部分

安装功能包

为了能够让系统检测到外设的接入同时正常使用,我们需要下载一些功能包

sudo apt-get install ros-noetic-joystick-drivers

有时候会出现安装版本不同导致异常的情况,这个时候用aptitude辅助安装,他会智能检索要安装的包

sudo apt-get install aptitude
sudo aptitude install <package name>

检测外设

我们需要查看Ubuntu中的硬件驱动层目录dev/input,在终端中输入

ls /dev/input/

我们会看到如下输出

ls /dev/input/
by-id  by-path  event0  event1  event2  event3  event4  event5  event6  js0  js1  mice  mouse0  mouse1  mouse2

创建的端口是js0,我们通过jstest来测试其是否工作

jstest /dev/input/js0

输出的结果应该为

输出的信息很清晰地告诉我们鼠标X&Y轴的状态,到时候换成手柄也就是多几个键的事情,原理是一样的,至此外设测试完成,现在我们来梳理一下控制逻辑

控制逻辑

用口头讲可能有点晦涩,直接上思维导图来解释,我们先启动joy_node手柄节点来发布外设的X&Y轴数据,然后通过简单的转换成机械臂能接收到的数据,再发布到joint_state上,move_group订阅到这些数据后对机械臂进行运动学规划,这个下次我打算从原理开始好好总结一下

 

 因此我们首先要做的第一步是启动joy_node节点,在这里我把它集成到了launch文件中,在第二个node标签中,当节点死掉了就重新生成,包名为joy,节点类型&名称:“joy_node”

<?xml version="1.0"?>
<launch>
    <!--create a node named mouse_joy to sub&pub datas,and set axis parameters about device-->
    <node pkg="joystick" type="mouse_joy" name="mouse_joy"/>
    <param name="axis_linear" value="1" type="int"/>
    <param name="axis_angular" value="0" type="int"/>
    <!--create a joy node and set some parameters about device-->
    <node respawn="true" pkg="joy" type="joy_node" name="joy_node">
        <param name="dev" value="/dev/input/js0" type="string"/>
        <param name="deadzone" value="0.12"/>
    </node>
</launch>

接下来第二步就是创建订阅者发布者来处理数据

类的创建

class Teleo
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值