前边我们已经介绍了ROS的基本情况,以及新手入门ROS的初级教程,现在就要真正的使用ROS进入机器人世界了。接下来我们涉及到的很多例程都是《ROS by Example》这本书的内容,我是和群里的几个人一起从国外的亚马逊上买到的,还是很有参考价值的,不过前提是你已经熟悉之前的新手教程了。
一、ROS by Example

这本书是关于国外关于ROS出版的第一本书,主要针对Electric和Fuerte版本,使用机器人主要是TurtleBot。书中详细讲解了关于机器人的基本仿真、导航、路径规划、图像处理、语音识别等等,而且在google的svn上发布了所有代码,可以通过以下命令下载、编译:
svn checkout http://ros-by-example.googlecode.com/svn/trunk/rbx_vol_1
rosmake rbx_vol_1
rospack profile //加入ROS package路径
二、rviz简单机器人模拟
1、安装机器人模拟器
rviz是一个显示机器人实体的工具,本身不具有模拟的功能,需要安装一个模拟器arbotix。
svn checkout http://vanadium-ros-pkg.googlecode.com/svn/trunk/arbotix
rosmake arbotix
2、TurtleBot机器人的模拟
在书中的rbx_vol_1包里已经为我们写好了模拟的代码,我们先进行实验,完成后再仔细研究代码。 机器人模拟运行:
roscore
roslaunch rbx1_bringup fake_pi_robot.launch
然后在终端中可以看到,机器人已经开始运行了,打开rviz界面,才能看到机器人实体。
rosrun rviz rviz -d `rospack find rbx1_nav`/sim_fuerte.vcg
后面的参数是加载了rviz的配置文件sim_fuerte.vcg。效果如下:

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

如果要让机器人停下来,需要在中断中按下“Ctrl+c”,然后输入:
rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}'
也可以改变发送的topic信息,使机器人走出不同的轨迹。
三、实现分析
按照上面的仿真过程,我们详细分析每一步的代码实现。
1、TurtleBot机器人运行
机器人运行使用的是launch文件,首先打开fake_turtlebot.launch文件。
<launch>
<param name="/use_sim_time" value="false" />
<!-- Load the URDF/Xacro model of our robot -->
<arg name="urdf_file" default="$(find xacro)/xacro.py '$(find turtlebot_description)/urdf/turtlebot.urdf.xacro'" />
<param name="robot_description" command="$(arg urdf_file)" />
<node name="arbotix" pkg="arbotix_python" type="driver.py" output="screen">
<rosparam file="$(find rbx1_bringup)/config/fake_turtlebot_arbotix.yaml" command="load" />
<param name="sim" value="true"/>
</node>
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher">
<param name="publish_frequency" type="double" value="20.0" />
</node>
<!-- We need a static transforms for the wheels -->
<node pkg="tf" type="static_transform_publisher" name="odom_left_wheel_broadcaster" args="0 0 0 0 0 0 /base_link /left_wheel_link 100" />
<node pkg="tf" type="static_transform_publisher" name="odom_right_wheel_broadcaster" args="0 0 0 0 0 0 /base_link /right_wheel_link 100" />
</launch>
文件可以大概分为四个部分: (1) 从指定的包中加载urdf文件 (2) 启动arbotix模拟器 (3) 启动状态发布节点 (4) tf坐标系配置
2、rviz配置文件
在打开rviz的时候需要加载一个.vcg的配置文件,主要对rviz中的插件选项进行默认的配置。这里打开的是sim_fuerte.vcg文件,由于文件比较长,这里只列举重点的部分。
Background\ ColorB=0.12549
Background\ ColorG=0.12549
Background\ ColorR=0.12549
Camera\ Config=158.108 0.814789 0.619682 -1.57034
Camera\ Type=rviz::FixedOrientationOrthoViewController
Fixed\ Frame=/odom
Grid.Alpha=0.5
Grid.Cell\ Size=0.5
Grid.ColorB=0.941176
Grid.ColorG=0.941176
Grid.ColorR=0.941176
Grid.Enabled=1
Grid.Line\ Style=0
Grid.Line\ Width=0.03
Grid.Normal\ Cell\ Count=0
Grid.OffsetX=0
Grid.OffsetY=0
Grid.OffsetZ=0
Grid.Plane=0


3、发布topic
要让机器人动起来,还需要给他一些运动需要的信息,这些信息都是通过topic的方式发布的。 这里的topic就是速度命令,针对这个topic,我们需要发布速度的信息,在ROS中已经为我们写好了一些可用的数据结构,这里用的是Twist信息的数据结构。在终端中可以看到Twist的结构如下:

用下面的命令进行消息的发布,其中主要包括力的大小和方向。
[plain] view plain copy Background\ ColorB=0.12549
Background\ ColorG=0.12549
Background\ ColorR=0.12549
Camera\ Config=158.108 0.814789 0.619682 -1.57034
Camera\ Type=rviz::FixedOrientationOrthoViewController
Fixed\ Frame=/odom
Grid.Alpha=0.5
Grid.Cell\ Size=0.5
Grid.ColorB=0.941176
Grid.ColorG=0.941176
Grid.ColorR=0.941176
Grid.Enabled=1
Grid.Line\ Style=0
Grid.Line\ Width=0.03
Grid.Normal\ Cell\ Count=0
Grid.OffsetX=0
Grid.OffsetY=0
Grid.OffsetZ=0
Grid.Plane=0

