cmd_to_robot 讨论及 G29 控制优化

cmd_to_robot 讨论及 G29 控制优化

cmd_to_robot 讨论

转向电机控制代码中,补偿信息在循环中发布,转向完成信息在回调函数中发布

转动电机控制代码中,对转动电机的控制在转向完成的回调函数中实现

这就意味着如果一直没有 /cmd_vel 消息发布,那么就没有转动电机的控制,从而导致控制时的异常

简单的方法是上电时先启动手柄节点,轨迹跟踪时再关闭手柄节点,即由不同的节点发布 /cmd_vel 消息,后续再考虑优化

G29 控制优化

G29 的控制消息是间断的,即动一下发一下,不会像手柄那样连续发送,这样会导致两个问题:

  • 通信的不连续或者长时间未发送消息导致通信异常
  • 控制的不连续导致转动电机异常动作

因此考虑将 /joy 消息订阅后连续发送,代码如下

#include <ros/ros.h>
#include <sensor_msgs/Joy.h>
#include <mutex>
using namespace std;ros::Publisher continuous_pub;
sensor_msgs::Joy steer_msg;
mutex mut;const int axis_button_num = 20;void joy_callback(const sensor_msgs::Joy::ConstPtr &msg)
{steer_msg = *msg;lock_guard<mutex> lck(mut);continuous_pub.publish(steer_msg);mut.unlock();
}int main(int argc, char *argv[])
{ros::init(argc, argv, "g29_continuous");ros::NodeHandle nh;memset(&steer_msg, 0, sizeof(steer_msg));steer_msg.axes.resize(axis_button_num);steer_msg.buttons.resize(axis_button_num);continuous_pub = nh.advertise<sensor_msgs::Joy>("/g29_msg", 1);ros::Subscriber joy_sub = nh.subscribe("/joy", 1, joy_callback);ros::Rate loop(25);while (ros::ok()){lock_guard<mutex> lck(mut);continuous_pub.publish(steer_msg);mut.unlock();ros::spinOnce();loop.sleep();}return 0;
}

有新的 sensor_msgs::Joy 就更新 steer_msg,否则就发布之前的 msg

💡 注意 resize 键轴和按钮,否则 robot_steerpub 会因为越界访问而报段错误

远程控制的完整通信流程如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯备赛 week 1 —— DP 背包问题

目录 &#x1f308;前言&#x1f308;&#xff1a; &#x1f4c1; 01背包问题 分析&#xff1a; dp数组求解&#xff1a; 优化&#xff1a;滚动数组&#xff1a; &#x1f4c1; 完全背包问题 &#x1f4c1; 总结 &#x1f308;前言&#x1f308;&#xff1a; 这篇文章主…

第10次修改了可删除可持久保存的前端html备忘录

第10次修改了可删除可持久保存的前端html备忘录 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

ASTM F2057-23衣物收纳商品安全标准

美国每年均有大量因衣物存放装置翻倒而造成人员伤害甚至死亡的报道。 因此&#xff0c;美国消费品安全委员会CPSC于2023年4月19日发布决定&#xff0c;将ASTM F2057-23作为美国消费品安全委员会的强制性安全标准&#xff0c;替代16 CFR 1261&#xff0c;以此更好保护消费者免受…

五种主流数据库:排除重复结果

查询语句有可能会返回重复的数据&#xff0c;我们可以使用 DISTINCT 关键字排除查询结果中的重复记录。 本文比较五种主流数据库排除重复查询结果的实现和差异&#xff0c;包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。 排除重复结果MySQLOracleSQL ServerPostg…

关于Linux系统的目录结构介绍常用命令介绍

目录 一. Linux系统目录结构介绍 二. 一些常用命令的介绍 1、# 与 $的区别 2、ifconfig 3、su 4、cd 5、目录查看 6、查看文件内容 7、创建目录及文件 8、复制和移动 9、其他 10、tar 11、which 12、whereis 13、find 14、chmod 三. vim的基本使用 四. SSH密…

android gradle 使用总结

一 buildscript buildscript&#xff1a;这里面的声明&#xff08;repositories&#xff0c;dependencies&#xff09;是 gradle脚本自身需要使用的资源&#xff0c;会优先加载&#xff0c; 而外面的声明&#xff08;repositories&#xff0c;dependencies&#xff09;是项目…

QT+C++桌面程序窗体框架模板-中英文切换-文件打开历史记录-工具选项设置

程序示例精选 QTC桌面程序窗体框架模板-中英文切换-文件打开历史记录-工具选项设置 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《QTC桌面程序窗体框架模板-中英文切换-文件打开历史记录-…

认识数学建模

