MATLAB + ROS + Coppeliasim 联合通讯心得

最近在做一个MATLAB+ROS+Coppeliasim联合仿真作业时遇到一点弯路,这里主要记录一下心得

任务主要为在MATLAB内编写控制状态机,使用simulink块中的ROS发布接收消息,这一步只需要拖动块就好,主要注意的是消息类型搭配的函数计算。

MATLAB通信ROS

这一步由于我自己使用的是双系统,在ubuntu内MATLAB通信ROS非常简单,只需要先启动

roscore

然后在matlab里面输入

rosinit

即可启动连接,这时在新终端内输入

rosnode list

查看ros节点,如果出现了matlab全局节点,说明连接成功

如果想结束连接,需要在matlab中输入

rosshutdown

Coppeliasim通信ROS

本人使用ubuntu版本如下:

Coppeliasim版本为CoppeliaSim_Edu_V4_6_0_rev4_Ubuntu20_04,是从官网下载的目前最新的版本。Coppeliasim和ROS通信也有一个我非常喜欢的博主汤姆与贝塔写过,我此次也是依照他的博客运行,但是应该是版本问题,其中有一些操作我自以为是的搞错了哈哈,实质非常简单。这里主要是使用sim_rosinterface,在这个github链接里面有详细的步骤。

我自己出错的地方在于,我最开始下载的是4.1.0版本,里面没有programming/ros_package这个文件夹,而4.6.0版本下有这个文件夹,并且包含了rosinterface,因此我最开始把这个文件夹放到了和coppeliasim文件夹一样的父文件夹里,再catkin build就出错了。

解决办法为:直接在coppeliasim同父文件夹的地方git clone,然后按照上面github地址里面的操作操作一遍就成功了,这时再GitHub - CoppeliaRobotics/simROS

rosnode list

会发现出现了coppeliasim的节点,通信成功。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt中使用ROS2进行topic通讯需要使用ROS2的C++ API。以下是一些基本步骤: 1. 安装ROS2和Qt 2. 在Qt中创建一个C++项目 3. 在CMakeLists.txt中添加以下代码以链接ROS2: ``` find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) ``` 4. 在Qt中创建一个ROS2节点: ``` #include "rclcpp/rclcpp.hpp" #include "std_msgs/msg/string.hpp" class MyNode : public rclcpp::Node { public: MyNode() : Node("my_node") { publisher_ = this->create_publisher<std_msgs::msg::String>("my_topic", 10); timer_ = this->create_wall_timer(std::chrono::milliseconds(500), std::bind(&MyNode::publishMessage, this)); } private: void publishMessage() { auto message = std_msgs::msg::String(); message.data = "Hello, world!"; publisher_->publish(message); } rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_; rclcpp::TimerBase::SharedPtr timer_; }; ``` 5. 在Qt中订阅ROS2话题: ``` #include "rclcpp/rclcpp.hpp" #include "std_msgs/msg/string.hpp" class MyNode : public rclcpp::Node { public: MyNode() : Node("my_node") { subscriber_ = this->create_subscription<std_msgs::msg::String>("my_topic", 10, std::bind(&MyNode::receiveMessage, this, std::placeholders::_1)); } private: void receiveMessage(const std_msgs::msg::String::SharedPtr message) { qDebug() << "Received message: " << message->data.c_str(); } rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscriber_; }; ``` 这些是基本的步骤,你可以根据你的需求和情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值