全部评论(274)
德尔塔大雨淋
在melodic版本下通过git clone -b indigo-devel https://github.com/vanadiumlabs/arbotix_ros.git命令安装Arbotix,运行launch文件后报如下错误
SyntaxError: EOL while scanning string literal[arbotix-2] process has died [pid 8268, exit code 1, cmd /home/yzs/yzsabb_ws/src/arbotix_ros/arbotix_python/bin/arbotix_driver __name:=arbotix __log:=/home/yzs/.ros/log/fde40e1c-672a-11ec-871c-000c29992b0a/arbotix-2.log].log file: /home/yzs/.ros/log/fde40e1c-672a-11ec-871c-000c29992b0a/arbotix-2*.log
请问这个错误是因为版本python问题吗?
古月作者
现在不用下载源码安装了,可以直接:
sudo apt-get install ros-melodic-arbotix-ros
6195f0bcabd5f
svn checkout http://ros-by-example.googlecode.com/svn/trunk/rbx_vol_1
一直没反应,我已经搭建了梯子。
612e28c00b12c
古老师,您好,学习Arbotix仿真出现下边的问题,请问是因为python2.7和python3版本的问题吗?
File "/opt/ros/melodic/lib/python2.7/dist-packages/tf2_ros/__init__.py", line 38, in <module>
from tf2_py import *
File "/opt/ros/melodic/lib/python2.7/dist-packages/tf2_py/__init__.py", line 38, in <module>
from ._tf2 import *
ImportError: dynamic module does not define module export function (PyInit__tf2)
[arbotix-2] process has died [pid 2735, exit code 1, cmd /home/cx/catkin_ws/src/arbotix_ros/arbotix_python/bin/arbotix_driver __name:=arbotix __log:=/home/cx/.ros/log/c8772086-0a58-11ec-9f34-000c29bfcfae/arbotix-2.log].
log file: /home/cx/.ros/log/c8772086-0a58-11ec-9f34-000c29bfcfae/arbotix-2*.log
古月作者
612e28c00b12c
61387ab2c3159
古老师,您好,您的课程里面ppt上的arbotix源码可以用在melodic版本上吗?我也是和楼上一样的问题File "/home/lyf/catkin_ws2/src/arbotix_ros/arbotix_python/bin/arbotix_driver", line 30, in <module> import rospy File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module> from .client import spin, myargv, init_node, \ File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module> import roslib File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 50, in <module> from roslib.launcher import load_manifest # noqa: F401 File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/launcher.py", line 42, in <module> import rospkgModuleNotFoundError: No module named 'rospkg'[arbotix-2] process has died [pid 17175, exit code 1, cmd /home/lyf/catkin_ws2/src/arbotix_ros/arbotix_python/bin/arbotix_driver __name:=arbotix __log:=/home/lyf/.ros/log/fbb078ca-1080-11ec-8cde-0949f369f5a9/arbotix-2.log].log file: /home/lyf/.ros/log/fbb078ca-1080-11ec-8cde-0949f369f5a9/arbotix-2*.log================================================================================REQUIRED process [rviz-5] has died!process has finished cleanlylog file: /home/lyf/.ros/log/fbb078ca-1080-11ec-8cde-0949f369f5a9/rviz-5*.logInitiating shutdown!网上搜了很多,都解决不了。
古月作者
61387ab2c3159
谢谢古老师,通过这个命令重新加载arbotix已解决,git clone -b indigo-devel https://github.com/vanadiumlabs/arbotix_ros.git
61387ab2c3159
CtrlB时在墙上装门或者窗,直接就闪退掉了,然后报错[gazebo_gui-3] process has died [pid 25586, exit code 139, cmd /opt/ros/melodic/lib/gazebo_ros/gzclient __name:=gazebo_gui __log:=/home/lyf/.ros/log/af6aec4e-12b9-11ec-808a-74d83e48ecfc/gazebo_gui-3.log].log file: /home/lyf/.ros/log/af6aec4e-12b9-11ec-808a-74d83e48ecfc/gazebo_gui-3*.log不知道咋回事,网上说是gazebo版本问题,但是都已经是gazebo9了
德尔塔大雨淋
同学,你有遇到过这个问题吗
SyntaxError: EOL while scanning string literal[arbotix-2] process has died [pid 8268, exit code 1, cmd /home/yzs/yzsabb_ws/src/arbotix_ros/arbotix_python/bin/arbotix_driver __name:=arbotix __log:=/home/yzs/.ros/log/fde40e1c-672a-11ec-871c-000c29992b0a/arbotix-2.log].log file: /home/yzs/.ros/log/fde40e1c-672a-11ec-871c-000c29992b0a/arbotix-2*.log
Aurora borealis
svyj5_4887
615973debee0e
我也遇到了这个问题,最后发现是控制器没下载,执行命令sudo apt install ros-melodic-ros-controllers下载对应melodic版本的ros控制器
佚名
Theyearling
612e28c00b12c
我也出现了这种问题,请问怎么解决?
佚名
佚名
佚名
佚名
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
rmed7_4940
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
佚名
z5szr_0213
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
佚名
子辰
佚名
佚名
佚名
佚名
大老虎
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
ldw_ros
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
佚名
佚名
佚名
佚名
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
古月作者
古月作者
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名