机器人操作系统ROS(8)arbotix控制器控制小车运动

本文内容:在 Ubuntu 18.04 虚拟机中,基于安装配置好 ROS Ketinc上,进行 URDF 机器人建模的详细步,同时配置摄像。
说明:本文是之前的延伸,该节需要参考上节机器人操作系统ROS(7)机器人URDF模型优化才能完成。

说明

arbotix是一款控制电机、舵机的控制板,并提供了ROS功能包。他可以驱动真实的arbotix控制板,也可以在rviz中仿真。

简单的说,arbotix节点接受/cmd_vel topic,并驱动小车运动。

安装

安装ARBOTIX

  1. 在当前功能包~/catkin_ws/src/mbot_descriptionsrc目录下执行下载,下载完成后会有arbotix_ros文件夹
cd ~/catkin_ws/src
git clone https://github.com/vanadiumlabs/arbotix_ros.git

注:这是kinetic版本的方式。不同版本不一定相同

  1. arbotix_ros中的python文件需要添加可执行权限;
    操作方法: 找到该python文件添加可执行权限,鼠标右键—属性—权限—执行:√允许作为程序执行文件(E);

  2. 然后回到工作空间~/catkin_ws/目录下执行如下命令重新生成

cd ~/catkin_ws 
catkin_make 

URDF模型

参考上节机器人操作系统ROS(7)机器人URDF模型优化完成,实验成功显示机器人即可。

配置arbotix控制器

复制过后,将所有xacro urdf文件中含有的中文注释全部删除

创建launch文件

  • 在当前功能包~/catkin_ws/src/mbot_descriptionlaunch/xacro目录下:创建:arbotix_mbot_with_xacro.launch
    命令sudo gedit arbotix_mbot_with_xacro.launch
<launch>
    <param name="/use_sim_time" value="false" />
	
	
    <arg name="urdf_file" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/mbot.xacro'" />
    
    
	<arg name="gui" default="false" />

	<param name="robot_description" command="$(arg urdf_file)" />
	<param name="use_gui" value="$(arg gui)"/>

	<node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
        <rosparam file="$(find mrobot_description)/config/fake_mrobot_arbotix.yaml" command="load" />
        <param name="sim" value="true"/>
    node>

	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />

    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher">
        <param name="publish_frequency" type="double" value="20.0" />
    node>

	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mrobot_description)/config/mrobot_arbotix.rviz" required="true" />
	
launch>

可以看出它其实跟之前的launch文件是差不多的,只是多了一个启动 arbotix_python 节点的命令,这个文件在之前下的启动 arbotix_ros中可以找到,如果这里节点启动失败可以找到该文件,右键属性查看可执行权限,python文件需要添加可执行权限才能运行。

创建配置文件

在当前功能包~/catkin_ws/src/mbot_descriptionconfig文件夹下创建名为 fake_krobot_arbotix.yaml

controllers: {
   base_controller: {
   type: diff_controller, 
   base_frame_id: base_footprint, 
   base_width: 0.26, 
   ticks_meter: 4100, 
   Kp: 12, 
   Kd: 12, 
   Ki: 0, 
   Ko: 50, 
   accel_limit: 1.0 
   }
}

运行仿真文件

roslaunch mbot_description  arbotix_mbot_with_xacro.launch  # <你的launch文件名> 

出现错误:

ModuleNotFoundError: No module named 'rospkg'
shutdown request: [/joint_state_publisher_gui] Reason: new node registered with same name
[dviver-5] process has died [pid 18346, exit code 1, cmd /home/melodic/catkin_ws/src/arbotix_ros/arbotix_python/bin/arbotix_driver __name:=dviver __log:=/home/melodic/.ros/log/c8071278-7a06-11ec-aa34-000c295384a4/dviver-5.log].
log file: /home/melodic/.ros/log/c8071278-7a06-11ec-aa34-000c295384a4/dviver-5*.log

原因:arbotix是运行python3 而ros运行是python2

解决:进入工作空间的src目录下,进入arbotix_ros功能包,进入arbotix_python,进入bin,进入arbotix_driverpyhon3改成pyhon2.7

