ROS进二阶学习笔记(2)- SMACH:用状态机来管理机器人任务

ROS进二阶学习笔记(2)- SMACH:用状态机来管理机器人任务 ROS进二阶学习笔记(2) - SMACH:用状态机来管理机器人任务 http://wiki.ros.org/smach/Tutorials/Getting Started http://wiki.ros.org/smach/Tutorials 好久没有更新关于ROS的笔记,这里进入SMACH的学习和应用,参照rbx2(ros by example volume 2),和ROS官方wiki,进行学习。 ==== 关于概念 SMACH states是Python类,通过重写exe​​cute()方法来返回一个或多个可能的outcomes, 从而扩展smach.State类。 excute() 方法也可以通过可选的参数来来定义一个userdata集合,这个集合可以被用来传递状态之间的信息。本质上讲,状态执行的实际计算基本上可以是任何你想要的。并且,有很多预先定义好的state types ,这可以节省大量的非必须的代码。 A SMACH state machine is another Python class (smach.StateMachine) that can contain a number of states. A state is added to a state machine by defining a set of transitions from the state’s outcomes to other states in the machine. When a state machine is run, these transitions determine the flow of execution from state to state: input → STATE_1 → {outcome, transition} → STATE_2

READ MORE

用scp传输文件

用scp传输文件 === scp in linux : 用ssh传输文件 == ref: https://www.vpser.net/manage/scp.html === 获取远程服务器上的文件 === scp root@www.vpser.net:/root/lnmp0.4.tar.gz /home/lnmp0.4.tar.gz scp -P 2222 root@www.vpser.net:/root/lnmp0.4.tar.gz /home/lnmp0.4.tar.gz 上端口大写P 为参数,2222 表示更改SSH端口后的端口,如果没有更改SSH端口可以不用添加该参数。 root@www.vpser.net 表示使用root用户登录远程服务器www.vpser.net,:/root/lnmp0.4.tar.gz 表示远程服务器上的文件,最后面的/home/lnmp0.4.tar.gz表示保存在本地上的路径和文件名。还可能会用到p参数保持目录文件的权限访问时间等。 === 获取远程服务器上的目录 === scp -P 2222 -r root@www.vpser.net:/root/lnmp0.4/ /home/lnmp0.4/ 上端口大写P 为参数,2222 表示更改SSH端口后的端口,如果没有更改SSH端口可以不用添加该参数。-r 参数表示递归复制(即复制该目录下面的文件和目录);root@www.vpser.net 表示使用root用户登录远程服务器www.vpser.net,:/root/lnmp0.4/ 表示远程服务器上的目录,最后面的/home/lnmp0.4/表示保存在本地上的路径。 === 3、将本地文件上传到服务器上 === scp -P 2222 /home/lnmp0.4.tar.gz root@www.vpser.net:/root/lnmp0.4.tar.gz 上端口大写P 为参数,2222 表示更改SSH端口后的端口,如果没有更改SSH端口可以不用添加该参数。 /home/lnmp0.4.tar.gz表示本地上准备上传文件的路径和文件名。root@www.vpser.net 表示使用root用户登录远程服务器www.vpser.net,:/root/lnmp0.4.tar.gz 表示保存在远程服务器上目录和文件名。 === 4、将本地目录上传到服务器上 === scp -P 2222 -r /home/lnmp0.4/ root@www.vpser.net:/root/lnmp0.4/ 上 端口大写P 为参数,2222 表示更改SSH端口后的端口,如果没有更改SSH端口可以不用添加该参数。-r 参数表示递归复制(即复制该目录下面的文件和目录);/home/lnmp0.4/表示准备要上传的目录,root@www.vpser.net 表示使用root用户登录远程服务器www.vpser.net,:/root/lnmp0.4/ 表示保存在远程服务器上的目录位置。 5、可能有用的几个参数 : -v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 .

READ MORE

Ubuntu - usb转串口设备的访问权限设置

