加载中…
请输入标题
暂无内容
个人资料
BigSam78
BigSam78
  • 博客等级:
  • 博客积分:0
  • 博客访问:590,156
  • 关注人气:170
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
访客
加载中…
好友
加载中…
评论
加载中…
留言
加载中…
博文
(2017-04-25 11:11)
分类: 机器人-ROS
作者: Sam (甄峰)  sam_code@hotmail.com

在控制机器人的PC,嵌入式系统启动时,常常需要ROS程序随开机启动。Sam尝试了多种方法,现记录如下:

1. ROS官方方法:
Robot_upstart:
The robot_upstart package provides scripts which may be used to install and uninstall Ubuntu Linux upstart jobs which launch groups of roslaunch files.

所以,这个方法可能仅支持Ubuntu Linux。它提供scripte来安装和卸载随机启动的ROS工作。 可以使用roslaunch等。

1.1:安装(indigo-ROS下):
$sudo apt-get install ros-indigo-robot-upstart 

1.2: 设置某个Package的launch文件为开机启动 .launch:
Sam有个Package:beacool_bringup, 它其中有个
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

nvidia

tk1

分类: linux_kernel
作者: Sam (甄峰)  sam_code@hotmail.com

这段时间,一直在Nvidia TK1 平台上做事。但Kernel,driver等都依赖朋友公司提供。最近,突然发现Nvidia网上提供一篇文章。对编译Kernel有讲解。
http://www.jetsonhacks.com/2016/06/20/intel-realsense-camera-installation-nvidia-jetson-tk1/


1. 下载Kernel到TK1中:
wget http://developer.download.nvidia.com/embedded/L4T/r21_Release_v4.0/source/kernel_src.tbz2

2. 编译:
tar -xvf kernel_src.tbz2
zcat /proc/config.gz > .config
TK1的 /proc/目录下有个文件,config.gz , 确实是Kernel配置时的配置文件。
make xconfig

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2017-03-23 16:11)
标签:

linux

char

int

分类: C
作者: Sam (甄峰)  sam_code@hotmail.com

0.
之前对窄数据类型向宽数据类型转换转换时,符号扩展,零扩展稍有了解,具体什么时候用符号扩展,什么地方用零扩展,并不清楚。所以常用按位与(&) 按位或(|) 等操作来保证扩展部分与编程思路的统一。

这次在使用iBeacon协议时,信号强度的dbm值保存在一个字节中。有时作为原码,有时又要求补码。为了验证,常要printf出来。 这下就要求把零扩展和符号扩展搞清楚。


1. 何时使用零扩展,何时使用符号扩展:
当窄数据类型为:有符号数据类型时,扩展为宽数据类型时,使用符号扩展。
当窄数据类型为:无符号数据类型时,扩展为宽数据类型时,使用零扩展。

例1: 有符号数扩展(符号扩展)
int8_t rssi = 0xBE;
int rssi_4byte = 0;

rssi_4byte = rssi;
解析:
rssi为8位有符号数,则使用符号扩展。
0xBE:   10111110B. 最高位为1。所以使用1扩展到其
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2017-03-16 21:28)
标签:

ble

分类: Bluetooth
作者:Sam(甄峰)  sam_code@hotmail.com

非常久没有看Bluetooth了。这次又需要在Linux下读取iBeacon广播消息。现在记录一些必要的信息如下:


1. BLE报文结构:


1. 前导

  前导是一个8比特的交替序列。他不是0101

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

autoconf

configure

分类: linux
作者:Sam (甄峰) sam_code@hotmail.com

使用autoconf 交叉编译时,会遇到非常多异常。Sam一向是强行改过来就好。但也知道这不是正规做法。现在把一些做法记录如下:


