本文内容:在 Ubuntu 18.04 虚拟机中,基于安装配置好 ROS Ketinc上,进行 URDF 机器人建模的详细步,同时配置摄像。
说明:本文是之前的延伸,该节需要参考上节机器人操作系统ROS(7)机器人URDF模型优化才能完成。
arbotix是一款控制电机、舵机的控制板,并提供了ROS功能包。他可以驱动真实的arbotix控制板,也可以在rviz中仿真。
简单的说,arbotix节点接受/cmd_vel topic
,并驱动小车运动。
~/catkin_ws/src/mbot_description
的src
目录下执行下载,下载完成后会有arbotix_ros
文件夹cd ~/catkin_ws/src
git clone https://github.com/vanadiumlabs/arbotix_ros.git
注:这是kinetic版本的方式。不同版本不一定相同
arbotix_ros中的python文件需要添加可执行权限;
操作方法: 找到该python文件添加可执行权限,鼠标右键—属性—权限—执行:√允许作为程序执行文件(E);
然后回到工作空间~/catkin_ws/
目录下执行如下命令重新生成
cd ~/catkin_ws
catkin_make
参考上节机器人操作系统ROS(7)机器人URDF模型优化完成,实验成功显示机器人即可。
复制过后,将所有
xacro
urdf
文件中含有的中文注释全部删除!
~/catkin_ws/src/mbot_description
的launch/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_description
的config
文件夹下创建名为 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_driver
将pyhon3
改成pyhon2.7
成功后如图
此时看看有哪些节点和话题:
ok我们可以看到 arbotix 节点成功跑起来了。
到这里还看不出来什么,我们需要用 arbotix 控制小车跑起来才行啊。
回想最初的小海龟例程,我们是不是用键盘来控制小海龟运动?其实,我们是发送了 /cmd_vel 的 topic 来控制海龟,其实,这个消息就是控制小车运动的消息,以后会多次遇到的。
也就是说,我们只要能发送 /cmd_vel 的 topic 就可以了是吧?那么我们就可以复用别人的功能包了。
新开端口,运行键盘控制节点:
roslaunch mbot_teleop mbot_teleop.launch
启动之后,我们再来看看有哪些节点和 topic :
此时我们可以清楚的看到 /mbot_teleop 向 /arbotix 发送了 /cmd_vel 。 /arbotix 接收后,会做出相应操作,驱动小车做运动,再根据 Tf 变换,将小车的运动姿态,实时在 rviz 中显示出来。
这就是最开头的:arbotix节点接受 /cmd_vel topic ,并驱动小车运动。
如果不显示小车运动,按照下面操作:
keep代表保存的箭头数量
shape是外观上的改变
问题:在 rviz 中,应将 fixed_frame 设置为 odom 坐标系,即里程计坐标系。但是出现问题:设为 odom 后,小车模型显示不出来,只有设置为 base_link 时才能显示。
解决参考:原文
解决办法原文链接:「同学们,别卷了」的原创文章
理解补充原文连接:椰奶燕麦粥加糖带走