浅谈实时伺服和Realtime Arm Servoing演示

Realtime servoing 即实时伺服。

一、概念:

        首先了解伺服的含义:

        伺服系统,又称随动系统,是用来精确地跟随或复现某个过程的反馈控制系统。伺服系统使物体的位置、方位、状态等输出被控量能够跟随输入目标(或给定值)的任意变化。

          机器人是一个机电一体化的设备,从控制的角度来说,机器人可分成四大部分即:执行机构、驱动系统、传感系统和控制系统。伺服属于执行机构。机器人通过伺服系统来执行操作。如实时视觉伺服系统就可以使用相机寻找物体,确定物体位姿,然后让机械臂移动到指定位置抓取目标。

二、背景:

                realtime-servo演示内容是展示伺服节点对奇点处理和碰撞检查,防止操作员破坏机器人

              机械臂的实时伺服目前支持Noetic和foxy版。二者都是属于跟随联动伺服。在rviz 上启动第一个仿真机械臂,第二个在gazebo上启动。当你操作Rviz上的机械臂时,gazebo上机械臂会跟随作相同的移动。

三、 Noetic中Realtime Arm Servoing 演示:                

       

                首先,需要安装ros noetic。安装教程:noetic/Installation/Ubuntu - ROS Wikihttp://wiki.ros.org/noetic/Installation/Ubuntu

                其次,安装和下载Movit源码。教程:Getting Started — moveit_tutorials Noetic documentationhttps://ros-planning.github.io/moveit_tutorials/doc/getting_started/getting_started.html

                问题1:在执行语句:git clone https://github.com/ros-planning/panda_moveit_config.git -b melodic-devel遇到目标已存在,且不为空时。直接在文件中删除那个文件即可。或者跳过这一步。据我检查。两个目标的内容一模一样。

                问题2:如果执行完语句:catkin config --extend /opt/ros/${ROS_DISTRO} --cmake-args -DCMAKE_BUILD_TYPE=Release。后结果和下图不一致,显示出红色的MISSING,那么你需要重头再来一遍教程。

                上面已经完成了工作空间和Movit源码的下载。

                下面开始详细的教程演示:

                1、复制源码:

cd ws_movit/src

git clone -b melodic-devel https://github.com/ros-industrial/universal_robot

安装依赖:

rosdep install -y --from-paths . --ignore-src --rosdistro $ROS_DISTRO

编译:

source devel/setup.bash
catkin build

打开四个终端,执行

source devel/setup.bash

启动机械臂:

roslaunch ur_gazebo ur5.launch
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true


        在启动的Rviz中移动机械臂A到某一位置之后,点击plan按钮,会有演示的机械臂B移动到机械臂A的位置与之重合。但这是虚拟的,只是演示以下跟随移动的场景。接着点击Plan&&exec后,就会让这种演示执行,并让Gazebo中的机械臂C跟随Riz中的机械臂B进行移动。