文章目录 1 什么是数学建模2 数学建模的比赛形式3 参加数学建模的好处4 数学建模的流程5 数学建模成员分工6 数学建模常用软件7 数学建模竞赛7.1 美国大学生数学建模竞赛7.2 MathorCup高校数学建模挑战赛7.3 华中杯大学生数学建模挑战赛7.4 认证杯数学建模网络挑战赛7.5 华东杯…

Web08--JavaScript高级

1、BOM对象 BOM&#xff1a;browser object model 浏览器对象模型 BOM对象包括window对象、screen对象、history对象、location对象、navigator对象。 1.1 window对象 所有的浏览器都支持window对象。它表示的浏览器窗口 window对象是js中的顶层对象&#xff0c;所有的j…

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32EC11编码器实现增减调节及单击、双击、长按功能 &#x1f4fa;实现效果演示&#xff1a; &#x1f4d8;内容提要 &#x1f4dd;本文主要实现&#xff0c;通过STM32 HAL库开发&#xff0c;实现的EC11编码器功能&#xff0c;按键结合状态机思想实现的拓展单击、双击、…

Web--HTML基础

文章目录 安装环境HTMLhtml框架html基础标签语义标签html特殊符号 安装环境 安装vscode后 安装插件 可以先不写后台直接将前度界面展示出来 自动补全tag&#xff0c;同时修改tag时自动改另一半 在设置里将保存自动格式化的选项勾上 创建一个index.htm文件&#xff0c;这个…

力扣80、删除有序数组中的重复项Ⅱ(中等)

1 题目描述 图1 题目描述 2 题目解读 对于有序数组nums&#xff0c;要求在不使用额外数组空间的条件下&#xff0c;删除数组nums中重复出现的元素&#xff0c;使得nums中出现次数超过两次的元素只出现两次。返回删除后数组的新长度。 3 解法一&#xff1a;双指针 双指针法可以…

防御第三次作业-防火墙组网实验(3)

目录 实验拓扑图 要求 1 2 针对10.0.2.10设备的安全策略&#xff1a; 针对10.0.2.20设备的安全策略&#xff1a; 3 4 实验拓扑图 各设备ip和接口已配好&#xff0c;均可可ping通防火墙。 要求 1.生产区在工作时间内可以访问dmz区域&#xff0c;仅可以访问http服…

Kali如何启动SSH服务并实现无公网ip环境远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

最佳的reCAPTCHA v3验证码解析器,使用API或扩展自动解析reCAPTCHA v3

在在线安全领域&#xff0c;reCAPTCHA v3作为一种重要工具&#xff0c;用于保护网站免受自动机器人和恶意活动的侵害。在本文中&#xff0c;我们探讨了Capsolver的能力&#xff0c;这是征服reCAPTCHA v3挑战的终极解决方案。凭借其先进的功能&#xff0c;包括API集成和多功能的…

AI新工具(20240124) ComfyUI-InstantID-ComfyUI下的非官方InstantID实现;Lumiere是由谷歌时空扩散模型

ComfyUI-InstantID-ComfyUI下的非官方InstantID实现 ComfyUI InstantID是对InstantID的非官方实现&#xff0c;支持本地和huggingface hub模型&#xff0c;同时支持通用styler。它包括基础模型加载、InsightFace模型加载、ID ControlNet模型加载、Ipadapter_instantid模型加载…

【ProtoBuf】使用指南

一.什么是ProtoBuf 特点&#xff1a;ProtoBuf是用于序列化和反序列化的一种方法&#xff0c;类似xml和json&#xff0c;但是效率更高&#xff0c;体积更小。ProtoBuf具有语⾔⽆关、平台⽆关&#xff0c;扩展性、兼容性好等特点。 ProtoBuf是需要依赖通过编译生成的头文件和源…

oracle 12 查询数据库锁

在Oracle 12c中&#xff0c;查询数据库锁信息可以通过以下视图进行&#xff1a; v$locked_object&#xff1a;这个视图显示了当前被锁定的对象&#xff08;如表、行等&#xff09;的信息。 SELECT l.session_id sid, s.serial#, l.locked_mode,o.object_name,s.osuser,s.userna…

1.25学习总结

今天学习了二叉树&#xff0c;了解了二叉树的创建和遍历的过程 今天所了解的遍历过程主要分为三种&#xff0c;前序中序和后序&#xff0c;都是DFS的想法 前序遍历&#xff1a;先输出在遍历左节点和右节点&#xff08;输出->左->右&#xff09; 中序遍历&#xff1a;先…

网络工程师:新兴科技基础知识面试题(十四)

116.简述模拟信号到数字信号是怎么转化的。 模拟信号到数字信号的转化过程是通过模数转换器&#xff08;ADC&#xff09;完成的&#xff0c;该过程也被称为采样和量化。 1. 采样&#xff1a; 模拟信号是连续的&#xff0c;而数字信号是离散的。在转换过程中&#xff0c;模拟信…