自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wangbinyantai的专栏

技术需要慢慢积累。。。

  • 博客(88)
  • 资源 (1)
  • 收藏
  • 关注

原创 仿真一个陀螺 gazebo

注意,这个路径必须是对的,才能够显示正确,目前我不知道怎么设置这个查找路径,所以就先直接写了该路径。然后启动下面命令即可rosrun gazebo_ros spawn_model -file `rospack find gazebo_ros`/objects/top.urdf -urdf -model top -z 0.5rosservice call gazebo/appl...

2020-02-17 11:20:35 602

原创 Gazebo ROS API for C-Turtle

gazebo提供了很多ros的API,允许用户操作或者获取各种仿真世界的信息,pose和twist是刚体的状态,一个对象有内部的特性,比如指令和摩擦系数,gazebo中,body是一个刚体,和urdf中的link一样,一个gazebo model有body和joint组成为了确保这个包被编译,但是不确定有什么用,还是先执行了,rosmake gazebo_ros启动gazebo一个...

2020-02-17 10:33:40 1081

原创 ROS 基础学完后,接下来的动作

看完初级的tutorials,掌握了基本概念,但是对ROS控制机器人没概念,那么首先从一个模拟器开始会比较直观,这里选择PR2模拟器ROS真正的吸引力不在于它自己发布或订阅的中间件,而在于ROS为世界各地的开发者提供了一种标准机制来分享他们的代码。大量现成可用的程序包(packages)已经势不可挡。要会仿真,首先要知道怎么用仿真器,那么先学习simulator_gazebo首先...

2020-02-10 12:36:21 2309

原创 录制与回放数据

将ROS系统运行过程中的数据录制到一个.bag文件中,然后通过回放数据来重现相似的运行过程。由于之前做过其他的tutorials,所以关闭ros,重新打开roscore等还是用小乌龟的例子,检测系统中所有的话题rostopic list -vroot@ben-virtual-machine:~# rostopic list -vPublished topics:* /tu...

2020-02-09 12:06:35 1087

原创 编写简单的服务器和客户端

根据tutorials,beginner tutorials中的src下建立对应的cpp文件,然后在cmakelist.txt(/root/catkin_ws/src/beginner_tutorials)中增加下面一段。add_executable(add_two_ints_server src/add_two_ints_server.cpp)target_link_libraries...

2020-02-09 10:09:10 369

原创 编写简单的发布器和订阅器并测试

使用c++和python两种方式首先使用c++1:创建一个发布器节点mkdir -p ~/catkin_ws/src/beginner_tutorials/src 先创建一个文件夹,用于存储该代码包的源码具体代码参考tutorial初始化 ROS 系统 在 ROS 网络内广播我们将要在 chatter 话题上发布std_msgs/String类型的消息 以每秒 10 ...

2020-02-08 23:14:49 933

原创 创建ROS消息和ROS服务

首先需要理解msg和srv创建一个message$ cd ~/catkin_ws/src/beginner_tutorials$ mkdir msg$ echo "int64 num" > msg/Num.msg查看package.xml, 确保它包含一下两条语句: <build_depend>message_generation</build...

2020-02-08 10:33:06 392

原创 ros编辑器

rosed是rosbash的一部分。利用它可以直接通过package名来获取到待编辑的文件而无需指定该文件的存储路径了。例如rosed roscpp Logger.msg 内部使用的是vim也可以修改默认的EDITOR 。export EDITOR='emacs -nw'但是如果要其他终端也生效,需要修改~/.bashrc...

2020-02-08 10:31:59 447

原创 roslaunch启动launch文件中多节点

roslaunch可以用来启动定义在launch文件中的多个节点。由于之前没有调用setup.bash,没有添加工作区路径到ros环境中,所以一开始使用roscd的时候找不到,添加后就可以了通过查看ROS_PACKAGE_PATH 也可以看到新添加的路径。创建一个文件夹launch,然后创建一个文件touch turtlemimic.launch<launch>...

2020-02-08 10:31:29 2548

原创 rqt_console 和 roslaunch

rqt_console属于ROS日志框架(logging framework)的一部分,用来显示节点的输出信息。rqt_logger_level允许我们修改节点运行时输出信息的日志等级(logger levels)(包括 DEBUG、WARN、INFO和ERROR)。Fatal是最高优先级,Debug是最低优先级。通过设置日志等级你可以获取该等级及其以上优先等级的所有日志消息。比如,将日志等级...

