Python编程ROS机器人

机器人操作系统 (ROS) 是研究和工业中最受欢迎的机器人软件框架之一。它具有多种功能,可以在机器人中实现不同的功能,而无需从头开始实现。

首先向您展示 ROS 的基础知识,以便您了解差分机器人的基础知识。 然后,您将了解机器人建模以及如何使用 ROS 对其进行设计和模拟。 接下来,我们将设计机器人硬件和接口执行器。 然后,您将学习使用 ROS 配置和编程深度传感器和 LIDAR。 最后,您将使用 Qt 框架为您的机器人创建一个 GUI。

机器人操作系统入门

了解差动机器人基础知识

差动驱动机器人建模

使用ROS模拟差动驱动机器人

代码的第一部分调用upload_model.launch文件,创建robot_description参数。 如果它成功,那么它将在 Gazebo 开始一个空世界:

<launch> 
  <include file='$(find chefbot_description)/launch/upload_model.launch' /> 
 
  <include file='$(find gazebo_ros)/launch/empty_world.launch'> 
    <arg name='paused' value='false'/> 
    <arg name='use_sim_time' value='true'/> 
    <arg name='gui' value='true'/> 
    <arg name='recording' value='false'/> 
    <arg name='debug' value='false'/> 
  include>

那么 robot_description 参数中的机器人模型在Gazebo中是如何显示的呢? 启动文件中的以下代码片段完成了这项工作:

<node name='spawn_urdf' pkg='gazebo_ros' type='spawn_model' args='-param robot_description -urdf -z 0.1 -model chefbot' />

在gazebo_ros 包中名为spawn_model 的节点,将读取robot_description 并在Gazebo 中生成模型。 -z 0.1 参数表示要放置在 Gazebo 中的模型高度。 如果高度为 0.1,模型将在高度为 0.1 处生成。 如果启用重力,则模型将掉落到地面。 我们可以根据需要更改此参数。 -model 参数是 Gazebo 中机器人模型的名称。 该节点将解析 robots_description 中的所有 Gazebo 参数,并在 Gazebo 中启动模拟。

生成模型后,我们可以使用以下代码行发布机器人转换 (tf):

<node pkg='robot_state_publisher' type='robot_state_publisher' name='robot_state_publisher'> 
    <param name='publish_frequency' type='double' value='30.0' /> 
  node>

我们以 30 Hz 的频率发布 ROS tf。

深度图像到激光扫描转换

机器人上的深度传感器提供环境的 3D 坐标。 为了实现自主导航,我们可以使用这些数据,创建 3D 地图。 除此之外,还有不同的技术可以创建环境地图。 我们为这个机器人使用的一种算法称为 gmapping (http://wiki.ros.org/gmapping)。 gmapping 算法主要使用激光扫描,创建地图,但在我们的例子中,我们从传感器获得了完整的 3D 点云。 我们可以通过获取深度数据的切片,转换激光扫描的 3D 深度数据。 此启动文件中的以下 nodelet (http://wiki.ros.org/nodelet) 能够接收深度数据并将其转换为激光扫描数据:

<node pkg='nodelet' type='nodelet' name='laserscan_nodelet_manager' args='manager'/> 
  <node pkg='nodelet' type='nodelet' name='depthimage_to_laserscan' 
        args='load depthimage_to_laserscan/DepthImageToLaserScanNodelet laserscan_nodelet_manager'> 
    <param name='scan_height' value='10'/> 
    <param name='output_frame_id' value='/camera_depth_frame'/> 
    <param name='range_min' value='0.45'/> 
    <remap from='image' to='/camera/depth/image_raw'/> 
    <remap from='scan' to='/scan'/> 
  node> 
launch>

nodelet 是一种特殊的 ROS 节点,具有称为零复制传输的属性,这意味着,它不需要网络带宽来订阅主题。 这将使从深度图像 (sensor_msgs/Image) 到激光扫描 (sensor_msgs/LaserScan) 的转换更快、更高效。 nodelet 的其他属性之一是它可以作为插件动态加载。 我们还可以设置这个 nodelet 的各种属性,例如 range_min、图像主题的名称和输出激光主题。

用于 Gazebo 模拟的 URDF 标签和插件

我们已经在 Gazebo 中看到了模拟机器人。 现在,我们将更详细地查看, URDF 中与模拟相关的标签以及在 URDF 模型中,包含的各种插件。

大多数 Gazebo 特定的标签都在文件中。 此外,在模拟中,使用了中的一些标签。 在中定义 和 标签对于我们的模拟非常重要。 URDF 中的 标签,定义了机器人链接周围的边界,主要用于检测特定链接的碰撞,而 标签,包含链接的质量和转动惯量。 下面是 标签定义的一个例子:

<inertial> 
        <mass value='0.564' /> 
        <origin xyz='0 0 0' /> 
        <inertia ixx='0.003881243' ixy='0.0' ixz='0.0' 
                 iyy='0.000498940' iyz='0.0' 
                 izz='0.003879257' /> 
      inertial>

设计智能机器人硬件和电路

机器人控制器连接执行器和传感器

视觉传感器与ROS接口

构建智能机器人硬件和软件集成

使用Qt和Python设计机器人图形用户界面

源代码

详情参阅 - 亚图跨际

你可能感兴趣的:(交叉知识,Python,嵌入式,Python,ROS,机器人,Gazebo,激光雷达)