「 ROS 」Gazebo仿真平台中机器人添加运动关节(旋转副)讲解
一、前言
小白在Gazebo仿真平台中,为三轮移动机器人sdf模型的两个关节:后轮支撑臂与车体滑轨,增加旋转副。下述事例代码为从整个工程项目中摘出,如有对应不上的情况,请留言。
二、实现方法
1. 需要在模型文件 model.sdf ,将两个关节的链接关系 type,改成“revolute”,事例如下:
常见的关节连接关系为:fixed固定,prismatic移动副,revolute旋转副。
<joint name="sliding_body_back_wheel_support_joint" type="revolute"><pose>0 0 0 0 0 0</pose><parent>sliding_body</parent><child>back_wheel_support</child><axis><xyz>0 0 1</xyz><use_parent_model_frame>0</use_parent_model_frame><limit><lower>-1</lower><upper>1</upper><effort>-1</effort><velocity>-1</velocity></limit><!-- <dynamics><damping>100</damping><friction>1000</friction><spring_reference>0</spring_reference><spring_stiffness>1000</spring_stiffness></dynamics> --></axis></joint>
2. 建立一个针对模型关节的控制插件,事例如下:
这里需要做到三个对应,1)filename的名字与<.cpp>文件名对应,2)Joint的标签名字与<.cpp>中定义的Joint名对应,3)Topic的标签名字与<.cpp>中定义的Topic的标签名对应。
<plugin name="B_wheel_steering" filename="libback_wheel_steering.so"> <prismaticJoint>base_sliding_body_joint</prismaticJoint><P_joint_position_Topic>/back_wheel_steering</P_joint_position_Topic>
</plugin>
3. 创建.hh与.cpp文件用于编写此关节的话题,事例如下:
<back_wheel_steering.hh>
#ifndef _BACK_WHEEL_ROLLINGANGLE_HH_
#define _BACK_WHEEL_ROLLINGANGLE_HH_#include <boost/thread.hpp>
#include <cmath>
#include <fstream>
#include <iostream>
#include <string>
#include <thread>// gazebo
#include <gazebo/gazebo.hh>
#include <gazebo/physics/physics.hh>#include <gazebo/gazebo_client.hh>
#include <gazebo/msgs/msgs.hh>
#include <gazebo/transport/transport.hh>#include "std_msgs/Float64.h"
#include "ros/callback_queue.h"
#include "ros/ros.h"
#include "ros/subscribe_options.h"
#include "ros/subscription_callback_helper.h"namespace gazebo{class back_wheel_steering : public ModelPlugin{public:virtual ~back_wheel_steering();back_wheel_steering();void virtual Load(physics::ModelPtr _model, sdf::ElementPtr _sdf);void OnUpdate();double B_wheel_steering;private:physics::ModelPtr model;physics::JointPtr prismaticJoint;event::ConnectionPtr BWP_updateConnection;ros::NodeHandle P_joint_steering_Node;ros::Publisher rosPub_P_joint_steering;std::string P_joint_steering_PubTopic;std_msgs::Float64 B_wheel_steering_msg;int SimulateCount=0;int PrintStep=1000;};
}
#endif
<back_wheel_steering.cpp>
#include "back_wheel_steering.hh"
#define IS_DEBUG 0
namespace gazebo
{back_wheel_steering::back_wheel_steering(){}back_wheel_steering::~back_wheel_steering(){}void back_wheel_steering::Load(physics::ModelPtr _model, sdf::ElementPtr _sdf){// Just output a message for now //std::cerr << "\nThe velodyne plugin is attach to model[" << _model->GetName() << "]\n"; this->model = _model;this->prismaticJoint = this->model->GetJoint(_sdf->GetElement("prismaticJoint")->Get<std::string>());this->P_joint_steering_PubTopic = _sdf->GetElement("P_joint_steering_PubTopic")->Get<std::string>();rosPub_P_joint_steering = this->P_joint_steering_Node.advertise<std_msgs::Float64>(P_joint_steering_PubTopic, 10);this->BWP_updateConnection = event::Events::ConnectWorldUpdateBegin(std::bind(&back_wheel_steering::OnUpdate, this));}void back_wheel_steering::OnUpdate(){B_wheel_steering = this->prismaticJoint->GetAngle(0).Radian();B_wheel_steering_msg.data = B_wheel_steering;rosPub_P_joint_steering.publish(B_wheel_steering_msg);SimulateCount++;if ((SimulateCount % PrintStep == 0)){std::cout << "++++++++++++++++++++++++++++++++" << std::endl;std::cout<< "back_wheel_steeringangle:" << this->prismaticJoint->GetAngle(0).Degree()<<std::endl;std::cout << "++++++++++++++++++++++++++++++++" << std::endl;}}GZ_REGISTER_MODEL_PLUGIN(back_wheel_steering)
}
4. 在 CMakeLists.txt 中,声明可执行文件,事例如下:
## Declare a C++ library add_library(back_wheel_steering src/back_wheel_position.cpp src/back_wheel_steering.cpp)target_link_libraries(back_wheel_steering ${catkin_LIBRARIES} ${GAZEBO_LIBRARIES})
5. 最后,在Main主函数调用即可,事例代码:
double BW_Angle;void back_wheel_SteeringCallback(const std_msgs::Float64::ConstPtr& msg){BW_Angle = msg->data;//cout << "BW_Angle:" << BW_Angle << endl;
}int main(int argc, char** argv){ros::init(argc, argv, "adrc_run");ros::NodeHandle n;ros::Subscriber sub_Angle = n.subscribe("back_wheel_steering",1000,back_wheel_SteeringCallback);}
「 ROS 」Gazebo仿真平台中机器人添加运动关节(旋转副)讲解相关推荐
- 【ROS仿真实战】Gazebo仿真平台介绍及安装方法(一)
文章目录 前言 一.Gazebo简介 二.Gazebo仿真平台的基本概念 三.Gazebo仿真平台的安装方法 四.总结 前言 Gazebo仿真平台是一个广泛应用于机器人研发.测试和教育等领域的开源软件 ...
- Gazebo仿真平台模型搭建与修改
ROS进阶教程(一)Gazebo仿真平台模型搭建与修改 文件讲解 Models 文件 World文件 Launch文件 模型编辑 可视化操作 配置文件编辑 仿真操作流程 完成model建模 world ...
- 「Java」基于Mirai的qq机器人开发踩坑笔记(其一)
目录 0. 前置操作 I. 安装MCL II. MCL自动登录配置 III. 安装IDEA插件 1. 新建Mirai项目 2. 编写主类 3. 添加外部依赖 4. IDEA运行 5. 插件打包 6. ...
- 「Java」基于Mirai的qq机器人开发踩坑笔记(其二)
目录 0. 配置机器人 1. onLoad方法 2. onEnable方法 3. 消息属性 4. 消息监听 I. 好友消息 II. 群聊消息 III. 无差别消息 5. 发送消息 I. 文本消息 II ...
- gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器
gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器 搭建环境: ubuntu: 20.04 ros: Nonetic sensor: robotiq_f ...
- gazebo仿真时在加入差分运动插件后没有cmd_vel话题
一.问题描述: gazebo仿真时在加入差分运动插件后没有cmd_vel话题 joes@joes:~/jiao/ROS_Project$ roslaunch ros23_urdf02_gazebo d ...
- 遨博协作机器人ROS开发 - Gazebo仿真与控制真实机器人
目录 一.简介 二.环境版本 三.Gazebo仿真 1.gazebo使用 2. 仿真遨博机械臂 四.ROS控制真实机器人 1. 网络配置 2. 真实机器人控制 3. 真实机器人运动速度调节 五.小结 ...
- Gazebo仿真UUV水下机器人
最近准备学习一下ros,gazebo和一个水下rov模拟器. uuv_simulator(https://github.com/uuvsimulator/uuv_simulator)是一个非常优秀的基 ...
- Gazebo仿真平台
本篇关于内容主要参照冰达机器人教程学习做的笔记:https://b23.tv/qiFLhjj 理论部分 gazebo是3D仿真平台,是ROS官方指定的.gazebo适合仿真室内场景,对环节渲染 ...
- Gazebo——仿真平台搭建(基于Ubuntu20.04)
目录 Gazebo安装配置 创建仿真环境 仿真使用 Rviz查看摄像头采集的信息 Kinect仿真 问题解决: 1.gazebo--SpawnModel: Failure - model name m ...
最新文章
- Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
- hdu 杭电 1045 Fire Net
- 1021 个位数统计 (15分)——10行代码AC(解题报告)
- linux安装配置SVN服务器
- oracle cascade是什么意思啊,Oracle外键(Foreign Key)之级联删除(DELETE CASCADE)
- Mybatis存储过程调用
- Internet Explorer 8的新特性和自定义部署
- linux清空日志文件内容 (转)
- CSS - Iconfont
- 人体模型 java代码_java3d人体模型.doc
- 线性线性混合效应模型及R语言实现
- c语言去尾法和进一法的例子,用“进一法”和“去尾法”解决问题教学案例
- 2019半年总结——学习与成长
- oracle 独占更新,Oracle的共享封锁 独占封锁和共享更新封锁 (3)
- 高清HDMI高清编码器(HDMI网络传输器)使用及前景
- python 自动解4399数独游戏
- 这个系统能读懂猪的6种情绪
- 网易2017春招笔试——赶去公司
- Android上的Mosquitto推送
- 智能汽车与智能手机:谁是智慧生活的核心?
热门文章
- javascript从入门到跑路-----小文的js学习笔记(6)-----三大流程控制语句---顺序控制、分支控制、循环控制
- 推荐系统(四)——因果效应uplift model系列模型S-Learner,T-Learner,X-Learner
- 三个生活中最常见的产品的嵌入式分析:台灯、智能手环、电视盒
- 介绍一个直接浏览微软知识库文章的工具
- TensorFlow中图(graphs)概念
- 一个复杂注塑件抽取中面一般操作
- 【渝粤教育】电大中专建设工程法规_1作业 题库
- JavaScript练习题四
- Java代理(静态代理、JDK动态代理、CGLIB动态代理)
- 谈谈本人做广告联盟的经验