一、前言

小白在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仿真平台中机器人添加运动关节(旋转副)讲解相关推荐

  1. 【ROS仿真实战】Gazebo仿真平台介绍及安装方法(一)

    文章目录 前言 一.Gazebo简介 二.Gazebo仿真平台的基本概念 三.Gazebo仿真平台的安装方法 四.总结 前言 Gazebo仿真平台是一个广泛应用于机器人研发.测试和教育等领域的开源软件 ...

  2. Gazebo仿真平台模型搭建与修改

    ROS进阶教程(一)Gazebo仿真平台模型搭建与修改 文件讲解 Models 文件 World文件 Launch文件 模型编辑 可视化操作 配置文件编辑 仿真操作流程 完成model建模 world ...

  3. 「Java」基于Mirai的qq机器人开发踩坑笔记(其一)

    目录 0. 前置操作 I. 安装MCL II. MCL自动登录配置 III. 安装IDEA插件 1. 新建Mirai项目 2. 编写主类 3. 添加外部依赖 4. IDEA运行 5. 插件打包 6. ...

  4. 「Java」基于Mirai的qq机器人开发踩坑笔记(其二)

    目录 0. 配置机器人 1. onLoad方法 2. onEnable方法 3. 消息属性 4. 消息监听 I. 好友消息 II. 群聊消息 III. 无差别消息 5. 发送消息 I. 文本消息 II ...

  5. gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器

    gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器 搭建环境: ubuntu: 20.04 ros: Nonetic sensor: robotiq_f ...

  6. gazebo仿真时在加入差分运动插件后没有cmd_vel话题

    一.问题描述: gazebo仿真时在加入差分运动插件后没有cmd_vel话题 joes@joes:~/jiao/ROS_Project$ roslaunch ros23_urdf02_gazebo d ...

  7. 遨博协作机器人ROS开发 - Gazebo仿真与控制真实机器人

    目录 一.简介 二.环境版本 三.Gazebo仿真 1.gazebo使用 2. 仿真遨博机械臂 四.ROS控制真实机器人 1. 网络配置 2. 真实机器人控制 3. 真实机器人运动速度调节 五.小结 ...

  8. Gazebo仿真UUV水下机器人

    最近准备学习一下ros,gazebo和一个水下rov模拟器. uuv_simulator(https://github.com/uuvsimulator/uuv_simulator)是一个非常优秀的基 ...

  9. Gazebo仿真平台

      本篇关于内容主要参照冰达机器人教程学习做的笔记:https://b23.tv/qiFLhjj 理论部分   gazebo是3D仿真平台,是ROS官方指定的.gazebo适合仿真室内场景,对环节渲染 ...

  10. Gazebo——仿真平台搭建(基于Ubuntu20.04)

    目录 Gazebo安装配置 创建仿真环境 仿真使用 Rviz查看摄像头采集的信息 Kinect仿真 问题解决: 1.gazebo--SpawnModel: Failure - model name m ...

最新文章

  1. Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
  2. hdu 杭电 1045 Fire Net
  3. 1021 个位数统计 (15分)——10行代码AC(解题报告)
  4. linux安装配置SVN服务器
  5. oracle cascade是什么意思啊,Oracle外键(Foreign Key)之级联删除(DELETE CASCADE)
  6. Mybatis存储过程调用
  7. Internet Explorer 8的新特性和自定义部署
  8. linux清空日志文件内容 (转)
  9. CSS - Iconfont
  10. 人体模型 java代码_java3d人体模型.doc
  11. 线性线性混合效应模型及R语言实现
  12. c语言去尾法和进一法的例子,用“进一法”和“去尾法”解决问题教学案例
  13. 2019半年总结——学习与成长
  14. oracle 独占更新,Oracle的共享封锁 独占封锁和共享更新封锁 (3)
  15. 高清HDMI高清编码器(HDMI网络传输器)使用及前景
  16. python 自动解4399数独游戏
  17. 这个系统能读懂猪的6种情绪
  18. 网易2017春招笔试——赶去公司
  19. Android上的Mosquitto推送
  20. 智能汽车与智能手机:谁是智慧生活的核心?

热门文章

  1. javascript从入门到跑路-----小文的js学习笔记(6)-----三大流程控制语句---顺序控制、分支控制、循环控制
  2. 推荐系统(四)——因果效应uplift model系列模型S-Learner,T-Learner,X-Learner
  3. 三个生活中最常见的产品的嵌入式分析:台灯、智能手环、电视盒
  4. 介绍一个直接浏览微软知识库文章的工具
  5. TensorFlow中图(graphs)概念
  6. 一个复杂注塑件抽取中面一般操作
  7. 【渝粤教育】电大中专建设工程法规_1作业 题库
  8. JavaScript练习题四
  9. Java代理(静态代理、JDK动态代理、CGLIB动态代理)
  10. 谈谈本人做广告联盟的经验