栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

ROS开始学习

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ROS开始学习

**菜鸡错误之路**
  • 程序写完之后要改的东西
    • CMakelist.txt文件
  • Ros创建简单的cpp文件编译不通过
  • Ros创建Python文件遇到问题
  • vocode的使用方法,赞!
    • vocodecatkin_make:build 配置
    • vscode的代码提示功能
    • vscode 打印中文乱码
    • c++写publisher

程序写完之后要改的东西 CMakelist.txt文件
add_executable(hello_vscode_c src/hello_vscode_c.cpp)

修改两处

  1. src/后面的文件名字,要对应着你写的cpp的文件名字。
  2. 前面的映射文件名字(我随便叫的,哈哈),反正后面执行程序就不用输那一堆cpp文件的名字,直输入的就是你命名的那个名字。
target_link_libraries(hello_vscode_c
  ${catkin_LIBRARIES}
)

这里改的也就是和你上面起的那个名字对应就OK了。

Python文件写完之后要进行两步工作

  1. 赋予Python 文件可执行权限
chmod  +x 你Python文件的名字
  1. CMakeList文件中将下面代码注释取消,并将scripts中的.py文件改为你文件的名字。
catkin_install_python(PROGRAMS
  scripts/hello_vscode_p.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
Ros创建简单的cpp文件编译不通过

出现的问题如下图所示

通过将CmakeList.txt文件中的std_msg更改为std_msgs后编译成功。

Ros创建Python文件遇到问题

在用Python写的时候也报了错误

解决办法就是ennnnn,下面的方法
在Python文件前面加上下面这两句,顺序不能错。

#!/usr/bin/env python
#-*- coding: UTF-8 -*-  

vocode的使用方法,赞!

参考的是这个网站的教学,我也是跟着学习记录一下。

http://www.autolabor.com.cn/book/ROSTutorials/chapter1/14-ros-ji-cheng-kai-fa-huan-jing-da-jian/142-an-zhuang-vscode.html

vocodecatkin_make:build 配置

进入vscode之后,按Ctrl shift B 点击:catkin_make:build后面的小齿轮,将下方的代码复制进去。

{
// 有关 tasks.json 格式的文档,请参见
    // https://go.microsoft.com/fwlink/?linkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "label": "catkin_make:debug", //代表提示的描述性信息
            "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
            "command": "catkin_make",//这个是我们需要运行的命令
            "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
            "group": {"kind":"build","isDefault":true},
            "presentation": {
                "reveal": "always"//可选always或者silence,代表是否输出信息
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
vscode的代码提示功能

要在vocode项目下的c_cpp_properties.json文件中配置

            "name": "ROS",
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu11",
            "cppStandard": "c++17"

改的地方只有最后一个,将最后一项改为 cppStandard:“c++17”

vscode 打印中文乱码

在c程序的前面加上这两句话的其中一句就OK了。

setlocale(LC_CTYPE, "zh_CN.utf8");
setlocale(LC_ALL, "");
c++写publisher

老师讲的很仔细,我就把他的代码抄过来了,以后写的时候看看思路。还有好多的注释。

http://www.autolabor.com.cn/book/ROSTutorials/di-2-zhang-ros-jia-gou-she-ji/22hua-ti-tong-xin/212-hua-ti-tong-xin-zhi-c-shi-xian.html
// 1.包含头文件 
#include "ros/ros.h"
#include "std_msgs/String.h" //普通文本类型的消息
#include 

int main(int argc, char  *argv[])
{   
    //设置编码
    setlocale(LC_ALL,"");

    //2.初始化 ROS 节点:命名(唯一)
    // 参数1和参数2 后期为节点传值会使用
    // 参数3 是节点名称,是一个标识符,需要保证运行后,在 ROS 网络拓扑中唯一
    ros::init(argc,argv,"talker");
    //3.实例化 ROS 句柄
    ros::NodeHandle nh;//该类封装了 ROS 中的一些常用功能

    //4.实例化 发布者 对象
    //泛型: 发布的消息类型
    //参数1: 要发布到的话题
    //参数2: 队列中最大保存的消息数,超出此阀值时,先进的先销毁(时间早的先销毁)
    ros::Publisher pub = nh.advertise("chatter",10);

    //5.组织被发布的数据,并编写逻辑发布数据
    //数据(动态组织)
    std_msgs::String msg;
    // msg.data = "你好啊!!!";
    std::string msg_front = "Hello 你好!"; //消息前缀
    int count = 0; //消息计数器

    //逻辑(一秒10次)
    ros::Rate r(1);

    //节点不死
    while (ros::ok())
    {
        //使用 stringstream 拼接字符串与编号
        std::stringstream ss;
        ss << msg_front << count;
        msg.data = ss.str();
        //发布消息
        pub.publish(msg);
        //加入调试,打印发送的消息
        ROS_INFO("发送的消息:%s",msg.data.c_str());

        //根据前面制定的发送频率自动休眠 休眠时间 = 1/频率;
        r.sleep();
        count++;//循环结束前,让 count 自增
        //暂无应用
        ros::spinOnce();
    }


    return 0;
}
#include "ros/ros.h"
#include "std_msgs/String.h" 
#include 

int main(int argc ,char *argv[])
{

    setlocale(LC_ALL,"");
    ros::init(argc,argv,"talker");

    ros::NodeHandle nh;

    ros::Publisher pub = nh.advertise("chatter",10);

    std_msgs::String msg;

    ros::Rate rate(1);
    int count = 0;
    while (ros::ok())
    {
        count++;
        std::stringstream ss;
        ss<<"hello--->"< 

不会c++, 自己做下记录,熟悉一下程序书写结构*******,
之前学过一丢丢,要开始认真学了,可是C也还没熟悉。

        ros::spinonce();

这一句是

  1. 当spinOnce函数被调用时,spinOnce就会调用回调函数队列中第一个callback函数,此时callback函数被执行。
  2. spinOnce函数执行一次后,接着执行下面的语句。不像spin函数,进入到自己的内部循环,不往下执行。
  3. 等到下次spinOnce函数又被调用时,回调函数队列中第二个callback函数就会被调用,以此类推。
    大佬讲的很仔细
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/580500.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号