产生这个问题的原因是rqt_graph用到了pydot而pydot默认版本只支持pyparsing < 2.0版本。而现在系统中pyparsing的默认版本是大于2.0的。幸运的是新版的pydot已经解决了这个问题。所以解决方法很容易,就是升级pydot的版本。
sudo pip install -U pydot
产生这个问题的原因是rqt_graph用到了pydot而pydot默认版本只支持pyparsing < 2.0版本。而现在系统中pyparsing的默认版本是大于2.0的。幸运的是新版的pydot已经解决了这个问题。所以解决方法很容易,就是升级pydot的版本。
sudo pip install -U pydot
open street map
是一个开源的地图平台。网站http://www.openstreetmap.org/
网页程序的源代码在这里 https://github.com/openstreetmap/openstreetmap-website/
虽然官方有安装说明,但是由于说明的太过简略,很多关键地方没有说明,导致想要让程序在本地运行起来都很困难。下面就是我很费劲才摸索出的安装和运行方法。
以下都是以 Ubuntu 16.04 为例
sudo apt-get install ruby2.3 libruby2.3 ruby2.3-dev \
libmagickwand-dev libxml2-dev libxslt1-dev nodejs \
apache2 apache2-dev build-essential git-core \
postgresql postgresql-contrib libpq-dev postgresql-server-dev-all \
libsasl2-dev imagemagick
sudo gem2.3 install bundler
git clone --depth=1 https://github.com/openstreetmap/openstreetmap-website.git
cd openstreetmap-website
bundle install
这里最好先把ruby的源换成国内的,否则速度非常慢,换源的方法可以自己搜索一下
cp config/example.application.yml config/application.yml
cp config/example.database.yml config/database.yml
sudo -u postgres -i
createuser -s <username>
exit
bundle exec rake db:create
psql -d openstreetmap -c "CREATE EXTENSION btree_gist"
cd db/functions
make libpgosm.so
cd ../..
psql -d openstreetmap -c "CREATE FUNCTION maptile_for_point(int8, int8, int4) RETURNS int4 AS '`pwd`/db/functions/libpgosm', 'maptile_for_point' LANGUAGE C STRICT"
psql -d openstreetmap -c "CREATE FUNCTION tile_for_point(int4, int4) RETURNS int8 AS '`pwd`/db/functions/libpgosm', 'tile_for_point' LANGUAGE C STRICT"
psql -d openstreetmap -c "CREATE FUNCTION xid_to_int4(xid) RETURNS int4 AS '`pwd`/db/functions/libpgosm', 'xid_to_int4' LANGUAGE C STRICT"
bundle exec rake db:migrate
bundle exec rake test:db
以上的步骤都是官方文档里的说明,如果你想要了解更多细节可以看这里
按照官方文档下面运行
bundle exec rails server
就可以在http://localhost:3000
访问网站了。但是实际上并不可以。
你还要进行下面的步骤
bundle exec rake assets:precompile
否则会报各种缺文件的错误
注册用户
当你开始编辑的时候需要在本地的网站上注册用户。其中有邮箱的验证过程,然而本地的服务器是不会发邮件的,这样也就没办法认证。解决方法有两种,一种是改数据库里面的数据,设置用户为已认证。另一种就是,虽然没办法发邮件,但是邮件的内容会在终端输出来,把链接地址复制到浏览器里面就可以了。注意吧地址改成本地的。
申请用户token
当你注册完成之后你会发现你没办法保存自己修改的地图。甚至无法打开地图编辑页面。会有各种create_token没有定义的错误。这是由于没有给自己本地的网站设置token的原因。
在浏览器打开http://localhost:3000/user/randoms/oauth_clients/new
其中的randoms
要换成你自己注册的用户名。打开如下的界面
名字可以随便输入,Main Application URL 写成 http://localhost:3000
,当然如果你的地址不是localhost要根据自己的情况进行调整。把下面的选项全部勾上,点击注册就可以了。
注册完成之后会出现下面的页面
这样我们就获得了Consumer Key
了
打开源代码中的config/application.yml
文件
把server_url
的值修改成http://localhost:3000
把oauth_key
的值修改成刚才获得的Consumer Key
把id_key
的值修改成刚才获得的Consumer Key
保存修改然后运行
bundle exec rails server
就可以在本地使用了
最后再吐槽一下官方的文档,缺少的东西太多了。。。
在用django
的时候如果你在程序里开了其他线程(比如用作后台的长期服务程序)。那么在用django
自带的测试程序就会有问题。测试完成之后程序无法自动退出。这是由于开启的线程还在运行的原因。
解决方法也比较简单。这是因为django
的测试代码中用的是sys.exit()
来退出。但是当python
程序还有其他线程在执行的时候这个指令是没办法退出的。
把 django/core/management/commands/test.py
def handle(self, *test_labels, **options):
from django.conf import settings
from django.test.utils import get_runner
TestRunner = get_runner(settings, options['testrunner'])
test_runner = TestRunner(**options)
failures = test_runner.run_tests(test_labels)
if failures:
sys.exit(1)
改为
def handle(self, *test_labels, **options):
from django.conf import settings
from django.test.utils import get_runner
TestRunner = get_runner(settings, options['testrunner'])
test_runner = TestRunner(**options)
failures = test_runner.run_tests(test_labels)
if failures:
os._exit(1)
os._exit(0)
就是采用os._exit()
进行退出。这样其他线程能够收到SIGINT
的信号,然后回收资源退出就可以了。
最近对远程连接服务进行了很大程度的升级,修复了许多已有的和新发现的问题,建议对远程连接服务有需求的用户进行升级。新版本的稳定性和可用性都有了很大的提高。
Github地址
按照上面说明的安装方法进行安装
首先删除旧版本的SharpLink,一般在/Documents/SharpLink
安装新版本
cd ~/Documents/ros/src
git clone https://github.com/BlueWhaleRobot/SharpLink
cd ~/Documents/ros
catkin_make
新版本的已经做成了catkin package
可以通过catkin_make
来编译安装。
在/etc/init/
文件夹内应该有一个叫toxserver.conf
的文件,如果没有则创建一个。内容为
description "tox server daemon"
start on runlevel [2345]
stop on runlevel [06]
script
chdir /home/xiaoqiang/Documents/ros/devel/lib/sharplink
exec /home/xiaoqiang/Documents/ros/devel/lib/sharplink/SharpLink.exe
end script
创建完成后执行
sudo service toxserver start
然后执行
sudo service toxserver status
如果出现
就说明已经安装成功了。
新版本的ID可以通过下面的指令获取
cd /home/xiaoqiang/Documents/ros/devel/lib/sharplink
cat ./server.log | grep -E "[0-9]+, ID: [0-9A-F]{76}" | grep -oE -m1 "[0-9A-F]{76}"
SharpLink是小强中用来远程协助的程序。用户可以通过SharpLink把小强的端口映射到本地,这样就即使不在同一个局域网中也可以远程访问小强。SharpLink-Android就是SharpLink的Android版本。这样就可以通过手机配合遥控App(目前提供的APP还不可以,因为使用了UDP而SharpLink是TCP的)来远程控制小强了。
下载安装最上面的APK。打开APP
在服务器ID处输入自己的ID,ID可以通过这里的方法获取。
在服务器端口处输入你想要连接的小强端口。输入完成后点击CONNECT按钮,等待按钮变绿就可以了。
这时小强的目标端口就被隐射到本地的23232端口了。你可以像访问小强一样的访问23232端口。
查拉图斯特拉如是说是尼采的一本书,书中通过查拉图斯特拉的一些故事来说明尼采自己的观点。我很早就把这本书看完了,同时还有尼采的其他作品。这部作品对我的影响还是比较深的。今天在豆瓣阅读上看到这本书,同时还有其他读者的一些批注。我觉得很多人并没有理解这本书的真正含义。下面就说说我的理解,当然我也认为这是尼采真正想表达的思想。
我想从我当初的经历来说起。当初在刚入大学时,有一位老师专门教我们传统文化。宣传儒家思想。经常会说传统文化如何如何的好,让我们向传统学习。让我们每天都要读弟子规。那时我认为老师说的很有道理,每天早晨起来都会读弟子规。后来这个课结束了,很多学生也受其影响开始读儒家经典。我记得我好像是读了大学。不仅读,我还身体力行。里面怎么说我就怎么做。比如里面说坐的时候,手脚怎么放,走路时又应该怎么走。甚至我看到别人懒懒散散的样子也会非常鄙视。但是过了一段时间我觉得这很有问题。我是一个人,又不是机器人,为什么连怎么坐,怎么走路也要按照这个标准,甚至对不这么做的人还很厌恶。即使我不按照这种方法坐,不按照这种方法走,又有什么问题呢?我觉得这些违背了人的本性。
后来我看了一本尼采的作品集。因为有过这种经历就很容易明白尼采在说什么。尼采的主要观点围绕着天和地两个意象。天就是大家所推崇的一种价值观。这种价值观看起来非常的高尚。地就是人的本性。尼采不停的说上帝已死,人要回归到大地中去。就是说传统的价值观违背了人性,人要回归到本性。一直待在天上人会失去生命力。
其实天和地的区别也并不是那么大。人肯定是从地生出来的。然而人类为了活下去,为了更好的生存,又发明了天。天的本质实际上是更好的为地去服务。然而时间久了人就忘了自己是从地中来了。反而为天而活着。这就是本末倒置了。
伽利略视觉导航系统SDK v1 alpha正在开发中。我们发布了API的草案。希望大家能够根据自己的使用场景和需求提出修改意见,来更加完善这个导航系统。
想要了解这个系统的基本信息和演示视频可以看这里
所有的意见都是欢迎的。:-D
正式发布后,所有提出修改意见的人和小强用户都可以免费使用伽利略导航系统。
@alice 在 小强机器人惯性导航,在遇到障碍物时会动态蔽障吗。 中说:
请问,小强机器人惯性导航,在遇到障碍物时会动态蔽障吗。是用了navigation功能包实现的惯性导航吗
只是惯性导航的话是用红外进行避障的,遇到障碍物只能停下来。如果想要绕过去要增加其他传感器才行。
为了方便大家使用小强,我们新增了蓝鲸个人中心的功能。通过这个软件用户可以方便的对小强 进行远程管理。比如查看硬件信息,CPU,内存的使用情况,修改文件和远程连接。
在新版的蓝鲸ROS中已经包含了这个程序
git clone http://randoms@git.bwbot.org/publish/BwbotCenter.git
git checkout client
virtualenv -p /usr/bin/python3 venv
source venv/bin/activate
pip install -r requirement.txt
添加服务
对于Ubuntu 14.04版本的系统把BwbotCenter文件夹内的bwbotcenter.conf
复制至/etc/init
内。然后把文件中的路径改成自己对应的路径。
然后执行
sudo service bwbotcenter start
对于Ubuntu 16.04版本及以后版本的系统。在/usr/lib/systemd/system
文件夹中创建一个bwbotcenter.service的文件,文件内容入下
[Unit]
Description=bwbot center daemon
After=network.target
[Service]
WorkingDirectory=/home/randoms/Documents/ros/src/BwbotCenter
ExecStart=/home/randoms/Documents/ros/src/BwbotCenter/start.sh
Restart=always
[Install]
WantedBy=network.target
在终端输入
sudo systemctl enable bwbotcenter.service
sudo systemctl start bwbotcenter start
当然你可能没有这么多设备,下面就要添加自己的设备。首先要获取到自己的ID,获取方法可以参照这里。如果你安装了新版本的蓝鲸ROS,那么可以通过bwgetid
来获取自己的ID。
获取ID后右键点击设备列表
然后选择添加设备,在弹出的添加设备对话框中输入自己的设备ID和类型
完成后点击确认就可以了。添加完成的设备会显示在左侧菜单栏里面。
通过个人中心,我们可以在不需要知道小强IP的情况下对小强进行操作。使用起来非常方便。
在蓝鲸ROS中,添加了一些很有用的脚本指令。方便大家使用小强。
bwupdate
输出如下图所示
这个程序会检查有没有可用的更新并更新本地程序。
bwgetid
终端会输出一长串字符,这个就是你的设备的ID。通过这个ID可以进行远程协助和设备管理的操作。
cd /home/xiaoqiang/Documents/xiaoqiang-cmds
sudo ./fixudev
提示修复成功就可以了。
cd ~/Documents
git clone http://git.bwbot.org/publish/xiaoqiang-cmds
如果使用的是xq os 2
那么需要checkout 到kinetic分支
git checkout kinetic
在 ~/.bashrc
文件中添加
export PATH=/home/xiaoqiang/Documents/xiaoqiang-cmds:$PATH
alias sudo='sudo env PATH=$PATH'
在第一次拿到小强时,必须连接到网络才能进行一系列的操作。而想要连接网络必须要给小强连接显示器。这对于很多用户来说是很不方便的事情。有了autowif就可以很好的解决这个问题了。
有无线网卡
1.电脑端安装
在新版的蓝鲸ROS中已经安装完成,可以直接使用
git clone http://randoms@git.bwbot.org/publish/autoWifi.git
cd autoWifi
virtualenv venv
source venv/bin/activate
pip install -r requirement.txt
添加服务
对于Ubuntu 16.04 及以后的系统,在/usr/lib/systemd/system
文件夹创建autowifi.service
。内容如下
[Unit]
Description=auto Wifi service daemon
After=network.target
[Service]
WorkingDirectory=/home/randoms/Documents/ros/src/autoWifi
ExecStart=/home/randoms/Documents/ros/src/autoWifi/start.sh
Restart=always
[Install]
WantedBy=network.target
注意把路径改成自己对应的路径
启动服务
sudo systemctl enable autowifi.service
sudo systemctl start autowifi.service
2.手机端安装
下载安装最上面的那个apk就可以了。
在电脑端运行autowifi的情况下。如果现在电脑端没有网络连接。我们就可以通过操作手机客户端,控制电脑端连接上无线网络。
手机连接上想要电脑端连接的wifi。打开手机客户端,在输入框输入wifi密码
等待大概几十秒就能连接成功了。
注意:
连接的时候要保证电脑和手机的wifi信号比较强,否则可能连接失败
发布时间: 2017-5-24 10:13:50
MD5: 9b70cf95a73747396c2669b86ae24fe8
这两个文件都是需要的,下载完成后再解压可以得到iso文件。
下载完成之后一定要做一下md5的检查,确认文件完整性
注意安装时的用户名只能是xiaoqiang,否则会有问题
AutoWifi
功能,第一次使用时可以不连接显示器,直接设置小强的无线网络。具体使用可以参照这里。蓝鲸个人中心
功能。可以通过个人中心方便的对自己的设备进行控制。具体使用可以参照这里。打开虚拟机软件,这里使用的是Virtualbox。下载地址
点击创建按钮,开始创建虚拟机
按照图上设置,完成后点击下一步
内存建议设置成2G,内存太小可能会导致无法启动
设置完成后,点击上面的设置按钮。在弹出的对话框中选择存储。点击存储界面右侧的光盘图标设置镜像文件
设置完成之后点击主界面的启动按钮。等待载入系统的选择界面。
如果想要安装系统则选择第二个选项,之后按回车确认。
等待系统安装程序载入,这个过程和你的机器性能相关,如果机器性能较差可能会载入较长时间。
载入完成之后设置用户信息,注意用户只能是xiaoqiang
, hostname可以随意设置。
点击下一步进入分区界面。
选中你要安装的硬盘,然后点击Delete按钮
再次选择硬盘中的新分区
点击箭头进入下一步
再次选择刚才新建的分区
设置右侧的Mount point,再次点击箭头进入下一步
点击右下角的next就可以继续了。如果你还想设置其他分区可以按照以上的步骤进行设置。
等待系统安装完成后重新启动就可以了。
安装过程和一般的安装Ubuntu是一样的。下面介绍一下如何用U盘安装系统。
首先你要在自己的硬盘上准备一个空白的分区用来安装系统。
然后下载ultroiso软件。 下载地址
在电脑上插入自己的U盘。
用软件打开iso文件。在菜单栏中选择启动 -> 写入硬盘镜像,弹出界面如下
点击写入,等待写入完成。
写入完成之后,把U盘插入想要安装系统的电脑上。启动时进入BIOS选项,选择从U盘启动。后面的安装过程就基本上是一样的了。
注意在分区的时候,要给boot单独的分区,然后选择下面的grub安装位置。否则系统安装完成后是无法启动的。对于不同的启动方式分区也有些不同。以grub方式启动的要给/boot单独分区,以uefi方式启动的要给/boot/efi单独分区
systemback是一个很好的备份还原软件。用它还可以生成自己的linux系统镜像文件。但是在使用时会发现当生成的sblive文件大于4G的时候是没有办法生成iso文件的。这是由于iso文件自身的限制,iso9600对于文件有限制,单个文件不能超过2G,总的iso文件不能超过4G。
但是我们经常见到的系统安装iso文件很多都是超过4G的。这是怎么回事呢。经过我的苦苦搜索终于找到了一点线索。对于大于4G的可以采用udf文件系统。下面就是具体的解决方法了。
mkdir sblive
tar -xf /home/systemback_live_2016-04-27.sblive -C sblive
mv sblive/syslinux/syslinux.cfg sblive/syslinux/isolinux.cfg
mv sblive/syslinux sblive/isolinux
aria2c -s 10 https://nchc.dl.sourceforge.net/project/cdrtools/alpha/cdrtools-3.02a07.tar.gz
tar -xzvf cdrtools-3.02a07.tar.gz
cd cdrtools-3.02
make
sudo make install
/opt/schily/bin/mkisofs -iso-level 3 -r -V sblive -cache-inodes -J -l -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -o sblive.iso sblive
这样就可以了,估计当文件大于4G的时候程序会自动采用udf文件系统,所以可以成功创建iso文件。
默认的apt-get install 有时候会下载非常慢,尤其是添加的一些ppa,这时候你就需要apt-fast这个软件了。
apt-fast 通过使用多线程下载来给apt-get 提速。经过测试效果出奇的好。
下面是安装方法
sudo add-apt-repository ppa:apt-fast/stable
sudo apt-get update
sudo apt-get -y install apt-fast
在弹出的对话框中选择apt-get。安装完成之后使用方法和apt-get 是一样的。比如安装python3.5
sudo apt-fast install python3.5
这样就可以了。注意可能会弹出选项让你确认是否安装,选择是就可以了。
这个项目的地址https://github.com/ilikenwf/apt-fast
python3.5增加了很多非常棒的特性,比如协程。用起来很好,但是Ubuntu 14.04系统默认的源里面并没有包含。
下面是Ubuntu 14.04 python3.5的安装方式
sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get update
sudo apt-get install python3.5
网上很多的安装教程是把python3.5替换成系统默认的python环境。这样并不好。可能会引起系统的问题。
推荐的使用方法是用virtualenv
sudo apt-get install python-virtualenv
在你的代码文件夹内执行
virtualenv -p /usr/bin/python3.5 venv
这样会在当前路径下创建一个venv的文件夹,执行下面的指令
source venv/bin/activate
这时候终端的前面会多出一个venv的字符。这说明已经进入python的虚拟环境了。在这里安装的python包不会对系统产生影响,反之系统的包也不会对当前环境产生影响。注意一定不能用sudo pip install xxxx
来安装python包。这样会安装到系统里面去。直接pip instal xxxx
就可以了。
在用Ubuntu的时候经常需要远程桌面连接,最常用的软件就是VNC。VNC是一个开放的协议,实现的客户端有很多。但是比较各个实现之后,目前最好的就是x11vnc。这个程序不仅不收费,是开源的,而且还支持opengl程序。比如rviz之类的程序也可以正常打开了。
小强镜像中默认已经安装好了x11vnc,如果你使用小强主机或镜像,那么可以直接跳过安装过程。按照访问服务的说明进行操作。
下面介绍一下安装方法。下面是以Ubuntu 14.04为例子,如果是16.04及以后版本要对服务配置文件做对应修改。
sudo apt-get install x11vnc -y
sudo x11vnc -storepasswd /etc/x11vnc.pass
在/etc/init 下创建一个x11vnc.conf
的文件,文件内容如下
description "xiaoqiang vnc server"
start on runlevel [2345]
stop on runlevel [06]
script
exec /usr/bin/x11vnc -auth guess -capslock -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared
end script
sudo service x11vnc start
下载一个vnc客户端,比如从这里下载
打开客户端
输入目标IP
连接后输入密码
之后就可以正常连接了。
对于16.04版本和更新版本的Ubuntu,
可以按照这个文件的方法进行配置
https://github.com/longhr/ubuntu1604hub/blob/master/ubuntu1604VNC.sh
注意安装完成之后在不插显示器使用rviz时还是会报错。这时候插上hdmi转vga的转接头(不接显示器,只是转接头)就可以打开正常使用了。如果想要调整分辨率可以像正常电脑设置分辨率一样,在设置里面进行调整
对于20.04系统和16.04里面的创建方式基本一致,但是服务文件要做稍许变动
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth /run/user/1000/gdm/Xauthority -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared
[Install]
WantedBy=multi-user.target
而且在用户没有登录的情况下vnc无法远程。
在备份过程中可能提示
The restore point creation is aborted!
There has been critical changes in the file system during this operation
这并不一定是由于系统发生了严重的更改,只要是在复制文件的过程中出现错误都会出现这个信息。
详细的错误信息可以通过
systemback-sustart
这个指令去调试,看看具体哪一个文件复制出了问题。极有可能的是权限问题。
也可以通过这个指令去调试
DBGLEV=3 systemback-sustart
当错误出现后会在/tmp文件夹下创建一个systemback的错误信息文件。可以方便的通过这个文件去找到错误的原因。
在编译安装libfreenect2
时出现如下的错误
-- using tinythread as threading library
-- Checking for module 'libusb-1.0>=1.0.20'
--
CMake Error at /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:367 (message):
A required package was not found
Call Stack (most recent call first):
/usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:532 (_pkg_check_modules_internal)
cmake_modules/FindLibUSB.cmake:21 (PKG_CHECK_MODULES)
CMakeLists.txt:93 (FIND_PACKAGE)
这个错误来自于libusb
,但是我已经按照说明安装了libusb
,即执行下面的指令
sudo apt-get install libusb-1.0-0-dev
然后我又重新源码安装了最新的libusb,发现还是不行.
最后就把libfreenect2/cmake_modules/FindLibUSB.cmake
中的几行注释掉,感觉是在用pkg-config
来找库的时候module
的名字错了
# - Find libusb for portable USB support
#
# If the LibUSB_ROOT environment variable
# is defined, it will be used as base path.
# The following standard variables get defined:
# LibUSB_FOUND: true if LibUSB was found
# LibUSB_INCLUDE_DIR: the directory that contains the include file
# LibUSB_LIBRARIES: the libraries
IF(PKG_CONFIG_FOUND)
IF(DEPENDS_DIR) #Otherwise use System pkg-config path
SET(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${DEPENDS_DIR}/libusb/lib/pkgconfig")
ENDIF()
SET(MODULE "libusb-1.0")
#把下面的几行注释掉
#IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
# SET(MODULE "libusb-1.0>=1.0.20")
#ENDIF()
IF(LibUSB_FIND_REQUIRED)
SET(LibUSB_REQUIRED "REQUIRED")
ENDIF()
这样在安装说明文件的方法make就可以了