最近公司新到了几台Franka Emika 的七轴机械臂Panda,赶紧抓住机会捣鼓一下,毕竟是ROS中MoveIt!教程的官方机械臂。官方的desk编程操作当然没有问题,所以决定使用FCI(Franka Control Interface),体验下MoveIt!。FCI是啥我也就不说了,主要是为了使用FCI,官方教程要求更新Ubuntu内核,使用带RT后缀的实时内核来保证与机械臂通信的实时性,这就涉及内核的升级与切换等问题,下面是捣鼓内核的一些小总结。
在终端中执行如下命令可以查看当前内核版本
uname -r
Ubuntu内核网站:http://kernel.ubuntu.com/~kernel-ppa/mainline/
在网站选择对应的内核版本,FCI教程中是以v4.14.12为例,那这边也就将v4.14.12作为目标版本,
在其详细介绍页面根据硬件架构选择内核版本,由于FCI安装在64位Ubuntu的笔记本上,故下载AMD64相关内核文件
下载如下三个文件,可以使用wget命令也可以直接点击下载。
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.12/linux-headers-4.14.12-041412_4.14.12-041412.201801051649_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.12/linux-headers-4.14.12-041412-generic_4.14.12-041412.201801051649_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.12/linux-image-4.14.12-041412-generic_4.14.12-041412.201801051649_amd64.deb
sudo dpkg -i *.deb
安装成功后重启,默认会调用版本最高的内核使用,如果原始内核版本高于新安装内核版本,那么重启系统后查看内核版本会发现,仍然使用的是原始内核(及高版本),此时需要手动切换内核。
第一步:查询已安装的内核和内核的序号
grep menuentry /boot/grub/grub.cfg
仔细观察图中,menuentry底下还有submenu,submenu底下就包含了 带有缩进的 menuentry。以下是计数规则:
例如,若命令显示结果如下:
gaitech@franka:~$ grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
menuentry 'Ubuntu, with Linux 4.14.12-041412-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
menuentry 'Ubuntu, with Linux 4.14.12-041412-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-init-upstart-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
menuentry 'Ubuntu, with Linux 4.14.12-041412-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-recovery-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
menuentry 'Ubuntu, with Linux 4.14.12-rt10' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
menuentry 'Ubuntu, with Linux 4.14.12-rt10 (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-init-upstart-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
menuentry 'Ubuntu, with Linux 4.14.12-rt10 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-recovery-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
menuentry 'Memory test (memtest86+)' {
menuentry 'Memory test (memtest86+, serial console 115200)' {
则相应序号如下:
gaitech@franka:~$ grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
0---menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
1---submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
0---menuentry 'Ubuntu, with Linux 4.14.12-041412-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
1---menuentry 'Ubuntu, with Linux 4.14.12-041412-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-init-upstart-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
2---menuentry 'Ubuntu, with Linux 4.14.12-041412-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-recovery-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
3---menuentry 'Ubuntu, with Linux 4.14.12-rt10' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
4---menuentry 'Ubuntu, with Linux 4.14.12-rt10 (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-init-upstart-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
5---menuentry 'Ubuntu, with Linux 4.14.12-rt10 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-recovery-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
2---menuentry 'Memory test (memtest86+)' {
3---menuentry 'Memory test (memtest86+, serial console 115200)' {
根据自己需要启动的内核版本来确定启动序号。
第二步:修改grub文件
sudo gedit /etc/default/grub
打开文件后修改GRUB_DEFAULT的值(注意>之前的空格),并保存
GRUB_DEFAULT="1 >3"
#"1 >3"这个表示启动序号1中,子序号为3的启动项,即'Ubuntu, with Linux 4.14.12-rt10'
#若无子序号,则只需填入序号即可
关于GRUB_DEFAULT的值,有教程是写menuentry后单引号里的内容,但我尝试后不成功,故推荐使用数字序号。
第三步:更新grub文件,并重启
sudo update-grub
sudo reboot
此时检查内核版本即为目标版本,但此方法为修改默认启动项,当然也可以在开机时进入grub界面(如自动跳过,可在开机时长按Esc和Shift键进入选项界面),选择Ubuntu高级模式,再选择内核版本,这样的话为当次启动生效,下次启动还是会以默认内核启动。
我们可以使用以下命令删除空闲内核(删除当前版本重启会使用低一级的已安装内核,如果是最后一个内核版本删除之后重启会进入BIOS界面)
sudo apt-get remove linux-image-4.4.0-75-generic
参考:https://blog.csdn.net/csdn_duomaomao/article/details/77668946
https://blog.csdn.net/qq_42030961/article/details/82740315