ROS学习笔记(4)——RVIZ中显示双足机器人行走

2023-05-16

写在前面

ros版本 kinetic、noetic 亲测可行
结合前面笔记(3)需求:在rviz中实现双足机器人行走。

效果展示

请添加图片描述

实现方式

  1. rviz中机器人运动是通过控制关节运动的角度,来改变机器人在rviz中的显示,所以需要一组关节运动的数据。
  2. 通过matlab的双足机器人模型,来模拟生成机器人运动数据,将数据倒入到ros中进行打包发布话题,实现对rviz中机器人运动控制。

解决的问题

  1. matlab生成的数据写入excel
  2. 读取Excel文件较为繁琐,故采用python进行excel数据读取较为方便
  3. python读取Excel数据需要xlrd库,xlrd库的版本问题(本文采用1.2.0版,2.0版本的xlrd库编译时会抛乱七八糟的异常)
  4. 接收关节角度并将数据打包发布成rviz可以识别的数据信息,函数即订阅数据,又发布数据(本文通过c++的类定义初始化性质,来解决回调函数中发布消息导致产生未定义消息体的情况,当然也可以用python,将关节数据获取后直接打包处理,发送给rviz可识别的数据)

代码

matlab模拟双足行走数据跳过,直接给出具体数据下载即可

读取Excel数据并发布角度信息话题
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
""" 
    函数功能:
            读取Excel关节运动角度数据,并打包发送关节角度控制话题 
    创建时间:
            2022.02.11
    创建人:
            yqy
"""
import rospy
import xlrd
from std_msgs.msg import Float64MultiArray
import numpy as np

def robot_joint_angle_pub():
    
    rospy.init_node("joint_angle")
    pub = rospy.Publisher("joint_ctrl_angle",Float64MultiArray,queue_size=100)
    rate = rospy.Rate(150)
    buffer = Float64MultiArray()
    buff = np.arange(0,1,0.1)
    left_xl = xlrd.open_workbook(r'/home/yqy/robot/src/robot01_model/excel/left.xlsx')
    right_xl = xlrd.open_workbook(r'/home/yqy/robot/src/robot01_model/excel/right.xlsx')
    left = left_xl.sheet_by_index(0); # sheet索引从0开始
    right = right_xl.sheet_by_index(0); # sheet索引从0开始
    buff_len = left.nrows # 获取数组行数
    for i in range(1,buff_len):
        buff[0] = left.cell_value(i, 3)
        buff[1] = left.cell_value(i, 4)
        buff[2] = left.cell_value(i, 5)
        buff[3] = right.cell_value(i, 3)
        buff[4] = right.cell_value(i, 4)
        buff[5] = right.cell_value(i, 5)
        rospy.loginfo("buff[0] = %.2f buff[1] = %.2f buff[2] = %.2f buff[3] = %.2f buff[4] = %.2f buff[5] = %.2f", buff[0],buff[1],buff[2],buff[3],buff[4],buff[5])
        
        buffer.data = [buff[0],buff[1],buff[2],buff[3],buff[4],buff[5]]
        pub.publish(buffer)
        rate.sleep()
if __name__ == "__main__":
    while not rospy.is_shutdown():
        try:
            robot_joint_angle_pub()
        except rospy.ROSInterruptException:
            pass
关节角度数据的接收及发布关节控制命令
/* 
    函数功能:
            关节角度数据的接收及发布关节控制命令
    创建时间:
            2022.02.11
    创建人: 
            yqy
*/
#include "ros/ros.h"
#include "sensor_msgs/JointState.h"
#include "std_msgs/Float64MultiArray.h"

