2 ROS2机器人运动控制

机器人运动控制的实现

实验介绍

​ 随着机器人技术的飞速发展,ROS2(Robot Operating System 2)作为新一代开源机器人操作系统,逐渐成为研究和开发领域的热门选择。ROS2不仅提供了丰富的工具和库,还具备强大的硬件抽象、进程间通信和包管理等功能,极大地简化了机器人系统的开发和集成。

​ 本实验旨在通过ROS2平台,实现一个机器人运动控制系统。该系统能够接收外部指令,通过传感器获取环境信息,并实时调整机器人的运动状态。通过这一实验,学员将深入理解ROS2的基本架构和运行机制,掌握ROS2在机器人运动控制中的实际应用。

实验过程

​ 下面将会实现一个发布者节点,向“/cmd_vel”话题发布 geometrymsgs::Twist 类型的消息包,以实现对机器人运动速度的控制。

编写速度控制程序

​ 首先在工作空间中创建一个软件包,打开一个新的终端窗口,输入如下指令,进人 ROS2 工作空间。

cd~/ros2 ws/src/

​ 然后用如下指令创建一个名为“vel_ pkg”的软件包,

ros2 pkg create vel_pkg

​ 创建好软件包后,在这个软件包中创建一个节点。

1.编写节点代码

​ 先创建这个节点的源码文件。,在VSCode的[资源管理器]中找到[vel_pkg]软件包,用鼠标右键单击它的[src]子目录,在弹出的快捷菜单中选择[新建文件]。此时会提示输入文件名,,输入“vel_node.cpp”,然后按[Enter]键创建文件。

​ 下面编写这个源码文件的内容。

#include <rclcpp/rclcpp.hpp>
#include <geometry_msgs/msg/twist.hpp>

int main(int argc, char** argv)
{
  rclcpp::init(argc, argv);

  auto node = std::make_shared<rclcpp::Node>("velocity_command_node");

  auto vel_pub = node->create_publisher<geometry_msgs::msg::Twist>("/cmd_vel", 10);

  geometry_msgs::msg::Twist vel_msg;
  vel_msg.linear.x = 0.1;
  vel_msg.linear.y = 0.0;
  vel_msg.linear.z = 0.0;
  vel_msg.angular.x = 0.0;
  vel_msg.angular.y = 0.0;
  vel_msg.angular.z = 0.0;

  rclcpp::Rate loop_rate(30);
  while (rclcpp::ok())
  {
    vel_pub->publish(vel_msg);
    loop_rate.sleep();
  }

  rclcpp::shutdown();

  return 0;
}

​ 上述代码可以从 wpr_simulation2的例程文件中找到。如果编译报错,可以与 wpr_simulation2 \demo_cpp\4_velocity_command.cpp 文件中的代码进行比对。

​ 代码编写完毕后,需要进行保存。保存成功后,编辑界面文件名后面的圆点符号会变成一个叉符号。

2.设置编译规则

​ 节点源码的编译规则写在vel_pkg的CMakeLists.txt文件里。在 VSCode 中打开这个文件,在这个文件里添加节点的编译规则。首先使用如下代码寻找节点代码中用到的rclcpp 和消息类型等依赖项。

find_package(rclcpp REQUIRED) 
find_package(geometry_msgs REQUIRED)

​ 然后使用如下代码添加节点源码的编译规则。

add_executable(vel_node src/vel_node.cpp)
ament_target_dependencies(vel_node "rclcpp" "geometry_msgs")

​ 最后使用如下代码添加节点编译完成后的安装规则。

install(TARGETS  vel_node
DESTINATION  lib/${PROJECT_NAME})

​ 这些内容可以从 wpr_simulation2的例程文件中找到。如果编译报错,可以与 wpr_simulatien2 \demo_cmakelists \4_vel_node.txt文件中的代码进行比对。

​ 上述规则添加完毕后,一定要保存文件,否则规则无法生效。

3.修改软件包信息

​ 在VSCode 中打开 vel_pkg软件包的package.xml文件,使用如下代码添加依赖项信息

<depend>rclcpp</depend>
<depend>geometry_msgs</depend>

​ 这些内容可以从 wpr_simulation2 的例程文件中找到。如果编译报错,可以与 wpr_simulation2\demo_package\4_vel_node.xml 文件中的代码进行比对。

