赞
踩
上篇文章我们介绍了URDF文件的导出,本文将继上文介绍安装完导出URDF文件后,如何在机器人操作系统(ROS)中显示,并且让它动起来。
目录
前言
RViz机器人模型可视化
launch启动RViz配置文件
Arbotix控制机器人模型运动
ROS中提供了Gazebo与RViz两种仿真软件,本文将机器人模型在RViz仿真环境中可视化,同时利用Arbotix功能包使机器人完成圆周运动。
Ctrl+Alt+T打开终端分别输入:
- mkdir -p helloworld/src
- cd helloworld
- catkin_make
其中robot_ws为我们命名的工作空间名称,catkin_make是一个编译命令,该编译命令会帮我们创建好我们所需的文件并输出若干日志,成功结果如下:
继续在该终端输入:【启动VS Code】
code .
右键一级src目录选择Create Catkin Package【创建功能包】
输入功能包名称【robot】再输入依赖【urdf xacro】创建结果如下
step1~2若出现问题请学习参考ROS入门教程(三)—— 用C++实现Hello world
将刚新建的robot功能包删除,替换为我们利用sw2urdf插件导出的robot功能包,如下所示:
成功结果如下,功能包中包含display.launch文件与robot.urdf文件:
为了美观可以将base_link ,left_wheel_link 与right_wheel_link的color标签进行修改,即将34行改为"1 1 1 1",将74行与132行改为"0.412 0.412 0.412 1",结果如下所示:【Ctrl+S保存】
按Ctrl+Shift+B执行编译命令,结果如下:
按Ctrl+Shift+~启动命令行分别输入:
- source ./devel/setup.bash
- roslaunch robot display.launch
结果如下所示:
这样我们就成功的在RViz中显示了我们的机器人模型,实现了机器人模型的可视化。
读者可以发现,每次打开RViz都需要添加机器人模型,重新设置大地坐标系这实在是过于复杂,RViz提供了配置文件以适用于不必每次打开都要重新配置RVi:
按Ctrl+Shift+S保存文件至robot功能包中的config文件夹中,命名为robot.rviz,如下所示:
将display.launch修改为以下:
- <launch>
- <arg
- name="model" />
- <param
- name="robot_description"
- textfile="$(find robot)/urdf/robot.urdf" />
- <node
- name="joint_state_publisher_gui"
- pkg="joint_state_publisher_gui"
- type="joint_state_publisher_gui" />
- <node
- name="robot_state_publisher"
- pkg="robot_state_publisher"
- type="robot_state_publisher" />
- <node
- name="rviz"
- pkg="rviz"
- type="rviz"
- args="-d $(find robot)/config/robot.rviz" />
- </launch>
这样每次运行该launch文件去启动RViz时就无需添加机器人模型与修改大地坐标了。
按Ctrl+Alt+T打开终端输入:
sudo apt install ros-melodic-arbotix
在robot功能包下config文件夹中新建文件robot.yaml输入以下:
- # 该文件是控制器配置,一个机器人模型可能有多个控制器,比如: 底盘、机械臂、夹持器(机械手)....
- # 因此,根 name 是 controller
- controllers: {
- # 单控制器设置
- base_controller: {
- #类型: 差速控制器
- type: diff_controller,
- #参考坐标
- base_frame_id: base_footprint,
- #两个轮子之间的间距
- base_width: 0.2,
- #控制频率
- ticks_meter: 2000,
- #PID控制参数,使机器人车轮快速达到预期速度
- Kp: 12,
- Kd: 12,
- Ki: 0,
- Ko: 50,
- #加速限制
- accel_limit: 1.0
- }
- }
结果如下所示:
将robot功能包下urdf文件夹中的robot.urdf修改为以下:
- <?xml version="1.0" encoding="utf-8"?>
- <!-- This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com)
- Commit Version: 1.6.0-4-g7f85cfe Build Version: 1.6.7995.38578
- For more information, please see http://wiki.ros.org/sw_urdf_exporter -->
- <robot
- name="robot">
- <link
- name="base_footprint">
- <visual>
- <geometry>
- <sphere
- radius="0.001" />
- </geometry>
- <material
- name="">
- <color
- rgba="0 0 0 0" />
- </material>
- </visual>
- </link>
- <link
- name="base_link">
- <inertial>
- <origin
- xyz="0.00274864430655652 -2.24752503383601E-12 -0.000346282886867658"
- rpy="0 0 0" />
- <mass
- value="0.778495474667087" />
- <inertia
- ixx="0.00463138328383945"
- ixy="1.02152303406231E-11"
- ixz="1.71833341358258E-06"
- iyy="0.00512425828608217"
- iyz="4.71562842897777E-15"
- izz="0.00973908576728839" />
- </inertial>
- <visual>
- <origin
- xyz="0 0 0"
- rpy="0 0 0" />
- <geometry>
- <mesh
- filename="package://robot/meshes/base_link.STL" />
- </geometry>
- <material
- name="">
- <color
- rgba="1 1 1 1" />
- </material>
- </visual>
- <collision>
- <origin
- xyz="0 0 0"
- rpy="0 0 0" />
- <geometry>
- <mesh
- filename="package://robot/meshes/base_link.STL" />
- </geometry>
- </collision>
- </link>
- <joint
- name="base_link2base_footprint"
- type="fixed">
- <parent
- link="base_footprint" />
- <child
- link="base_link" />
- <origin
- xyz="0 0 0.035" />
- </joint>
- <link
- name="right_wheel_link">
- <inertial>
- <origin
- xyz="-4.81191200834309E-07 0.000476524651415774 1.07685290749495E-07"
- rpy="0 0 0" />
- <mass
- value="0.0474080147774195" />
- <inertia
- ixx="1.81764508915246E-05"
- ixy="1.12230898220564E-10"
- ixz="9.35470362535892E-11"
- iyy="3.36082622230467E-05"
- iyz="-1.04867422246077E-10"
- izz="1.81763222441443E-05" />
- </inertial>
- <visual>
- <origin
- xyz="0 0 0"
- rpy="0 0 0" />
- <geometry>
- <mesh
- filename="package://robot/meshes/right_wheel_link.STL" />
- </geometry>
- <material
- name="">
- <color
- rgba="0.412 0.412 0.412 1" />
- </material>
- </visual>
- <collision>
- <origin
- xyz="0 0 0"
- rpy="0 0 0" />
- <geometry>
- <mesh
- filename="package://robot/meshes/right_wheel_link.STL" />
- </geometry>
- </collision>
- </link>
- <joint
- name="right_wheel_joint"
- type="continuous">
- <origin
- xyz="0 0.09545 0"
- rpy="0 0 0" />
- <parent
- link="base_link" />
- <child
- link="right_wheel_link" />
- <axis
- xyz="0 1 0" />
- <limit
- lower="-3.14"
- upper="3.14"
- effort="0"
- velocity="0" />
- </joint>
- <link
- name="left_wheel_link">
- <inertial>
- <origin
- xyz="4.90089018379602E-07 -0.000476524651415788 5.43493115676996E-08"
- rpy="0 0 0" />
- <mass
- value="0.0474080147774195" />
- <inertia
- ixx="1.81764289862563E-05"
- ixy="1.23038640102816E-10"
- ixz="-1.05305567709027E-10"
- iyy="3.36082622230468E-05"
- iyz="9.19480494971147E-11"
- izz="1.81763441494127E-05" />
- </inertial>
- <visual>
- <origin
- xyz="0 0 0"
- rpy="0 0 0" />
- <geometry>
- <mesh
- filename="package://robot/meshes/left_wheel_link.STL" />
- </geometry>
- <material
- name="">
- <color
- rgba="0.412 0.412 0.412 1" />
- </material>
- </visual>
- <collision>
- <origin
- xyz="0 0 0"
- rpy="0 0 0" />
- <geometry>
- <mesh
- filename="package://robot/meshes/left_wheel_link.STL" />
- </geometry>
- </collision>
- </link>
- <joint
- name="left_wheel_joint"
- type="continuous">
- <origin
- xyz="0 -0.09545 0"
- rpy="0 0 0" />
- <parent
- link="base_link" />
- <child
- link="left_wheel_link" />
- <axis
- xyz="0 1 0" />
- <limit
- lower="-3.14"
- upper="3.14"
- effort="0"
- velocity="0" />
- </joint>
- </robot>
其中与之前的URDF文件相比,增加了部件base_footprint,将其与base_link连接,读者可以发现,增加base_footprint后机器人正好基于地面了,相比与之前更加的合理,同时也为后续的里程计提供了便利,对比结果如下:
在此建议读者以后每次建立URDF文件都添加部件base_footprint。
将robot功能包下launch文件夹中的display.launch修改为以下:
- <launch>
- <arg
- name="model" />
- <param
- name="robot_description"
- textfile="$(find robot)/urdf/robot.urdf" />
- <node
- name="joint_state_publisher_gui"
- pkg="joint_state_publisher_gui"
- type="joint_state_publisher_gui" />
- <node
- name="robot_state_publisher"
- pkg="robot_state_publisher"
- type="robot_state_publisher" />
- <node
- name="rviz"
- pkg="rviz"
- type="rviz"
- args="-d $(find robot)/config/robot.rviz" />
- <node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
- <rosparam file="$(find robot)/config/robot.yaml" command="load" />
- <param name="sim" value="true" />
- </node>
- </launch>
在VS Code集成命令行输入:
- source ./devel/setup.bash
- roslaunch robot display.launch
修改大地坐标为odom并添加odom里程计至RViz中:
按Ctrl+Alt+T打开终端输入:
- rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear:
- x: 1.0
- y: 0.0
- z: 0.0
- angular:
- x: 0.0
- y: 0.0
- z: 1.0"
该代码段的旨在10HZ 的频率循环发送运动信息至订阅者,成功结果如下:
到这里我们就完成了通过Arbotix功能包实现了机器人模型的运动。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。