class joint_state_pub
{
    private:
        ros::NodeHandle nh;
        ros::Publisher pub;
        ros::Subscriber sub;
    public:
        joint_state_pub()
        {
            pub = nh.advertise<sensor_msgs::JointState>("joint_states",1);
            sub = nh.subscribe<std_msgs::Float64MultiArray>("joint_ctrl_angle",1,&joint_state_pub::jointCtrlCollback,this);
        }
        void jointCtrlCollback(const std_msgs::Float64MultiArray::ConstPtr&  buffer);

};
void joint_state_pub::jointCtrlCollback(const std_msgs::Float64MultiArray::ConstPtr&  buffer)
{
    sensor_msgs::JointState joint_state_pub;
    joint_state_pub.header.stamp = ros::Time::now();
    joint_state_pub.header.frame_id = "robot01";
    joint_state_pub.name.resize(6);
    joint_state_pub.position.resize(6);
    joint_state_pub.name[0] = "left_trunk12left_joint1";
    joint_state_pub.position[0] = buffer->data[0];
    joint_state_pub.name[1] = "left_trunk22left_joint2";
    joint_state_pub.position[1] = buffer->data[1];
    joint_state_pub.name[2] = "left_joint32left_foot1";
    joint_state_pub.position[2] = buffer->data[2];
    joint_state_pub.name[3] = "right_trunk12right_joint1";
    joint_state_pub.position[3] = buffer->data[3];
    joint_state_pub.name[4] = "right_trunk22right_joint2";
    joint_state_pub.position[4] = buffer->data[4];
    joint_state_pub.name[5] = "right_joint32right_foot1";
    joint_state_pub.position[5] = buffer->data[5];
    ROS_INFO("buffer is = %.2f  %.2f %.2f  %.2f  %.2f %.2f ",buffer->data[0],buffer->data[1],buffer->data[2],buffer->data[3],buffer->data[4],buffer->data[5]);
    pub.publish(joint_state_pub);
}
int main(int argc, char  *argv[])
{
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"state_pub");
    joint_state_pub jsp;
    ros::Rate rate(150);
    rate.sleep(); 
    ros::spin();
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS学习笔记(4)——RVIZ中显示双足机器人行走 的相关文章

  • 基于Cartographer的建图与导航

    一 RoboSense 16线雷达驱动安装 2 二 Cartographer的安装 2 三 配置文件结构说明 4 四 配置文件详解 4 2D lua文件的配置 5 2D launch文件的配置 6 2D pure location lua文
  • Ubuntu18.04安装autoware.ai

    前言 Autoware AI是世界上第一个用于自动驾驶技术的 All in One 开源软件 xff0c 关于它的介绍就不再赘述了 xff0c 感兴趣的可以去看一下知乎文章 xff0c 这里主要说明一下autoware ai的安装配置 之前
  • Baxter工作站建立及简单使用

    1 硬件 1个 Baxter Research Robot1台PC机或笔记本 xff0c 安装好Ubuntu系统 xff08 推荐Ubuntu16 04安装ROS kinetic xff09 1个无线路由器 xff08 千兆网口 xff09
  • selenium网页自动登录、打卡(二)

    文章目录 前言一 Python 43 Selenium二 通信环境 xff08 服务器 客户端 xff09 1 selenium借助cookie网页登录csdn2 私信发送消息流程3 将新增的逻辑融入原本的程序 前言 前面做了一个自动打卡的
  • 解决浏览器“由你的组织管理”或“由贵单位管理”

    寒假在家使用自己电脑时 xff0c 浏览器出现意外关闭 xff0c 一次以为没什么 xff0c 这两天出现好几次 xff0c 时不时地来一下 xff0c 太搞心态了 xff0c 必须给他解决了 一番检查后 xff0c 是浏览器自动安装了一款
  • Ubuntu18.04屏幕分辨率问题

    Ubuntu18 04屏幕分辨率问题 起因 本来昨天还好好的 xff0c 过了一夜 xff0c 就变了 xff0c 像极了咳咳 自行脑补 redwallbot 2小车上固定的屏幕 xff0c 屏幕分辨率本来应该是1920x1080的 xff
  • 使用frp实现内网穿透

    使用frp实现内网穿透 引言 一打五师兄走之前留了一块树莓派给我 xff0c 暑假闲来无事拿出来玩玩 如果每次都连接显示屏和键盘使用有点麻烦而且低级 正常笔记本和树莓派都连着实验室的WIFI xff0c 网段一样 xff0c 是可以ssh远
  • ffmpeg+nginx-rtmp转发视频流

    nginx与nginx rtmp module安装 画了好几天图 xff0c 实在有些乏力 xff0c 找点有意思的事情做做 觉得视频流传输挺有意思 xff0c B站找了些视频 xff0c 但感觉有些大同小异 xff0c 讲得不是很清楚 F
  • 2013 google校园招聘笔试题

    2013 google校园招聘笔试题 回忆版 xff0c 难免有错误 xff0c 欢迎指正 同时欢迎大家在评论中讨论答案 1 单项选择题 1 1如果把传输速率定义为单位时间内传送的信息量 xff08 以字节计算 xff09 多少 关于一下几
  • 调用微信公众号接口给女票每天打卡

    文章目录 前言一 微信公众号接口二 使用步骤 前言 最近网上很火的给女朋友做公众号推送 xff0c 作者 小红书 64 猪咪不是猪 且做作者 大方的共享成品 源码 43 教学 43 自动版本 起初 xff0c 人们认为这仅仅只是个简单且幼稚
  • js获取整个页面源码

    通过 outerHTML document documentElement outerHTML 通过异步请求 get window location href function res console log res 通过jQuery 34
  • 查看自己电脑被别人U盘拷贝文件

    windows 43 R reg query HKLM System currentcontrolset enum usbstor s gt c usb txt FriendlyName 第二种是使用USBViewer USBViewer
  • 普罗米修斯-docker安装

    1 只有一台服务器 xff0c 所以使用docker来进行试验 安装docker curl fsSL https get docker com bash s docker mirror Aliyun 查看安装版本 docker versio
  • netty参数设置

    1 通用参数 CONNECT TIMEOUT MILLIS Netty参数 xff0c 连接超时毫秒数 xff0c 默认值30000毫秒即30秒 MAX MESSAGES PER READ Netty参数 xff0c 一次Loop读取的最大
  • git 删除远程文件目录

    git rm r cached 文件夹名称 git add git commit m 34 aa 34 git push origin master
  • git删除远程分支

    branch 1 列出分支 xff0c a参数是列出所有分支 xff0c 包括远程分支 git branch a 2 创建一个本地分支 git branch branchname 3 创建一个分支 xff0c 并切换到该分支 git che
  • maven命令上传第三方包

    mvn deploy deploy file Dmaven test skip 61 true DgroupId 61 sdk的groupId DartifactId 61 包的名称 Dversion 61 版本号 如 xff1a 0 0
  • 解决图片上传权限问题

    linux默认umask为022 xff0c 对应权限为755 xff0c 其它用户可读可执行 可以vim etc profile xff0c 搜索umusk关键字查看 if UID gt 199 amp amp 34 96 usr bin
  • 微信小程序 解决 wx.request同步问题 方便开发 Promise方式

  • Python经典书籍有哪些?这份书单送给你_黑马程序员

    文章目录 一 Python 基础 01 Python编程 xff1a 从入门到实践 xff08 第2版 xff09 02 Python编程快速上手 xff08 第2版 xff09 03 Python编程初学者指南 04 笨方法 学Pytho

