ROS学习记录16SLAM仿真学习5——将cmd_vel转换为ackman小车的速度
Posted 康娜喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS学习记录16SLAM仿真学习5——将cmd_vel转换为ackman小车的速度相关的知识,希望对你有一定的参考价值。
零.前言
在ROS的机制下,绝大多数的速度模型都是:Twist
,当然我们有符合阿克曼模型的:ackermann_msgs
,不用那么麻烦,直接将Twist.linear.x
作为后轮前进的速度
、twist.angular.z
作为我们转向角的角度
更多的阿克曼转向模型参考(实际模型创建odom的时候使用):
- https://www.bilibili.com/video/BV1AA411g7DG
- https://www.bilibili.com/video/BV1cT4y1M7ts
一.写代码
在ros_ws/src/slam_keyboard_move/src
下创建vel2ack.cpp
然后写入:
#include "ros/ros.h"
#include "std_msgs/Float64.h"
#include "geometry_msgs/Twist.h"
std_msgs::Float64 left_pos, right_pos, left_vel, right_vel;
void TwistCallback(const geometry_msgs::TwistConstPtr msgs)
left_pos.data = msgs->angular.z;
right_pos.data = msgs->angular.z;
left_vel.data = msgs->linear.x;
right_vel.data = msgs->linear.x;
int main(int argc, char **argv)
ros::init(argc, argv, "vel2cmd");
ros::NodeHandle node;
ros::Subscriber vel_sub;
ros::Publisher left_pos_pub = node.advertise<std_msgs::Float64>("/ackman/left_bridge_position_controller/command", 10);
ros::Publisher right_pos_pub = node.advertise<std_msgs::Float64>("/ackman/right_bridge_position_controller/command", 10);
ros::Publisher left_vel_pub = node.advertise<std_msgs::Float64>("/ackman/left_wheel_velocity_controller/command", 10);
ros::Publisher right_vel_pub = node.advertise<std_msgs::Float64>("/ackman/right_wheel_velocity_controller/command", 10);
vel_sub = node.subscribe("/cmd_vel", 1, &TwistCallback);
ros::Rate loop_rate(10);
left_vel.data = -999;
while(left_vel.data > -999.1 && left_vel.data < -880.9)
ros::spinOnce();
ROS_INFO("trans cmd_vel to ackman init finish!");
while (ros::ok())
left_pos_pub.publish(left_pos);
right_pos_pub.publish(right_pos);
left_vel_pub.publish(left_vel);
right_vel_pub.publish(right_vel);
ros::spinOnce();
loop_rate.sleep();
return 0;
编译即可
二.尝试
可以用小乌龟的控制节点在remap
一下话题就可以实现控制了。
提供一个launch
:
<launch>
<node name="vel2ack" pkg="slam_keyboard_move" type="vel2ack">
</node>
<node name="key_board" pkg="turtlesim" type="turtle_teleop_key" output="screen">
<remap from="/turtle1/cmd_vel" to="/cmd_vel" />
</node>
</launch>
以上是关于ROS学习记录16SLAM仿真学习5——将cmd_vel转换为ackman小车的速度的主要内容,如果未能解决你的问题,请参考以下文章
ROS学习记录12SLAM仿真学习1——ROS Control
ROS学习记录12SLAM仿真学习1——ROS Control