成功后如图
机器人操作系统ROS(8)arbotix控制器控制小车运动_第1张图片
此时看看有哪些节点和话题:
机器人操作系统ROS(8)arbotix控制器控制小车运动_第2张图片
ok我们可以看到 arbotix 节点成功跑起来了。

机器人操作系统ROS(8)arbotix控制器控制小车运动_第3张图片
到这里还看不出来什么,我们需要用 arbotix 控制小车跑起来才行啊。
回想最初的小海龟例程,我们是不是用键盘来控制小海龟运动?其实,我们是发送了 /cmd_vel 的 topic 来控制海龟,其实,这个消息就是控制小车运动的消息,以后会多次遇到的。
也就是说,我们只要能发送 /cmd_vel 的 topic 就可以了是吧?那么我们就可以复用别人的功能包了。

键盘控制

新开端口,运行键盘控制节点:

roslaunch mbot_teleop mbot_teleop.launch 


机器人操作系统ROS(8)arbotix控制器控制小车运动_第4张图片

启动之后,我们再来看看有哪些节点和 topic :
机器人操作系统ROS(8)arbotix控制器控制小车运动_第5张图片
此时我们可以清楚的看到 /mbot_teleop 向 /arbotix 发送了 /cmd_vel 。 /arbotix 接收后,会做出相应操作,驱动小车做运动,再根据 Tf 变换,将小车的运动姿态,实时在 rviz 中显示出来。
这就是最开头的:arbotix节点接受 /cmd_vel topic ,并驱动小车运动。

RVIZ联动

如果不显示小车运动,按照下面操作:

  1. 设置添加 oodm
    机器人操作系统ROS(8)arbotix控制器控制小车运动_第6张图片
  2. Fixed Frame 选择oodm
    机器人操作系统ROS(8)arbotix控制器控制小车运动_第7张图片
  3. 设置oodm 的 话题:
    机器人操作系统ROS(8)arbotix控制器控制小车运动_第8张图片

keep代表保存的箭头数量
shape是外观上的改变

  1. 此时在键盘控制节点的端口按照u i o 等操作 就可以在RVIZ观察运动

机器人操作系统ROS(8)arbotix控制器控制小车运动_第9张图片
机器人操作系统ROS(8)arbotix控制器控制小车运动_第10张图片

其他问题:

问题:在 rviz 中,应将 fixed_frame 设置为 odom 坐标系,即里程计坐标系。但是出现问题:设为 odom 后,小车模型显示不出来,只有设置为 base_link 时才能显示。
解决参考:原文

问题:
机器人操作系统ROS(8)arbotix控制器控制小车运动_第11张图片
解决:将URDF中的中文注释全部删掉

理解 补充:

  • 首先是teleop.py键盘控制代码的书写。你有没有这样的问题?为什么teleop.py可以控制机器人的运动,teleop.py是怎样和机器人模型联系到一起的呢?最主要的是teleop.py文件发送了一个名字叫做“/cmd_vel”的话题,这样arbotix就可以接受到这个话题,然后用teleop.py控制的twist中的参数,来控制机器人运动。,,只需要理解为arbotix接收的是/cmd_vel”的话题,然后你就发送/cmd_vel”的话题就行了。
  • 重点:**怎样复用teleop.py中的代码?**只需要修改teleop.py中话题参数为“/cmd_vel”就行】对于teleop.py文件的来源,我直接使用的是古大神的代码或者是下面一个小哥写的代码,链接在最下面。
  • 另外,**为什么用python写键盘控制代码呢?**因为不用编译,不用写恶心的cmakelist,所以我选择,直接能【rosrun+包+py】命令的python文件。
  • 在这里提一下twist消息,他是一个头文件twist.h,然后里面有几个变量,咱们就是修改这几个变量,其中twist中的消息代表着线速度和角速度。linear.x(x方向上的速度)指向机器人前方,linear.y指向左方,linear.z垂直向上满足右手系,平面移动机器人常常linear.y和linear.z均为0。angular.z(代表着围绕着z轴的角速度)代表平面机器人的角速度,因为此时z轴为旋转轴

参考

解决办法原文链接:「同学们,别卷了」的原创文章
理解补充原文连接:椰奶燕麦粥加糖带走

你可能感兴趣的:(机器人ROS,机器人)