2020-02-07 21:57:02 178

原创 理解ROS服务和参数

服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request)并获得一个响应(response)rosservice list,列出当前的服务 rosservice type clear 查看clear服务的类型。clear类型是std_srvs/Empty,这种表示clear不需要发送参数,也没有接收的响应。rosservice call cl...

2020-02-07 21:34:00 534

原创 ROS message 消息

话题之间的通信是通过在节点之间发送ROS消息实现的。对于发布器(turtle_teleop_key)和订阅器(turtulesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定的rostopic type /turtle1/cmd_vel 可以查看消息的类型rosmsg show geometry_msgs/Twis...

2020-02-07 18:51:00 648

原创 ROS话题topic

turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来互相通信的。turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息话题一个发布,一个订阅。再打开一个终端,输入如下,rosrun rqt_graph rqt_graph,rqt_graph能够创建一个显示当前系统运行情况的动态图形...

2020-02-07 18:20:46 397

原创 ROS节点

首先是一些基本概念,这里只是先列出来。统一理解。Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。rosout: ROS中相当于std...

2020-02-07 17:54:57 272

原创 ubuntu16.04下安装v-rep

1:首先去官网下载http://coppeliarobotics.com/downloads如下图所示,选择linux版本,教育版选择ubuntu16.04的版本。并选择教育版2:将windows中下载好的文件放到ubuntu虚拟机中,执行 xz -d CoppeliaSim_Edu_V4_0_0_Ubuntu16_04.tar.xz 其中xz是linux的解压...

2020-02-07 16:26:30 4497 9

原创 ROS 基础使用1

ROS的安装可以按照教程来。不再多说http://wiki.ros.org/kinetic/Installation/Ubuntu如果你在查找和使用ROS软件包方面遇到了问题,请确保你已经正确配置了脚本环境。一个检查的好方法是确保你已经设置了像ROS_ROOT和ROS_PACKAGE_PATH这样的环境变量,可以通过以下命令查看:$ export | grep ROSrosb...

2020-02-07 16:24:17 166

原创 bashrc的作用

home 目录下藏着很多隐藏文件。如果你在运行Linux 发行版的话,你就会在靠近隐藏文件列表的上方看见一个名为.bashrc的文件。那么什么是.bashrc,编辑.bashrc又有什么用呢?bash 很可能是作为默认终端被安装的。虽然存在很多不同的shell,bash 却是最常见或许是最主流的。bash 是一个能解释你输入进终端程序的东西,并且基于你的输入来运行命令。它在一定程度上...

2020-02-07 14:05:35 921

原创 如何查看Ros的版本号

今天准备安装V-rep,想看下ROS的版本,之前安装了ROS,一直忙于工作,没有太多时间学习,趁着这段时间,多了解一些机器人仿真相关知识。查看ROS版本号如下步骤,在ubuntu16.04中操作。1、先在终端输入roscore2、打开新终端,再输入,rosparam list3、再输入rosparam get /rosdistro就能得到版本...

2020-02-07 12:25:25 10612 2

原创 VS2017 堆栈的修改

偶尔会遇到这种堆栈溢出的问题,可以通过修改堆栈的reserve size。默认1M,比如修改为10M

2018-05-25 09:51:23 10350

原创 vs2017 使用fopen_s error问题解决

vs是一个很好的软件编辑器,有时候我们只是希望编写一些c语言的程序,使用vs进行仿真,仿真成功后可以移植到linux的环境。或者使用gcc等编译器的地方,但是像fopen_s这种函数是微软的所以为了移植性,最好使用标准的fopen函数。、为了在vs下屏蔽fopen的报警,需要设置如下。项目-&gt;属性-&gt;配置属性-&gt;C/C++ -&gt; 预处理器 -&gt; 预处理器定义,增加_C...

2018-05-25 09:46:24 7655 3

原创 scara 机器人三四轴机械结构

滚珠丝杆螺母----旋转运动,花键螺母------轴向运动,可以看到杆上面有竖着的螺纹,而不是普通杆上面只有螺旋的螺纹竖着的螺纹就是花键用的。如果只动四轴电机,四轴的转动会让杆旋转,就像滚珠丝杆一样,但是同时杆也会上下动。原因如下:根据机械解耦矩阵:J3 = A3*M3+A34*M4 也就是说,如果三轴不动。M3 = 0. 那么4轴转动M4不为零的时候,杆也会跟着上下动。如果三轴也跟着相反方向转...

2018-05-18 16:26:02 6870

转载 AF_INET与PF_INET区别

在写网络程序的时候,建立TCP socket:   sock = socket(PF_INET, SOCK_STREAM, 0);然后在绑定本地地址或连接远程地址时需要初始化sockaddr_in结构,其中指定address family时一般设置为AF_INET,即使用IP。相关头文件中的定义:AF = Address Family             PF = Protocol Famil...

2018-05-05 15:32:57 2271

转载 SOCK_STREAM与SOCK_DGRAM的区别

对于网络socket的一些理解---------------------------------------------------------------------------------------------------------------SOCK_STREAM是有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料(如文件)传送。SOCK_DGRAM是无保障的面向消...

2018-05-05 15:20:24 3442

原创 char *a[10]与char (*a)[10] 两种定义的不同

char *a[10];This declares array of 10 pointers to char .  十个指针Whereas , char (*a)[10];declares pointer to array of 10 char's            一个指针

2018-05-05 15:10:31 8090

原创 工业网络一些术语

FCS: Frame check sequenceIFG: Interpacket gapoctets 是8 bit的意思,一般用于通信。

2018-04-18 10:39:37 468

原创 c语言结构体嵌套的对齐方式

1:在代码中有结构体嵌套的方式,又需要获取每个变量的地址。那么需要了解结构体嵌套和单一结构体的一些对齐方面的规则。2:对于嵌入式的设备来说,对齐很重要,有些cpu不支持不对齐的访问方式,有的cpu支持,只是效率上会降低。3:arm中默认编译的时候会进行对齐。规则一:结构体中的第一个成员位置在偏移量0,之后每个变量的偏移量必须是它本身字节数的整数倍。规则二:如果结构体中嵌套结构体,那么嵌套的结构体的...

2018-04-16 11:05:05 6459

原创 c语言 pow和sqrt注意

头文件:#include &lt;math.h&gt;sqrt() 用来求给定值的平方根,其原型为:    double sqrt(double x);【参数】x 为要计算平方根的值。如果 x &lt; 0,将会导致 domain error 错误,并把全局变量 errno 的值为设置为 EDOM。【返回值】返回 x 平方根。注意,使用 GCC 编译时请加入-lm。----------------...

2018-03-15 09:31:59 6724 1

转载 c语言中的求整函数

1234567#include &lt;math.h&gt; double ceil(double x); double floor(double x); double round(double x);ceil(x)返回不小于x的最小整数值(然后转换为double型)。floor(x)返回不大于x的最大整数值。round(x)返回x的四舍五入整数值。给个例子test.c: ?12345678910...

2018-03-12 10:21:04 474

原创 rtems环境搭建(1)

转到linux平台的原因:在windows下开发的时候虽然使用了msys2,虚拟了类linux环境,安装rtems等都没有问题,但是因为要使用网络栈,libbsd的网络栈是由waf进行编译的,waf是一个python脚本。在msys2中配置waf的时候遇到问题,可能是因为msys2中路径带有windows特色,导致waf配置的时候无法识别rtems的路径。step1:下载ubuntu 16.04....

2018-03-08 14:22:21 857 1

转载 DMIPS/MHZ的解释

今天看arm处理器的时候这个单位不明白,网上搜索一下终于明白了,记录如下。DMIPS: Dhrystone Million Instructions executed Per Second :主要用于测整数计算能力。 其中:   MIPS: Million Instructions executed Per Second,每秒百万条指令,用来计算同一秒内系统的处理能力,即每秒执行了多少百万条指令 ...

2018-02-23 10:30:49 19416 1

原创 arm cache (1)

因为要将关键代码放到L2  cache中使用。所以,现在需要考虑 L2 cache的lockdown 功能,zynq wiki上面有这方面的介绍,网址如下,也有例程可以参考http://www.wiki.xilinx.com/Zynq-7000+AP+SoC+Boot+-+Locking+and+Executing+out+of+L2+Cache+Tech+Tip暂时记录下来,后面参考

2018-02-07 12:09:23 418

转载 关于”error conflicting types for function”编译错误的分析

在使用gcc编译C程序时,有时会碰到“error: conflicting types for ‘function’”的编译错误。从字面意义上理解,是说函数的定义和声明不一致。(一)首先我们看一个函数的定义和声明不一致的例子:#include int func(int a);int func(void) { return 0;}int main(void)

2018-02-05 11:10:51 3694

原创 rtems 文件系统(15)-jffs2 研究(8)总结

1:解决了之前的问题后,有发现读写大文件有问题。因此查看了底层驱动,是底层驱动的问题,首先读的时候底层驱动只设置了32个 4byte的阈值,所以读取大块的时候分开读取。写的时候不能一次超过256,不能写到一个页上面。这些都是底层驱动和文件系统联系的问题。因为文件系统是很灵活的。所以底层驱动要和上层操作系统紧密结合。2: 经过验证,现在建立文件夹,删除文件,读写文件,删除文件,建立大的文件,进入

2018-02-05 09:48:25 613

原创 rtems 文件系统(15)-jffs2 研究(7)--->cd命令错误问题查找

[/flash] # cd a0jffs2_lookup()jffs2_igetilookupmalloc new_inode 6440a8 ####################################jffs2_read_inode(): inode->i_ino == 2[JFFS2 DBG] jffs2_do_read_inode: read inode

2018-01-31 21:09:12 1259 1

原创 rtems 文件系统(15)-jffs2 研究(6)

发现不深入了解jffs2完全无法理解错误的根源。更别说找出错误了。还是脚踏实地慢慢来吧。根据5的一些输出信息。我来一步步分析吧输入mkdir命令后。会调用 jffs2_mknod函数,目录也是一个node1:首先分配一个jffs2_raw_inode类型2:进入jffs2_reserve_space函数,保留空间,如果需要保留的空间不够,会触发jffs2_garbage_colle

2018-01-31 17:19:35 732

原创 rtems 文件系统(15)-jffs2 研究(5)--测试打印记录mkdir,嵌套mkdir

记下来测试建立多个文件夹,和文件夹嵌套是否有问题。记录打印信息[/flash] # ls[/flash] # mkdir datajffs2_lookup()JFFS2: jffs2_reserve_space(): Requested 0x44 bytesJFFS2: jffs2_reserve_space(): alloc sem gotJFFS2: jffs2_f

2018-01-30 14:54:53 477

原创 rtems 文件系统(15)-jffs2 研究(4)

经过前面的分析。找到了问题所在,按照分析应该是一些擦除标志没有写入导致错误。追踪这个问题的代码从函数jffs2_erase_pending_blocks跟进去。内部调用了jffs2_erase_block,再调用jffs2_flash_erase。最终调用到底层驱动函数。发现底层驱动函数擦除的时候计算块的时候有问题。如果地址刚好是sector起始地址,并且擦除的数量是sector大小的时候,计

2018-01-30 10:31:51 885

原创 rtems 文件系统(15)-jffs2 研究(3)

下面考虑第一个问题JFFS2: Node totlen on flash (0xFFFFFFFF) != totlen from node ref (0x0000000C)这部分在jffs2_mark_node_obsolete中打印,因为调用这个函数的太多了,没法一个个打断点,所以我在报错的地方打个断点,然后看看能不能向后追溯。输入建立文件夹的命令,然后看打印信息向后追溯[/fl

2018-01-29 21:35:08 1057 1

原创 rtems 文件系统(15)-jffs2 研究(2)

接着之前的说step6:1:接下来调用 jffs2_build_filesystem 函数去建立文件系统,首先是设置scan flag位,进入scan.c中进行扫描,调用的函数是jffs2_scan_medium其中有个配置是关于nand flash的CONFIG_JFFS2_FS_WRITEBUFFER,我使用的是nor,所以用不到,在网上找到解释如下JFFS2_FS_WRI

2018-01-29 17:29:05 1088

原创 关于printf输出格式%#08x的解释

#代表的是在字符串前面加上0x。08表示输出8个字符。x是输出16进制当然你也可以写成0x%08x,但是这两种是有区别的。一个输出包括0x输出8bit,而第二种包含0x输出10bitint i = 7;printf("%#010x\n", i); // gives 0x00000007printf("0x%08x\n", i); // gives 0x00000007pri

2018-01-29 10:14:28 30252 1

十六进制转化为十进制

改进的十六进制转化为十进制的代码,可以判断输入是否是正确的数值

2012-02-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除