​ 文件修改后,一定要保存文件,否则新的包信息无法生效

4.编译软件包

​ 修改完上述文件后,打开终端窗口,执行如下指令,进入工作空间

cd ~/ros2_ws

​ 然后执行如下指令,对工作空间中的所有软件包进行编译

colcon build
5.节点自测

​ 节点代码编译完成后,可以先进行自测,以便发现单词拼写之类的小失误。在自测前,需要加载当前工作空间中的设置参数,这样ros2指令才能找到刚才编译后的软件包和节点文件。保持终端的当前路径依然在工作空间目录ros2_ws中,然后执行如下指令。

source install/setup.bash

​ 然后执行如下指令运行刚才编写的节点

ros2 run vel_pkg vel_node

​ 按组合键[Ctrl+Shift+O],将终端分为上、下两个子窗口,在新的窗口中执行如下指令,查看当前正在活跃的话题列表

ros2 topic list

​ 执行后会看到如下图 所示的话题列表。

在这里插入图片描述

​ 话题列表中的“/cmd_vel”就是前面编写的vel_node节点发布的话题。这时再检查一下话题里发布的消息包是否正确,在下面的终端窗口中执行如下指令,

ros2 topic echo /cmd_vel

​ 按[Enter]键后,可以看到下面的终端窗口在不断刷新话题中消息包的数据内容,如下图所示。

​ 可以看到话题中的消息包在不断刷新,消息包的linear部分的x为0.1,其他数值都为0,与节点代码中的描述一致,节点自测通过。

在这里插入图片描述

仿真运行速度控制程序

​ 下面来运行前面编写的节点。在运行前,需要确认已经按照之前下载了wprsimulaten2仿真项目。然后,先加载当前工作空间中的环境设置。保持终端的当前路径依然在工作空间目录ros2_ws中,执行如下指令。

source install/setup.bash

​ 接下来启动带有机器人的仿真环境。执行如下指令,

ros2 launch wpr_simulation2 wpb_simple.launch.py

​ 这时会启动仿真程序的图形窗口,如下图所示,里面有一台仿真机器人,面对一个书柜。

在这里插入图片描述

​ 接下来运行刚才编写的速度控制节点vel_node。在Terminator 终端中按组合键[Ctrl+Shift+O],将终端分为上、下两个子窗口。

​ 然后,在下面的新窗口中先运行如下指令,加载环境变量,

source install/setup.bash

​ 新窗口加载好环境变量后,使用如下指令运行刚才编写的vel_node节点,

ros2 run vel_pkg vel_node

​ 节点运行起来之后,切换到刚才的仿真窗口。可以看到机器人以0.1m/s的速度向前移动,速度控制功能成功实现。

在这里插入图片描述

实验总结

​ 在本次《机器人运动控制的实现》实验中,我们成功地利用ROS2(Robot Operating System 2)这一先进的开源机器人操作系统,设计并实现了一个机器人运动控制系统。通过这一实践过程,我们不仅加深了对ROS2基本架构和运行机制的理解,还掌握了ROS2在机器人运动控制中的具体应用方法。

​ 在实验过程中,我们首先创建了一个发布者节点,该节点能够向“/cmd_vel”话题发布geometry_msgs::Twist类型的消息包,从而实现对机器人运动速度的控制。我们详细记录了从创建软件包、编写节点代码、设置编译规则、修改软件包信息,到编译软件包和节点自测的每一步操作。特别是在编写节点代码时,我们仔细参考了wpr_simulation2的例程文件,确保了代码的正确性和可运行性。

​ 在实验过程中,我们首先创建了一个发布者节点,该节点能够向“/cmd_vel”话题发布geometry_msgs::Twist类型的消息包,从而实现对机器人运动速度的控制。我们详细记录了从创建软件包、编写节点代码、设置编译规则、修改软件包信息,到编译软件包和节点自测的每一步操作。特别是在编写节点代码时,我们仔细参考了wpr_simulation2的例程文件,确保了代码的正确性和可运行性。

​ 在节点自测阶段,我们成功验证了发布的消息包内容是否与节点代码中的描述一致,从而确保了速度控制功能的正确性。随后,我们运行了前面编写的节点,并在wpr_simulation2仿真环境中观察了机器人的运动情况。实验结果表明,机器人能够按照设定的速度向前移动,速度控制功能得到了成功实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值