Ubuntu - usb转串口设备的访问权限设置 可以用如下命令查看串口信息: ls -l /dev/ttyUSB* 但是普通用户没有usb操作权限,下面介绍如何设置usb串口操作权限: 用命令增加访问权限: sudo chmod 666 /dev/ttyUSB0 通过增加udev规则来实现 步骤如下: 创建文件: sudo gedit /etc/udev/rules.d/70-ttyusb.rules 在文件内增加一行 KERNEL=="ttyUSB[0-9]*", MODE="0666" 重新插入USB转串口设备,普通用户就有权限访问了。 另一种写法: 70-ttyusb.rules文件还有另一种写法,先用lsusb查看USB转串口芯片的idVendor和idProduct #lsusb 显示结果中有这么一行 Bus 005 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC 其中 ID 0403:6001表示idVendor=0403,idProduct=6001 70-ttyusb.rules的内容如下: SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001",MODE="0666", 重新插入USB转串口设备,普通用户同样可以访问了。除此之外,还可以: 重新指派usb转串口模块在linux系统中的设备调用名称(English Version: remap your usb-serial devices’ names in Linux )

READ MORE

ROS:使用ROS_arduino_bridge Stack

ROS:使用ROS_arduino_bridge Stack 使用ROS_arduino_bridge Stack 使ROS得到odom信息 和 使move base(移动底盘)获得 cmd_vel信息,需要个桥梁。 而修改 ROS_arduino_bridge Stack 后可以完成此任务。 目的就是 发布 odom 和 使movebase(移动底盘)得到cmd_vel 信息,从而控制底盘运动。 斟酌后,Finally,使用stack(后来叫做 Metapackage): ROS Arduino Bridge 来完成此项工作: ref: http://wiki.ros.org/ros_arduino_bridge https://github.com/hbrobotics/ros_arduino_bridge/blob/indigo-devel/README.md 使用ROS_arduino_bridge Stack 参照 ref 中github中 readme.md 进行配置。 最后一个Section : Note中说明了如果在硬件与它们不匹配的情况下依然使用这个 stack 帮助快速建立 ROS and arduino连接的方法。 check out 代码命令: $ cd ~/catkin_ws/src $ git clone https://github.com/hbrobotics/ros_arduino_bridge.git $ cd rbx1 $ git checkout hydro-devel $ cd ~/catkin_ws $ catkin_make $ source ~/catkin_ws/devel/setup.bash install the ROSArduinoBridge library for Arduino ref : https://www.arduino.cc/en/Guide/Libraries#toc5 来手动滴add Library: Restart the Arduino application.

READ MORE

ubuntu解决resolv.conf被重写问题

ubuntu解决resolv.conf被重写问题 解决resolv.conf被重写问题 来源:http://www.cnblogs.com/lanxuezaipiao/p/3613497.html 第二步中你虽然配置了DNS,但是每次重启虚拟机或重启网络后/etc/resolv.conf文件就会被重写,也就是又恢复原样了,你以前的配置就不存在了,每次都要手动配置是极不可取的,所以这步是必须的,首先我们要搞清楚resolv.conf被重写的原因和机制,这在不同Ubuntu版本下有所差异。那怎么知道呢?一般resolv.conf文件一开头就告诉你了。 解决该问题其实有两种办法,不怕麻烦的想理解原理的请参照方法一(与版本有关),怕麻烦的不想折腾的自觉转到方法二(与版本无关)。 方法一:与版本有关 a)Ubuntu 12.10 打开/etc/resolv.conf后可看到开头的一句话: # Generated by NetworkManager 说明resolv.conf这个文件是由NetworkManager这个程序生成的(对应的是network-manager服务),那么解决办法也就来了:我们关掉network-manager即可,命令如下: sudo service network-manager stop 或者 sudo /etc/init.d/network-manager stop 但是这种方法不是一劳永逸的,因为每次重启系统后还是会自动启动这个服务,因此我们需要完全禁止network-manager启动即可。 编辑network manager的配置文件/etc/init/network-manager.conf: sudo vi /etc/init/network-manager.conf 注释掉其中的start on部分即可: # network-manager - network connection manager # # The Network Manager daemon manages the system's network connections, # automatically switching between the best available. description "network connection manager" #start on (local-filesystems # and started dbus # and static-network-up) stop on stopping dbus expect fork respawn script # set $LANG so that messages appearing on the GUI will be translated.

READ MORE

ROS_Stack