随机推荐

  • 记忆的方法

    1 第一招 xff0c 在背书的时候 xff0c 用双手捂住你的耳朵 xff0c 并且大声的朗读 研究表明 xff0c 用手捂着耳朵来朗读的话 xff0c 声音是直接通过骨骼来传输到内耳 xff0c 对大脑刺激会更加强烈 xff0c 记忆也
  • ssh登录服务器缓慢问题

    问题描述 问题刚开始是由pod启动失败 xff0c 报错unable to ensure pod container exists failed to create container for kubepods burstable pod8
  • UCOSIII学习-任务管理

    UCOSIII学习 任务管理 1 UCOSIII 任务组成2 UCOSIII 默认系统任务3 UCOSIII 任务状态4 任务堆栈1 任务堆栈的创建2 任务堆栈初始化 5 任务控制块1 任务控制块创建2 任务控制块初始化 6 任务就绪表1
  • ubuntu(Linux)配置允许远程登陆

    安装ubuntu后默认不可以以root方式登录系统 xff0c 需要做以下配置 1 使用sudo i 命令可以让用户切换到root用户 xff0c guo用户是安装ubuntu时配置的用户 xff0c 因人而异 xff1b 2 配置root
  • python带下划线的变量和函数

    参考文献 xff1a https blog csdn net AI S YE article details 44685139
  • ADD,COPY,ENTRYPOINT和cmd

    Dockerfile中有关信息 xff1a ADD与COPY区别 add 1 对压缩包进行解压2 可以在后面直接跟文件地址 copy xff1a 把本地的文件copy到容器里面 ENTRYPOINT与CMD区别 1 第一种解释 xff08
  • docker实例操作

    很多东西都是借鉴各位大神的 xff0c 也不知道具体是谁或是哪个链接 xff0c 很抱歉 两者同为目前版本中个人和小团队常用的服务级操作系统 xff0c 在线提供的软件库中可以很方便的安装到很多开源的软件及库 两者都使用bash作为基础sh
  • 三、FreeRTOS任务管理--常用函数

    任务的基本概念 FreeRTOS 的任务可认为是一系列独立任务的集合 每个任务在自己的环境中运行 在任何时刻 xff0c 只有一个任务得到运行 xff0c FreeRTOS 调度器决定运行哪个任务 调度器会不断的启动 停止每一个任务 xff
  • 七、FreeRTOS事件和常用函数接口

    基本概念 事件是一种实现任务间通信的机制 xff0c 主要用于实现多任务间的同步 xff0c 但事件通信只能是事件类型的通信 xff0c 无数据传输 与信号量不同的是 xff0c 它可以实现一对多 xff0c 多对多的同步 即一个任务可以等
  • PX4姿态估计源码分析

    写在前面 今天入坑PX4开始学习PX4代码 xff0c pixhawk硬件是可以支持PX4 ardupilot两套固件 我用的是1 6 0rc1版本代码 代码位置 xff1a Firmware1 6 0rc1 src modules att
  • PX4位置估计源码分析

    写在前面 源码版本 xff1a 1 6 0rc1 源码位置 xff1a Firmware 1 6 0rc1 src modules position estimator inav position estimator inav main c
  • ROS入门笔记(二):ROS安装与环境配置及卸载(重点)

    ROS入门笔记 xff08 二 xff09 xff1a ROS安装与环境配置及卸载 xff08 重点 xff09 文章目录 1 ROS安装步骤1 1 ROS版本1 2 确定Ubuntu版本号1 3 安装ROS1 3 1 Ubuntu初始环境
  • windows安装Java环境及Flightplot分析PX4飞行日志

    写在前面 用Flightplot分析PX4飞行日志 xff0c 不管是windows还是Ubuntu都需要安装对应的Java环境 xff08 我用的是win10家庭版 xff09 1 下载安装java环境 xff1a a 下载 点击地址进行
  • PX4_ECL_EKF代码分析1

    写在前面 源码版本 xff1a 1 6 0rc1 源码位置1 xff1a Firmware 1 6 0rc1 src modules ekf2 main cpp 源码位置2 xff1a Firmware 1 6 0rc1 src lib e
  • PX4_ECL_EKF代码分析2

    写在前面 源码版本 xff1a 1 6 0rc1 源码位置1 xff1a Firmware 1 6 0rc1 src modules ekf2 main cpp 源码位置2 xff1a Firmware 1 6 0rc1 src lib e
  • 基于RflySim平台的mahony(含磁罗盘)互补滤波在pixhawk仿真及实物实验(带实验数据)

    写在前面 本案例实验采用RflySim平台 xff0c 该平台可以高效快速编写代码 xff0c 使用simulink模型搭建 xff0c 可以见代码直接生成对应的C代码 xff0c 并一键将代码烧录Pixhawk中 xff0c 是一种快速开
  • ROS学习笔记(1)——创作工作空间/安装usb_cam来调用摄像头

    写在前面 ubuntu版本 xff1a 20 04 ros版本 xff1a noetic 工作空间 工作空间 workspace 是一个存放工程开发相关的文件夹 xff0c 一般包含 xff1a src xff1a 代码空间 xff0c 存
  • ROS学习笔记(2)——roslaunch turtle_tf turtle_tf_demo.launch报错问题(Ubuntu20.04python2与python3版本切换)

    写在前面 Ubuntu版本 xff1a 20 04 ROS版本 xff1a noetic 解决运行roslaunch turtle tf turtle tf demo launch文件后报错问题 问题说明 xff1a 此问题最终是由于pyt
  • ROS学习笔记(3)——通过脚本控制rviz中创建的机器人运动

    写在前面 需求 xff1a rviz中创建的机器人模型 xff0c 通过运行脚本方式控制其运动 ros版本 kinetic noetic 两个版本亲测都可以 整体效果 思路 机器人描述文件xacro xff0c 通过joint 关节 来控制
  • ROS学习笔记(4)——RVIZ中显示双足机器人行走

    写在前面 ros版本 kinetic noetic 亲测可行 结合前面笔记 3 需求 xff1a 在rviz中实现双足机器人行走 效果展示 实现方式 rviz中机器人运动是通过控制关节运动的角度 xff0c 来改变机器人在rviz中的显示