设置伺服命令:(100为100HZ,是以100HZ的速率发送新的命令。

rostopic pub -r 100 -s /servo_server/delta_twist_cmds geometry_msgs/TwistStamped "header: auto twist: linear: x: 0.0 y: 0.01 z: -0.01 angular: x: 0.0 y: 0.0 z: 0.0"

这是通过终端命令。向机械臂发送目标位置。

 

四:代码分析:

之前我们复制的代码包语句为:

git clone -b melodic-devel https://github.com/ros-industrial/universal_robot

所以,我们针对universal_robot包即可‘

主要的launch文件:

Gazebo文件:ur_gazebo ur5.launch

<?xml version="1.0"?>
<launch>
  <arg name="limited" default="false"  doc="If true, limits joint range [-PI, PI] on all joints." />
  <arg name="paused" default="false" doc="Starts gazebo in paused mode" />
  <arg name="gui" default="true" doc="Starts gazebo gui" />
  
  <!-- startup simulated world -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" default="worlds/empty.world"/>
    <arg name="paused" value="$(arg paused)"/>
    <arg name="gui" value="$(arg gui)"/>
  </include>

  <!-- send robot urdf to param server -->
  <include file="$(find ur_description)/launch/ur5_upload.launch">
    <arg name="limited" value="$(arg limited)"/>
  </include>

  <!-- push robot_description to factory and spawn robot in gazebo -->
  <node name="spawn_gazebo_model" pkg="gazebo_ros" type="spawn_model" args="-urdf -param robot_description -model robot -z 0.1" respawn="false" output="screen" />

  <include file="$(find ur_gazebo)/launch/controller_utils.launch"/>

  <!-- start this controller -->
  <rosparam file="$(find ur_gazebo)/controller/arm_controller_ur5.yaml" command="load"/>
  <node name="arm_controller_spawner" pkg="controller_manager" type="controller_manager" args="spawn arm_controller" respawn="false" output="screen"/>

  <!-- load other controllers -->
  <node name="ros_control_controller_manager" pkg="controller_manager" type="controller_manager" respawn="false" output="screen" args="load joint_group_position_controller" />

</launch>

可以看到,lanuch文件启动了三个节点。分别是spawn_gazebo_model、arm_controller_spawner、ros_control_controller_manager。

ur5_moveit_config ur5_moveit_planning_execution.launch

moveit2的实时伺服在碰撞检测做得比moveit要好。

在moveit中,机械臂会检测到前方物体并根据规划的路径检测碰撞,若可能碰撞,则降低速度直至为零。

Rviz中的文件:ur5_moveit_config moveit_rviz.launch

rostopic pub -r 100 -s /servo_server/delta_twist_cmds geometry_msgs/TwistStamped "header: auto
twist:
  linear:
    x: 0.0
    y: 0.01
    z: -0.01
  angular:
    x: 0.0
    y: 0.0
    z: 0.0"rostopic pub -r 100 -s /serrostopic pub -r 100 -s /servo_server/delta_twist_cmds geometry_msgs/TwistStamped "header: auto
twist:
  linear:
    x: 0.0
    y: 0.01
    z: -0.01
  angular:
    x: 0.0
    y: 0.0
    z: 0.0"vo_server/delta_twist_cmds geometry_msgs/TwistStamped "header: auto
twist:
  linear:
    x: 0.0
    y: 0.01
    z: -0.01
  angular:
    x: 0.0
    y: 0.0
    z: 0.0"

Rviz中启动了一个节点:$(anon rviz)????

五、foxy的实时伺服演示:

 第一步:首先你要安装ros2对应的ros版本Foxy。推荐不要乱来。我之前用的是官网教程,安装完很多错误。下面安装教程借鉴鱼香ros的教程。附上链接:鱼香Ros

        安装完之后,无错就可以跳过了。

如果有错,请继续,这里列举以下我遇到的错误:

错误1、bash设置出错,因为我之前先装的noetic,所以与后装的Bash冲突了:

解决:进入root:使用指令:

sudo su

输入密码即可。然后进入ros安装目录。如果你不知道安装在哪的话,使用命令:

printenv | grep -i ROS

一般在opt目录下。找到noetic目录,使用命令即可:

rm -r noetic

错误二:


第二步:官方教程链接:moveit2-foxy

        事实上,官网教程虐我千万遍,我待官网教程如初恋。直接说我遇到的问题:

问题一:rosdep update

怎么解决的????我忘了。下次遇到补上!!!!

问题二:执行命令:vcs import < moveit2_tutorials/moveit2_tutorials.repos时,无法识vcs关键字,因为没有装python3-vcstool,执行sudo apt install python3-vcstool;

第二个:执行完这句,失败。没有下载到,我使用的命令是:

git clone https://ghproxy.com/https://github.com/PickNikRobotics/rviz_visual_tools -b foxy-devel src/rviz_visual_tools/

问题三;rviz_visual_tools这个包无法被colcon build编译,试着去依次解决bug,后面的错误就直接说错误,也不提示错误在哪!!!

解决方法:待定

文件:https://github.com/PickNikRobotics/rviz_visual_tools.git

文件:GitHub - ros2/rviz: ROS 3D Robot Visualizer

演示:按照教程无错的运行出来后的界面如下,启动终端键盘输入控制,如图和视频 

四、总结

在noetic中,Gazebo中的地面是具备物理材质的,即实体。在Rviz中规划完的路径之后,如果有从地面下方转的路径,则会出错。

在foxy中,明显体现体现出moveit2的实时伺服在碰撞检测做得比moveit要好。

在moveit2中,机械臂会检测到前方物体并根据规划的路径检测碰撞,若可能碰撞,则降低速度直至为零。

最后,对其中的原理以及节点的通信,还在探索。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值