ROS_Stack rostopic pub my_topic std_msgs/String "hello there" *** Multi_line_pub *** $ rostopic pub /send_BTSVR std_msgs/String "data: '\ first line second line third line '" === 【创建ROS Package (catkin) 】=== 1. 确认你的catkin Workspace:~/catkin_ws/ 2. $ cd ~/catkin_ws/src 3. 创建package (http://wiki.ros.org/ROS/Tutorials/catkin/CreatingPackage) catkin_create_pkg <package_name> [depend1] [depend2] [depend3] ... [dependn] e.g.: catkin_create_pkg beginner_tutorials std_msgs rospy roscpp 4. 编译catkin Workspace: cd ~/catkin_ws catkin_make 5. Source the generated setup file: $ . ~/catkin_ws/devel/setup.bash 6. 可用工具: rospack roscd <package_name> 7. Customize Your Packages: http://wiki.ros.org/ROS/Tutorials/CreatingPackage#ROS.2BAC8-Tutorials.2BAC8-catkin.2BAC8-CreatingPackage.Customizing_Your_Package 8. the binary file generated after your building your catking project is in this path: /home/exbot/catkin_ws/devel/lib/{your pkg_name} === 【Eclipse Project 生成步骤:】 ==== Generate the Eclipse Files for dev.

READ MORE

Linux调整磁盘分区大小

Linux调整磁盘分区大小 Resize the disk (Linux调整磁盘分区大小) Resize the partition. Run parted: $ parted Show the partition list: (parted) print There should be two partitions; 1 should be a boot partition, about 64MB; the second should be the main partition, about 3.6G Some Disk Commands of Linux, that you should know: sudo df -h Display the FileSystem that you mounted sudo fdisk -l Show your disk information that is unmounted or un-parted Sonictl: Here I didn’t see two partitions by print command. but fdisk -l showed me that.

READ MORE

Fixed- Failed to create VirtualBox COM object REGDB_E_CLASSNOTREG (0x80040154)

Fixed- Failed to create VirtualBox COM object REGDB_E_CLASSNOTREG (0x80040154) Fix: Failed to create VirtualBox COM object REGDB_E_CLASSNOTREG (0x80040154) January 16, 2014 Blog 0x80040154, com object, failed to create, virtualbox Kirt When opening Oracle VM one day, you stumble upon this message (note the error code 0x80040154): Failed to create the VirtualBox COM object. The application will now terminate. Callee RC: REGDB_E_CLASSNOTREG (0x80040154) virtualbox创建COM对象失败,程序终止。召唤者 RC: REGDB_E_CLASSNOTREG (0x80040154) 。 【解决】 The Virtual Machine service isn’t running. A reinstall would probably work but there is an simpler fix:

READ MORE

ROS进二阶学习笔记(1) TF 学习笔记3 -- TF Listener 编写 (Python)and Adding frame(Python)

ROS进二阶学习笔记(1) TF 学习笔记3 – TF Listener 编写 (Python)and Adding frame(Python) ROS进二阶学习笔记(1) TF 学习笔记3 – TF Listener 编写 (Python) Ref: http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20%28Python%29 In the previous tutorials we created a tf broadcaster to publish the pose of a turtle to tf. In this tutorial we’ll create a tf listener to start using tf. and use tf to get access to frame transformations. 还是要请先读了Ref 再来这里sonictl@csdn看总结: 这个listen的程序做了3件事情: 放个 turtle2乌龟到舞台上去,用的turtlesim/Spawn服务; 用tf.TransformListener类下的lookupTransform方法,查询turtle2 相对于 turtle1 的位置。 用查到的相对位置来发布cmd速度和角速度信息,引导 turtle2 运动 看看代码 我小改了下代码: (path: nodes/learning_tf_listener.py ) 1. #!/usr/bin/env python 2. import roslib 3.

READ MORE

ROS进二阶学习笔记(1) TF 学习笔记2- -- TF Broadcaster 编写 (Python)

ROS进二阶学习笔记(1) TF 学习笔记2- – TF Broadcaster 编写 (Python) ROS进二阶学习笔记(1) TF 学习笔记2 – TF Broadcaster Ref: http://wiki.ros.org/tf/Tutorials#Learning_tf Ref: Writing a tf broadcaster (Python) This tutorial teaches you how to broadcast the state of a robot to tf. Ref内的东西请读者自行研读,这里要做点总结: /tf topic上 是有一个发布器broadcaster 发布 /tf 消息才能被 /tf 的 listener 收听到。 /tf 的发布器类:python: tf.TransformBroadcaster 所以我们要理解它里面的方法: sendTransform(translation, rotation, time, child, parent) 1. 先看看tf broadcaster的示例代码: 1. #!/usr/bin/env python 2. import roslib 3. roslib.load_manifest('learning_tf') 4. import rospy 5. 6. import tf 7. import turtlesim.msg 8. 9. def handle_turtle_pose(msg, turtlename): 10.

READ MORE