速度控制消息包格式
对机器人的速度控制是通过机器人的核心节点发送速度消息来实现的,这个消息的类型是geometry_msgs::Twist,包含两个部分速度值
第一部分是矢量速度x,y,z,表明前后左右上下三个方向上的平移速度。
第二部分是旋转速度x,y,z,表明水平前后轴向,水平左右轴向,竖直上下轴向上的旋转速度值
官方推荐的机器人速度控制话题为/cmd_vel,所以向这里发送就可以
机器人运动控制的实现
编写速度控制程序
cd ~/ros2_ws/src/
ros2 pkg create vel_pkg
//vel_node.cpp
#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;
}
接下来要做的就是和P3写的一样的设置编译和功能包,修改CMakeLists.txt和package.xml
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}
)
<depend>rclcpp</depend>
<depend>geometry_msgs</depend>
完成后可以编译运行,运行后另开窗口ros2 topic list可以查看到有/cmd_vel的话题,使用ros2 topic echo /cmd_vel可以看到发送的消息。
仿真运行速度控制程序
打开一个新的窗口,cd ~/ros2_Ws
source install/setup.bash
ros2 launch wpr_simulation2 wpb_simple.launch.py
打开仿真机器人可以发现机器人正在缓缓向前走