问题1:
CC=arm-linux-gnueabihf-gcc ./configure --host=arm-linux
报错:
checking for growing stack pointer... configure: error: in `/home/sam/work/current/Source/Robot_ROS/Bluetooth/3rdParty/glib-2.51.0':
configure: error: cannot run
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

pkg-config

分类: linux
作者:Sam (甄峰)  sam_code@hotmail.com

在研究autoconf时,必然要研究到pkg-config,它非常好用。在x86-64系统下能极大的方便编译。但Sam一直没有找到它在交叉编译时该如何正确的起作用。这次就探讨一下。

1. pkg-config基本作用和用法:
1.1: 背景:
很多软件包会被其它程序使用,在此过程中,需要指定头文件位置,库文件,库文件位置等信息。如果单纯手写如下: -I/usr/include/  -lglib -L/usr/lib/ 其一是容易出错,另外,很多包在yum install, apt-get install后头文件和库文件的位置,和使用源码编译,make;make install 的位置也并不一定一致。再加上还有版本问题。所以就有了pkg-config.
pkg-config主要作用是:
  1. 检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
  2. 获得编译预处理参数,如宏定义,头文件的位置。
  3. 获得链接参数,
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

bluez

分类: linux
作者: Sam (甄峰)  sam_code@hotmail.com

之前把BlueZ 5.43在Fedora20上编译 X86 版本的过程一代而过,其实这里面还是有内容的。这次把它补上。

0. Download : 
http://www.bluez.org/
下载最新版本:当前是Bluez  5.43

1. 开始编译:
1.1:首次尝试:
$ ./configure
configure: error: GLib >= 2.28 is required
使用$rpm -qa |grep glib
glib-1.2.10-40.fc20.x86_64

可以看到,并非没有安装glib, 而是glib版本不够高。当前系统安装版本为1.2.10. 但BlueZ 需要的版本是2.28以上。






1.2: 开始编译Glib:
1.2.1:下载编译glib:
与之前的下载不同(git clone https://github.com/GNOME/gli
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: Bluetooth
作者:Sam (甄峰)   sam_code@hotmail.com

之前屡次编译BlueZ(http://blog.sina.com.cn/s/blog_602f87700100zb47.html). 中间有段时间以为不会再编译BlueZ了,其一是Android使用自己的Blue协议栈(BluetDroid)取代了BlueZ。其二是Bluetooth不再是工作重心。没想到搞ROS后,又回到Linux环境,再次需要编译Bluez.  这个令人不快的任务又一次放在面前。


0. Download BlueZ
http://www.bluez.org/

1. X86 Version make
sudo apt-get install systemd
sudo apt-get install libical-dev
sudo apt-get install libudev-dev

$./configure
$make

注意,如果没有 --enable-library,不会编译出动态或静态库的。

$./configure --enable-shared --enable-static --enable-library
$make clean;make

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: C
作者:Sam (甄峰)  sam_code@hotmail.com

在Linux Kernel或一些GNU项目中,可以看到长度设定为0的数组。之前没有深究,这次研究一下。
以下内容大量摘抄网上信息。

标准C和C++不支持0长度数组。如果定义0长数组。编译阶段就会报错。但GNU C支持零长数组,条件是作为结构体的最后一项。

但这一项因为长度为0,所以不占空间。

举例如下:

#include                 //stdio.h
#include          //sys/types.h
#include               //stdint.h
#include     // stdlib.h

typedef struct {
uint8_t subevent;
uint8_t data[0];
} __attribute__ ((packed)) test_event;

int main(int argc, char** argv)
{
int ext_size = 12;
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

ros

xtion

分类: 机器人-ROS
作者: Sam (甄峰)  sam_code@hotmail.com

ASUS Xtion是华硕使用PrimeSense技术发布的RGBD 3D设备。在机器人导航设备中,除了激光雷达,也可以使用3D摄像头来做环境采集设备。现把实际使用过程和遇到的一些问题记录如下。

问题1. Xtion插入USB口后,未能正常驱动起来。
#lsusb
可以看到设备:1D27:0600  ASUS
#dmesg
Not enough bandwidth for new device state.
怀疑有二。 
A: 记得Linux Kernel在32bit 系统中,确实有个Bug。对多个摄像头插入同一个Hub时,确实会导致带宽不足。
B: XHCI和EHCI的问题。设备也许不支持XHCI。
要解决A,需要重新安装系统到64Bit。工程巨大。所以先测试下B。
进入BISO. xHCI模式关闭掉。 XHCI Hand-off, EHCI  Hand-off 都关闭。重新启动系统。果然能解决问题。看来猜测B是正确的。


软件和驱动安装过程
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有