Arm Mover

先完成上一篇任务。

至此,已经完成了一个节点的编写。但在我们进入运动学和下一个手臂项目之前,我们有以下内容需学习:
这里写图片描述

为了获得对上述的理解,您将会编写另一个名为arm_mover的节点。

arm_mover的描述

在许多方面,arm_moversimple_mover相似。像simple_mover一样,它负责指挥手臂移动。然而,arm_mover节点不是简单地命令arm遵循预定的轨迹,而是提供服务move_arm,其允许系统中的其他节点发送movement_commands。除了允许通过服务接口移动外,arm_mover还允许通过使用参数来配置最小和最大关节角度。

创建一个新的服务定义

传递给服务的请求以及从服务接收到的响应。请求和响应消息类型的定义包含在位于软件包根目录下的srv目录中的.srv文件中。

simple_arm定义一个新服务。我们就称之为GoToPosition:

cd ~/catkin_ws/src/simple_arm/
mkdir srv
cd srv
gedit GoToPosition.srv

然后你需要编辑GoToPosition.srv文件,大致包含以下内容:

float64 joint_1
float64 joint_2
---
duration time_elapsed

服务总是包含两部分,用分隔。第一部分定义请求信息。这里,请求包含两个float64字段,每个simple_arm的关节都有一个字段。第二部分包含服务响应。该响应仅包含一个字段time_elapsed。time_elapsed字段的类型是持续时间,并负责指示手臂执行移动所用的时间。

注意:定义自定义消息类型非常相似,唯一的区别是消息定义位于程序包根目录的msg目录中,具有“.msg”扩展名而不是.srv,并且不包含“—” 分隔。

创建信息和服务的更多消息在这里这里

修改文件CMakeLists.txt

为了让catkin生成允许您在代码中使用消息的python模块或C ++库,您必须首先修改simple_arm的CMakeLists.txt(~/catkin_ws/src/simple_arm/CMakeLists.txt)

CMake是catkin的基础构建工具,而CMakeLists.txt不过是catkin使用的CMake脚本。如果您熟悉GNU make和makefiles的概念,这是一个类似的概念。

第一步:确保find_package()宏将std_msgsmessage_generation列为必需的包。
find_package()宏如下:

find_package(catkin REQUIRED COMPONENTS
        std_msgs
        message_generation
)

正如名称可能暗示的那样,std_msgs包中包含所有基本的消息类型,message_generation为所有支持的语言(cpp,lisp,python,javascript)生成消息库。

注意:在您的CMakeLists.txt中,您也可以将controller_manager列为必需的软件包。实际上这个包不是必需的。它只是作为在上一课中展示构建失败的手段而添加的。如果您愿意,您可以从必需组件列表中删除它。

第二步:取消注释掉的add_service_files()宏,使其看起来像这样:

## Generate services in the 'srv' folder
add_service_files(
   FILES
   GoToPosition.srv
)


这告诉catkin要生成代码的文件。

最后:请确保generate_messages()宏未被注释,如下所示:

generate_messages(
   DEPENDENCIES
   std_msgs  # Or other packages containing msgs
)

正是这个宏实际负责生成代码。
更多关于CMakeLists.txt内容在这里

修改package.xml

现在已经涵盖了CMakeLists.txt文件,您应该可以在技术上构建项目。 但是,还有一个需要修改的文件package.xmlpackage.xml负责定义包的许多属性,如包的名称,版本号,作者,维护者和依赖关系。

现在,我们担心依赖关系。 在上一课中,您了解了构建时依赖性和运行时包依赖性。 当rosdep正在搜索这些依赖关系时,它就是正在被解析的package.xml文件。 我们添加message_generationmessage_runtime依赖关系。

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>message_generation</build_depend>

  <run_depend>controller_manager</run_depend>
  <run_depend>effort_controllers</run_depend>
  <run_depend>gazebo_plugins</run_depend>
  <run_depend>gazebo_ros</run_depend>
  <run_depend>gazebo_ros_control</run_depend>
  <run_depend>joint_state_controller</run_depend>
  <run_depend>joint_state_publisher</run_depend>
  <run_depend>robot_state_publisher</run_depend>
  <run_depend>message_runtime</run_depend>
  <run_depend>xacro</run_depend>

您现在已准备好构建包装! 有关package.xml的更多信息,请查看ROS Wiki

构建包

如果您成功构建工作区,现在应该会发现包含用于新服务GoToPosition的模块的python包已经在devel目录下创建。

 cd ~/catkin_ws
 catkin_make
 cd devel/lib/python2.7/dist-packages
 ls

在找到新创建的setup.bash之后,新的simple_arm软件包现在已经成为您的PYTHONPATH环境变量的一部分,并且可以使用!

env | grep PYTHONPATH

创建空的arm_mover节点脚本

创建arm_mover节点所用的步骤与创建simple_mover脚本所用的步骤完全相同,但脚本本身的实际名称除外。

cd ~/catkin_ws
cd src/simple_arm/scripts
touch arm_mover
chmod u+x arm_mover

您现在可以使用您最喜爱的文本编辑器编辑空的arm_mover脚本。

<上一篇>
<下一篇>

猜你喜欢

转载自blog.csdn.net/u011280600/article/details/80273064