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_width: 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里程计坐标系,是一个全局坐标系;通过里程计记录机器人当前的运动位姿


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTExNTAxMDkyNzgucG5n.png


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


相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
4月前
|
自然语言处理 Kubernetes 机器人
基于OpenIM 实现聊天机器人功能
基于OpenIM 实现聊天机器人功能
108 0
|
2月前
|
机器人
量化交易机器人系统开发详情源码/功能步骤/需求设计/稳定版
he development of a quantitative trading robot system involves multiple aspects, including strategy design, data processing, and transaction execution. The following is a detailed overview of the development strategy for a quantitative trading robot system:
|
2月前
|
网络协议 机器人 中间件
单片机和FreeRTOS上跑机器人ROS的应用
单片机和FreeRTOS上跑机器人ROS的应用
75 0
|
3月前
|
传感器 数据采集 人工智能
植保机器人多功能性
植保机器人多功能性
41 2
|
4月前
|
传感器 机器人 C++
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
195 0
|
5月前
|
传感器 机器学习/深度学习 算法
利用STM32实现自平衡机器人功能与方法
利用STM32实现自平衡机器人功能与方法
37 0
|
6月前
|
传感器 机器人 C++
机器人操作系统ROS 编程开发--详细总结
最近工作涉及到自动驾驶的,需要学习ROS,学习中总结了一些知识点,分享给大家。 机器人操作系统ROS,是一种分布式处理框架(又名Nodes),ROS常用C++和python编程语言开发;(这里项目开发采用C++ 11版本)。ROS的点对点设计以及服务和节点管理器等机制,可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。ROS免费并且开源。
337 0
|
9月前
|
算法 机器人 API
量化交易机器人丨交易所系统开发详细流程/功能设计/源码实例
contract QuantitativeTradingBot is ERC20 { using Counters for Counters.Counter; Counters.Counter private _tokenIds; uint256 public constant InitialPrice = 1 ether;
|
9月前
|
JSON 算法 机器人
量化交易机器人软件平台功能模块开发源码定制合约类型
def get_data(self): response = requests.get(self.url, headers=self.headers) data = json.loads(response.text) return data
|
9月前
|
人工智能 机器人 UED
ai智能语音机器人系统都有什么功能?
第一、 智能AI电销机器人的并发量是多少啊?别人可以同时呼出几个? 通常情况下,智能AI电销机器人可以根据客户的需要选择客户需要的外呼并发量,最大可以实现一条宽带,一个主机,可以同时保持客户使用的灵活性,即能兼顾效率,也能兼顾成本控制。 第二、可以转人工?对话时可以打断机器人吗? 转人工和中途打断都是可以的,这些都是电话机器人的基本功能,个人不建议您用转人工的功能,因为每次转人工,机器人都要等到这通转接人工通话结束后才会进行下一通的呼出,这就大大降低了机器人的拨打效率了。所以留给后续人工跟进是最合理的。打断功能是客户说任何内容都能打断的,为了保证一个良好的用户体验度,一些无意义的语气

推荐镜像

更多