ROS学习记录16【SLAM】仿真学习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>
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康娜喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值