zoukankan      html  css  js  c++  java
  • ROS中阶笔记(三):机器人仿真—ArbotiX+rviz功能仿真

    ROS中阶笔记(三):机器人仿真—ArbotiX+rviz功能仿真

    01 机器人URDF模型优化—xacro模型文件

    1.1 xacro模型文件

    URDF模型的进化版本—xacro模型文件

    xacro里面的模型仍然是urdf模型,但是从整个模型的管理上发生了很大的变化

    • 精简模型代码
      1、创建宏定义
      2、文件包含
    • 提供可编程接口
      1、常量
      2、变量
      3、数学计算
      4、条件语句

    1.2 xacro使用方法

    1.常量定义

    <xacro:property name="M_PI" value="3.14159"/>
    

    2.常量使用

    <origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
    

    3.数学计算

    注意:所有数学运算都会转换成浮点数进行,以保证运算精度

    <origin xyz="0 ${(motor_length+wheel_length)/2} 0" rpy="0 0 0"/>
    

    4.宏定义

    <xacro:macro name="name" params="A B C">
       ......                                      # ······填写具体模型定义(类似函数内容)
    </xacro:macro>
    

    5.宏调用

    <name A="A_value" B="B_value" C="C_value" />
    

    6.文件包含

    <xacro:include filename="$(find mbot_descripiton)/urdf/xacro/mbot_base.xacro" />
    

    1.3 模型显示

    ~/catkin_ws/src/mbot_description/urdf/xacro 下 mbot_base.xacro文件不能单独运行,还需要实现一个上层文件mbot.xacro来实现;

    方法一: 将xacro文件转化成URDF文件后显示 (不常用)

    在~/catkin_ws/src/mbot_description/urdf/xacro 下,运行下面命令:

    $ rosrun xacro xacro.py mbot.xacro>mbot.urdf
    
    # 出现警告忽略,看到生成mbot.urdf文件
    

    方法二:直接调用xacro文件解析器,解析成机器人模型 (常用)

    在~/catkin_ws/src/mbot_description/launch/xacro下 可以看到display_mbot_base_xacro.launch文件

    	<arg name="model" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/mbot.xacro'" />
    	<arg name="gui" default="true" />
    
    	<param name="robot_description" command="$(arg model)" />
    
    
    $ roslaunch mbot_description display_mbot_base_xacro.launch
    

    02 ArbotiX+rviz功能仿真

    参见:http://wiki.ros.org/arbotix

    2.1 Arboti简介

    • ArbotiX是一款控制电机、舵机的硬件控制板;
    • 提供了相应的ROS功能包;
    • 提供了一个差速控制器,通过接收速度控制指令,更新机器人的里程计状态。

    2.2 安装Arbotix

    arbotix_ros文件放在catkin_ws/src/文件夹下:

    $ cd ~/catkin_ws/src
    $ git clone https://github.com/vanadiumlabs/arbotix_ros.git  #放在catkin_ws/src/文件夹下
    $ cd ~/catkin_ws 
    
    # 下面两种方法编译
    $ catkin_make                # 编译arbotix_ros
    $ catkin_make -DCATKIN_WHITELIST_PACKAGES="arbotix_ros"
    

    注意:arbotix_ros中的python文件需要添加可执行权限;

    python文件添加可执行权限,鼠标右键—属性—权限—执行:√允许作为程序执行文件(E);

    2.3 配置ArbotiX控制器

    第一步:配置launch文件

    ~/catkin_ws/src/mbot_description/launch/xacro/下arbotix_mbot_with_camera_xacro.launch

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

    <launch>
    	<arg name="model" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/mbot_with_camera.xacro'" />
    	<arg name="gui" default="false" />
    
    	<param name="robot_description" command="$(arg model)" />
    
        <!-- 设置GUI参数,显示关节控制插件 -->
    	<param name="use_gui" value="$(arg gui)"/>
    
          <!-- 启动 arbotix_python 节点-->
    	<node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
    	         <!-- 加载控制器参数-->
            <rosparam file="$(find mbot_description)/config/fake_mbot_arbotix.yaml" command="load" />
            <param name="sim" value="true"/>
        </node>
    
        <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
    	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
    
    	<!-- 运行robot_state_publisher节点,发布tf  -->
    	<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
    
        <!-- 运行rviz可视化界面 -->
    	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_arbotix.rviz" required="true" />
    
    </launch>
    
    

    第二步:创建配置文件

    ~/catkin_ws/src/mbot_description/config/下fake_mbot_arbotix.yaml

    这是一个参数配置文件,定义了一个controller。包括了控制器类型、控制的车体坐标系、轮子的间距、控制频率、PID以及加速度等参数

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

    第三步:启动仿真器

    $ roslaunch mbot_description arbotix_mbot_with_camera_xacro.launch 
    

    第四步:启动键盘控制(再开一个新终端)

    $ roslaunch mbot_teleop mbot_teleop.launch
    
    # i小车向前,  u转向···
    

    odom里程计坐标系,是一个全局坐标系;通过里程计记录机器人当前的运动位姿

    2.4 ArbotiX+rviz—导航仿真示例

    参考:《ROS by example》

    1.安装一下turtlebot,输入下列安装命令:

    $ sudo apt-get install ros-kinetic-turtlebot-*
    

    2.安装arbotix模拟器:

    $ sudo apt-get install ros-kinetic-arbotix-*
    

    这里没有执行上面的rviz的安装是因为在安装ROS的时候默认已经安装好了,不需要重复安装。

    3.安装ROS by example书配套的代码包rbx1

    cd ~/catkin_ws/src
     
    git clone https://github.com/pirobot/rbx1.git
     
    cd ..
     
    catkin_make
    

    4.分别在三个终端运行以下代码:

    $ roslaunch rbx1_bringup fake_turtlebot.launch 
    $ roslaunch rbx1_nav fake_amcl.launch map:=test_map.yaml
    $ rosrun rviz rviz -d `rospack find rbx1_nav`/nav.rviz
    

    运行结果:点击rviz画面中的2D Nav Goal ,之后随便标记地图中的一点,小车可以根据路径规划进行导航,到达目的地。

    03 问题解决

    3.1 问题一:ImportError: No module named arbotix_msgs.msg

    2.3 配置ArbotiX控制器中

    第三步:启动仿真器

    $ roslaunch mbot_description arbotix_mbot_with_camera_xacro.launch 
    

    这里在开启上一个launch文件的时候出现了一个问题:缺少依赖项

    ImportError: No module named arbotix_msgs.msg        
    

    解决方法:

    不要 sudo apt-get安装,把源码包下载下来,编译;

    顺便刷新下空间

    $ source ~/catkin_ws/devel/setup.bash
    

    04 参考资料

    ROS xacro使用方法: http://wiki.ros.org/xacro

    古月居:https://www.guyuehome.com/237

    微信公众号:喵哥解说
    公众号介绍:主要研究机器学习、计算机视觉、深度学习、ROS等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!同时还有1200G的Python视频和书籍资料等你领取!!!

  • 相关阅读:
    设计模式之中介者模式
    解释器模式(行为模式)
    进程池Pool
    Process子类
    multiprocessing
    random
    re
    time和datetime
    logging 日志
    hashlib
  • 原文地址:https://www.cnblogs.com/IT-cute/p/12990290.html
Copyright © 2011-2022 走看看