C语言编程
文章平均质量分 71
爱学习的草莓熊
收集点点滴滴的知识,提升自己,帮助他人
展开
-
使用typedef定义结构体的问题
在c语言编程中,typedef的使用可以提高编程效率,特别实在结构体定义中,可以节省关键字struct,使得之后结构体定义变量时方便快捷,具体举例如下:typedef struct sNode{int x;int y;}Node;此时,要定义一个类型为struct sNode 的变量s,可以这样写:Node s; //省去了前面的关键字struct这里甚至可原创 2016-10-04 21:40:47 · 2253 阅读 · 1 评论 -
使用moveit!控制真实机械臂(5)——编写真实机械臂节点中的action服务程序
上一篇文章中,我们简要介绍了ROS中action的基本知识,为了控制真实机械臂,我们已经修改了moveit配置文件,使得moveti启动后具备一个control_msgs::FollowJointTrajectoryAction类型的action客户端,接下来,我们完成该类型action的另一半,编写C++程序来实现action的服务端。由于底层机器人控制程序一般差别都很大,这里展示的只是编程要点...原创 2018-05-19 23:42:12 · 17981 阅读 · 51 评论 -
使用moveit!控制真实机械臂(3)——修改moveit配置文件来控制真实机械臂(9月27日更新)
要想使用moveit来控制真实机械臂,我们需要修改配置文件夹下的几个文件,因为默认生成的moveit配置文件中,所使用的部分参数是针对虚拟机械臂的,你可以在rviz环境下观察模型额运动,但真正的控制信号并不会发出来。具体要修改以下几个地方:1、demo.launch文件中参数fake_execution的值改为false<!--此段代码来自moveit配置文件demo.launc...原创 2018-05-13 16:08:17 · 15032 阅读 · 37 评论 -
ROS下使用mux实现多路消息切换
1、初识ROS下的mux节点MUX是单词multiplexer的简写,是数据选择器的意思。ROS下的mux节点也是这个功能,主要是实现多路消息的切换,可以比喻为消息开关。该节点属于topic_tools功能包,ROS下还有名称于此相似的 twist_mux和 cmd_vel_mux节点,他们针对特定的消息类型丰富了部分功能,但核心都是实现多路消息切换,而mux节点是针对ros下任意消息类型的(...原创 2018-05-12 10:46:42 · 2749 阅读 · 3 评论 -
使用moveit!控制真实机械臂(0)——思路
moveit!可以实现对机械臂的轨迹控制,这里的机械臂既可以是真实的,也可以是虚拟的,在此,我们想使用moveit!规划的轨迹来控制一个真实的机械臂,真实的机械臂千差万别,这里不涉及到真实机械臂的控制驱动,只讲一讲控制思路,每一条思路今后会再写文章逐步细化。基本思路:1、首先要有一个与真实机械臂相一致的机器人模型文件。这里的一致指的是机械臂连杆参数一致,模型的细微差别不受影响。这一步也不是...原创 2018-05-09 23:02:47 · 12865 阅读 · 10 评论 -
二叉树的按层遍历法
程序自己写的,肯定能运行,代码啰不啰嗦暂且不考虑了。程序功能:【实现二叉树的按层遍历法】编程关键点:【建立一个队列】【函数递归】编程思想:二叉树分好多层,因为要按层遍历,所以如果直接采用函数递归的话,一下子就深入层底了,达不到按层的目的。所以要换一个角度,按照队列顺序输出!算法步骤如下:1、把根节点A放入队列,此时队列为:A,队列头指针指向A,也就是队列第一个元素原创 2016-10-10 10:09:05 · 25928 阅读 · 20 评论 -
linux环境下,解决eclipse找不到Pylon示例程序链接库的问题
问题来源: 最近须要在linux环境下学习basler摄像头的使用方法,安装了basler的套装程序pylon5,该套装程序提供了开发程序所必须的库文件,并在Sample文件夹下提供了一些示例程序,每个示例程序都配好了makefile文件,在终端里运行make,即可生成可执行文件。 但是,若不使用原有的makefile文件,而是将示例程序的.cpp文件添加到eclipse工程中编译时,就会因缺少原创 2017-10-15 20:47:21 · 710 阅读 · 0 评论 -
使用邻接表进行拓扑排序的算法说明
讲拓扑排序的概念,先来回顾一个大家熟悉的东西:技能树(图)! 因为这个特好理解,玩过暗黑或其他RPG游戏的都应该见过类似的技能树,一句话,就是学习高级技能前需要先学习之前的低级技能。 一个技能树其实是一个简单的图,你可以把它再变化一下就是一张图,即让一些高级技能间也发生联系,使得学习一种高级技能可以通过多种途径,于是这就是一个正儿八经的图了。 拓扑排序就是要排出这样一个线性序列,即“高等技原创 2016-12-30 15:03:09 · 12368 阅读 · 4 评论 -
快速排序算法说明
快速排序算法的主要思想是分段与递归。 分段:取出一个元素,将它放到一个特定位置,是的左边的数全小,右边的数全大 递归:对左边的数执行该算法,对右边的数执行该算法。那么,分段过程中,如何找到这样一个特定的分段位置呢?来看一下算法在递归前的运行过程。 假设有一个数组,其中7个数如下图所示,需要进行快排。 我们需要i,j 做两个下标,指向数组两头,还有一个临时变量temp,用来当临时的容器。 首原创 2016-12-29 20:23:14 · 414 阅读 · 0 评论 -
“头插法”与“尾插法”建立线性链表的异同
当我们建立一个线性链表的时候,可以使用不同的插入方式,一种被称为“头插法”,另一种被称为“尾插法”,这两种方法都能够建立链表,但最终使用时稍有区别。采用头插法建立链表时,新加入的元素指向链表头,链表头指向新加入的元素。假如现在有一个待插入数据的链表指针Head,程序中你用malloc()动态开辟了一个链表节点,并用一个叫temp的指针指向该节点,下面两句话能够将新节点以头插法链入链表原创 2016-12-29 15:07:54 · 12341 阅读 · 1 评论 -
一种在嵌入式环境下的2D游戏栅格地图绘制方法
在嵌入式系统开发中,如果你想要在LCD屏幕上绘制一幅二维栅格地图(就像坦克大战那样的砖块地图),该如何实现呢?应该会用到一个二维数组来存储地图信息,但如何构建这幅地图呢?肯定不是手工在数组里赋值吧,那样很麻烦,也不直观,我在我的课程实验中是这样做的,使用画图软件先“画一幅地图”,然后通过数据转换实现地图的直观、快捷设计,适用于小的实验程序,分享给大家。实验开发环境:嵌入式芯片为STM32F42原创 2016-12-12 09:33:38 · 2772 阅读 · 0 评论 -
scanf(),getchar(),gets()区别与用法
这几个常见的输入函数时常困扰着初学编程的人,简单介绍一下区别与用法。一、scanf();本人最常用,基本格式就是scanf(“%d,%c”,&a,&b);输入的数量可以继续扩充,能够将键盘输入以不同格式保存在变量里,功能强大。注意点:1、不要忘了加“&”,这个取地址符很重要,表明数据要放到这个地址去,有人经常丢;2、scanf(),判断输入结束的标志是空格和回车,所以输入字符串时,原创 2016-10-08 10:18:28 · 5345 阅读 · 1 评论 -
使用Qt5为Ros项目添加GUI界面
开发ROS程序的过程中,有时需要给程序加一个Qt界面以方便操作,对于一个刚刚创建的ROS程序来说,添加qt界面需要对cmakelist.txt文件配置很多东西,许多人难就难在不会修改对应的cmakelist.txt文件上,下面是我根据网上资料整理的一份ROS+Qt5的工程创建方法,包括了从创建一个最基础的ros空间到添加界面的全过程。系统环境:ubuntu16.04 ros版本:kineti...原创 2018-09-03 10:18:58 · 14162 阅读 · 21 评论